EC2で、非LVMパーティションを拡張する

最近だとAWS等のクラウドを使う機会が増えていて、逆に物理サーバーを使うことが少なくなってきており、以前みたいにサイジングを細かくやることが少なくなってきた。

また、随分前から多くのLinuxディストリビューションでは、デフォルトのセットアップでLVMを使うようになっているので、仮想ディスクを追加してLVMのボリューム拡張という方法で、サービスを止めずにディスク容量の拡張が可能になっている。

これだけだと「便利な時代になったね」でおしまいの話なんだけど、EC2の場合、非LVMのパーティションも比較的簡単に拡張が可能なので、それについて説明する。ただし以下の制約がある。

  • / パーティションは拡張できない
  • サービス停止は必要
  • (当然だけど)ext4等、拡張可能なファイルシステムを使用している必要がある

今回紹介する方法以外で、もっといい方法があれば是非教えて下さい。

概要

最初に24GBのディスクが1つ付いていて、以下のようにパーティションが分かれているとする。

  • 8GB /
  • 16GB /data

/data の容量が足りなくなってきたので拡張したいとする。今回は大体以下の様な流れで進めていく。

  • インスタンスのAMIを作成
  • ディスク容量を増やして新しいインスタンスを作成
  • パーティションテーブルの書き換え
  • ファイルシステムの拡張

大雑把に描くと、以下の様な図になる。

extend-partition

インスタンスの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にしておけば、今回やったような面倒な事は不要なのでもっと便利。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です