Amazon EBSからブートしたEC2インスタンスのディスク容量を増やす&エフェメラルディスクを取り付ける方法

by daddo83


Amazon EBSは、永続的にデータを保持できるボリューム(ディスク)が扱える、Amazon EC2のストレージオプションです。

通常(instance-store)のAmazon EC2のサーバローカルに接続されているディスクは、良くも悪くも停止時(terminate)にデータが消えてしまいますが、Amazon EBSのストレージをルートパーティションとしてインスタンスを起動(EBSブート)した場合は、停止(stop)してもデータは保持されたままとなり、ディスクに対する信頼性は向上します。(instance-storeからのブートにも良い点はあります。それは別エントリで。)

で、EBSブートのEC2インスタンスは、既存の(EBSブート用の)AMIから利用される方が多数だとは思いますが、このEBSブートした仮想サーバのルートパーティションのディスク容量は、デフォルトでは、AMIを作成した際のディスク容量に依存するようになっています。

ということで、EBSからブートしたAmazon EC2インスタンスのディスク容量を増やす方法を以下にメモしておきます。

前提

今回、例として利用する、Amazonから公式に提供されている「EBSブートなFedora8」のAMIでのルートパーティションのディスク容量は"15GB"となっています。

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15481840   1636904  13058504  12% /
none                    874032         0    874032   0% /dev/shm


しかも、上記では"instance-store"の時は接続されていた"/mnt"にマウントされている"/dev/sdb"デバイス(m1.smallの場合は150GB程度)等に割り当てられているエフェメラルディスクがありません

ということで、一時領域として使えるエフェメラルディスクを、きちんと使えるようにしつつ、ルートパーティションのディスク容量を増加させてみます。

インスタンス起動時の実行コマンドオプション


EC2のインスタンス起動時に使うコマンド"ec2-run-instances"の"-b"オプションを利用します。
使い方としては、以下のような感じです。

$ ec2-run-instances ami-853968c0 -k test_key -b /dev/sda1=:30 -b /dev/sdb=ephemeral0 -g default
RESERVATION     r-10b55354      973301199986    default
INSTANCE        i-6ebb532a      ami-853968c0                    pending test_key    0               m1.small     2010-06-08T07:55:09+0000 us-west-1a      aki-a13667e4    ari-a33667e6            monitoring-disabled                          ebs

上記のコマンド例では、ルートパーティションに"30GB"を割り当てる指定例となります。
※ AMI-ID(ami-xxxxxxxx)やSecurity Groups(-gオプション)、Key Pair(-kオプション)の指定は、適宜変えてください。


ルートパーティションである"/dev/sda1"の部分には容量(":"につなげてGB単位の数字)を指定し、"-b"オプションを並べて(複数指定可)、"/dev/sdb"にエフェメラルディスクである"ephemeral0"を割り当てる指定をします。

尚、上位のインスタンスで、エフェメラルディスクがたくさんある場合は、ephemeral[0..3]的な感じで複数指定しましょう。(ephemeral1とかephemeral2とか)

参考

オプション指定の細かい仕様については、下記の公式ドキュメントに記載されています。

インスタンス起動後

エフェメラルディスクですが、OSの"/etc/fstab"にマウントポイントが指定されていないと、デバイスが接続されただけの状態なので、下記のような感じでEC2のサーバにログイン後、手でマウントしましょう。(必要に応じて"/etc/fstab"も指定して、次回以降は自動でマウントされるようにしておくと良いですね。)

# mount /dev/sdb /mnt/


この時点でのパーティション情報は以下のような感じです。
エフェメラルディスクがマウントされて使えるようになったことが確認できます。(がっ!ルートパーティションは、まだ15GBのままなのです。続く。)

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15481840   1636904  13058504  12% /
none                    874032         0    874032   0% /dev/shm
/dev/sdb             153899044    192072 145889348   1% /mnt

ディスクデバイスがサイズアップしたことを認識させる

OS的、というかファイルシステム的にも、ディスクサイズが変わったことを知らせてやる必要があります。
以下のような感じで、ファイルシステムのリサイズを行います。

# resize2fs /dev/sda1
resize2fs 1.40.4 (31-Dec-2007)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/sda1 to 7864320 (4k) blocks.
The filesystem on /dev/sda1 is now 7864320 blocks long.


ここまで完了した時点で、以下のようにルートパーティションのサイズは30GBで認識、そしてエフェメラルディスクもマウントされた形になりました!めでたしめでたし。

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             30963708   1640696  27750340   6% /
none                    874032         0    874032   0% /dev/shm
/dev/sdb             153899044    192072 145889348   1% /mnt

参考




まとめ


クラウドAMAZON EC2/S3のすべて (ITpro BOOKs)

クラウドAMAZON EC2/S3のすべて (ITpro BOOKs)