EC2で、非LVMパーティションを拡張する
最近だとAWS等のクラウドを使う機会が増えていて、逆に物理サーバーを使うことが少なくなってきており、以前みたいにサイジングを細かくやることが少なくなってきた。
また、随分前から多くのLinuxディストリビューションでは、デフォルトのセットアップでLVMを使うようになっているので、仮想ディスクを追加してLVMのボリューム拡張という方法で、サービスを止めずにディスク容量の拡張が可能になっている。
これだけだと「便利な時代になったね」でおしまいの話なんだけど、EC2の場合、非LVMのパーティションも比較的簡単に拡張が可能なので、それについて説明する。ただし以下の制約がある。
- / パーティションは拡張できない
- サービス停止は必要
- (当然だけど)ext4等、拡張可能なファイルシステムを使用している必要がある
今回紹介する方法以外で、もっといい方法があれば是非教えて下さい。
概要
最初に24GBのディスクが1つ付いていて、以下のようにパーティションが分かれているとする。
- 8GB /
- 16GB /data
/data の容量が足りなくなってきたので拡張したいとする。今回は大体以下の様な流れで進めていく。
- インスタンスのAMIを作成
- ディスク容量を増やして新しいインスタンスを作成
- パーティションテーブルの書き換え
- ファイルシステムの拡張
大雑把に描くと、以下の様な図になる。
インスタンスのAMIを作成
AMIの作成は説明不要だと思うので省略。次に、作成したAMIを元に新しくインスタンスを作成する。その際に、ディスク容量を設定する画面では、デフォルトでは元のインスタンスのディスクサイズ(24GB)になっているが、それをここでは32GBにしてみる(8GB増やした)。
この状態でインスタンスを起動し、起動後にdf -hとやっても、見かけ上ディスク容量は増えていない。次に説明する「パーティションテーブルの書き換え」を行う必要がある。
パーティションテーブルの書き換え
パーティションテーブルとは、大雑把に言うとハードディスク上で、どのパーティションがどこからどこまでを使っているかを表す情報で、fdisk -l で見ることが出来る。
(例として挙げている構成とは容量とかデバイス名とか違うけど)、実際に実行した結果は以下のような感じ。
Disk /dev/xvde: 32.2 GB, 32212254720 bytes 255 heads, 63 sectors/track, 3916 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000aa427 Device Boot Start End Blocks Id System /dev/xvde1 * 1 591 4743164 83 Linux /dev/xvde2 591 653 499712 82 Linux swap / Solaris /dev/xvde3 653 2610 15721945 83 Linux
これのEndセクターを書き換えて、前述の図の3番目のような状態にする。この作業はfdiskコマンドでも多分出来ると思うけど、自分はcfdiskを使用した。
なお、この際の注意点としては、Startセクタは変えてはいけない。
また、当然ながら、このパーティションを使用しているファイルシステムをumountする必要がある(なので、この方法ではルートパーティションのサイズ変更は出来ない)。
ファイルシステムの拡張
先ほどの図には書いていないけど、実際にはパーティションの中にファイルシステムが入っている。ここまでの作業でパーティションは拡張したが、中に入っているファイルシステムは拡張していない。
ファイルシステムを拡張するには resize2fs を使用すればいい。
resize2fs /dev/sda2
とやると、デフォルトではパーティションの空き容量を目一杯使ってくれるので、今回であれば16GB→24GBになるはず、なんだけど、上の方でやったパーティションテーブルの書き換えがうまく認識されていないっぽい。
結論から言うと、面倒なので再起動してから再度resize2fsを実行したら、拡張後のサイズで認識された。
まとめ
仮想環境は構成変更が比較的楽で便利だね。でも、LVMにしておけば、今回やったような面倒な事は不要なのでもっと便利。