EC2のボリューム拡張しておいて!
と指示をされることがたまにある。「EBSボリュームを増やすだけで良いんや~」と思ってた自分がいたが、EBSボリュームサイズを増やしただけでは、サーバのファイルシステムは自動的に拡張されない。
本記事では、EBSボリュームのサイズ変更後に、ファイルシステムを拡張する方法を詳しく解説する。
EBSとは?
Amazon Elastic Block Storeの略称で、EC2インスタンスにアタッチして使用される高い可用性と信頼性、耐久性を実現するように設計されているストレージサービス。以下のような特徴がある。
- 高可用性
99.999% の耐久性と 0.001% の年間故障率 (AFR) を提供するように設計されている。 追加料金なしで、同じアベイラビリティーゾーン内の複数のサーバーにレプリケートされる。 - ボリュームの種類
ボリュームの種類が2種類存在し、 - スケーラビリティ
必要に応じてボリュームサイズを拡張できる。本記事で紹介する部分。 - 暗号化
データ保護のために保存時の暗号化をサポートしている。①SSD を基盤とするボリューム、②HDD タイプのボリュームが存在する。 - スナップショット
ポイントインタイムスナップショットをAmazon S3 に保存する機能が用意されている。 バックアップや災害対策のために使用される。
手順0.EC2インスタンスの用意とボリュームの確認
準備としてEC2インスタンスを起動しておく。ここでのボリュームサイズは8GiB、ボリュームタイプはgp3を使用する。
事前に確認したボリュームサイズとファイルシステムの容量を記載しておく。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
xvda 202:0 0 8G 0 disk
├─xvda1 202:1 0 8G 0 part /
├─xvda127 259:0 0 1M 0 part
└─xvda128 259:1 0 10M 0 part /boot/efi
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 475M 0 475M 0% /dev/shm
tmpfs 190M 2.9M 188M 2% /run
/dev/xvda1 8.0G 3.5G 4.5G 44% /
tmpfs 475M 4.0K 475M 1% /tmp
/dev/xvda128 10M 1.3M 8.7M 13% /boot/efi
tmpfs 95M 0 95M 0% /run/user/1000
手順1.EBSボリュームのサイズ変更
まず、AWSマネジメントコンソールまたはAWS CLIを使用して、EBSボリュームのサイズを変更する。
- AWSマネジメントコンソールにログイン。
- EC2ダッシュボードに移動し、「ボリューム」をクリック。若しくは、対象EC2インスタンスの「ストレージ」タブからアタッチされているボリュームをクリック。
- 拡張したいボリュームを選択し、「アクション > ボリュームの変更」をクリック。
4. 新しいサイズを入力し、「変更」をクリック。今回は8 GiB → 16 GiBに変更する。
5. 確認画面が表示されるため、「変更」をクリック。
ボリュームの変更が開始される。大体5分くらい待つと「使用中」となっている箇所が「使用中」になる。
手順2.ボリュームサイズの確認
EBSボリューム全体(xvda
)は「16G」となっており、EBSは拡張されていることが確認できる。
一方でルートボリューム(/にマウントされているxvda1
)を確認すると「8G」と表示されており、EBSボリュームは8GiB → 16GiBに拡張したがEC2インスタンスに反映されていないことが確認できる。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
xvda 202:0 0 16G 0 disk
├─xvda1 202:1 0 8G 0 part /
├─xvda127 259:0 0 1M 0 part
└─xvda128 259:1 0 10M 0 part /boot/efi
lsblkコマンド
lsblk
コマンドは "List Block Devices" の略で、システム上のすべてのブロックデバイスに関する情報を一覧表示するためのコマンド。
- NAME: デバイスの名前。
xvda
はEBSボリューム全体を指します。これは、AWSのXen仮想化環境で使用される命名規則。xv
は"Xen Virtual"の略d
は"disk"を表すa
は最初のディスクを意味する(2つ目would bexvdb
, 3つ目はxvdc
など)
xvda1
,xvda127
,xvda128
はxvdaの各パーティション。
- MAJ:MIN: メジャー番号とマイナー番号。デバイスドライバーを識別するために使用される。
- RM: リムーバブルデバイスかどうか(0=固定、1=リムーバブル)。
- SIZE: デバイスまたはパーティションのサイズ。
- RO: 読み取り専用かどうか(0=読み書き可能、1=読み取り専用)。
- TYPE: デバイスの種類(disk=ディスク全体、part=パーティション)。
- MOUNTPOINTS: マウントポイント(デバイスがマウントされている場所)。
手順3.パーティションの拡張
まずはボリュームのパーティションを拡張する。以下はパーティション拡張前のもので、xvda1を拡張する。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
xvda 202:0 0 16G 0 disk
├─xvda1 202:1 0 8G 0 part /
├─xvda127 259:0 0 1M 0 part
└─xvda128 259:1 0 10M 0 part /boot/efi
growpart
コマンドでパーティションを拡張する。
$ sudo growpart /dev/xvda 1
CHANGED: partition=1 start=24576 old: size=16752607 end=16777183 new: size=33529823 end=33554
399
再度 lsblk
コマンドで確認し、パーティションが拡張されていれば良い。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
xvda 202:0 0 16G 0 disk
├─xvda1 202:1 0 16G 0 part /
├─xvda127 259:0 0 1M 0 part
└─xvda128 259:1 0 10M 0 part /boot/efi
EBSボリュームを拡張しても、自動的にはそのスペースが利用可能にはならないことが分かったと思う。パーティションを拡張することで、新しく追加されたスペースを既存のファイルシステムで利用できるようになる(手順4で紹介するファイルシステムの拡張が必要だが)。これにより、次のステップのファイルシステムの拡張が可能になる。
手順4.ファイルシステムの拡張
パーティションを拡張しても、自動的にはファイルシステムは拡張されず、拡張してあげないと増やしたディスク容量を実際に使用することができない。
df -hT
コマンドでファイルシステムのサイズや使用率が確認できる。ルートボリュームにマウントされている/dev/xvda1
は「8.0G」のため拡張する必要がある。
$ df -hT
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 475M 0 475M 0% /dev/shm
tmpfs tmpfs 190M 2.9M 188M 2% /run
/dev/xvda1 xfs 8.0G 3.5G 4.5G 44% /
tmpfs tmpfs 475M 4.0K 475M 1% /tmp
/dev/xvda128 vfat 10M 1.3M 8.7M 13% /boot/efi
tmpfs tmpfs 95M 0 95M 0% /run/user/1000
ファイルシステムのタイプがxfs
のため、xfs_growfs
コマンドを使用してルートボリューム(/
)にマウントされているファイルシステムを拡張する。
$ sudo xfs_growfs /
meta-data=/dev/xvda1 isize=512 agcount=2, agsize=1047040 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1
data = bsize=4096 blocks=2094075, imaxpct=25
= sunit=128 swidth=128 blks
naming =version 2 bsize=16384 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=16384, version=2
= sectsz=4096 sunit=4 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2094075 to 4191227
ルートボリュームにマウントされている/dev/xvda1
のファイルシステムのサイズが「16GB」に拡張されていることが確認できる。
ここでEBSボリュームとルートボリュームにマウントされているファイルシステムのサイズが一致していればOK!
$ df -hT
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 475M 0 475M 0% /dev/shm
tmpfs tmpfs 190M 2.9M 188M 2% /run
/dev/xvda1 xfs 16G 3.6G 13G 23% /
tmpfs tmpfs 475M 4.0K 475M 1% /tmp
/dev/xvda128 vfat 10M 1.3M 8.7M 13% /boot/efi
tmpfs tmpfs 95M 0 95M 0% /run/user/1000
ファイルシステムのタイプがext4
の場合、以下コマンドでファイルシステムの拡張が可能。
$ sudo resize2fs /dev/xvda1