AWS EBSルートボリュームのサイズを縮小する
内容
今回はAWS EBSのルートボリュームを縮小する方法についてまとめます。
EBSは拡張するのは簡単ですが、縮小は手間がかかります!
なので、拡張する前にスナップショットをとっておきましょう!
(それを忘れた人。)
環境
OS:Amazon Linux 2
作業概要
前提
・150G → 30Gに変更したい
- 縮小対象のEC2からルートボリュームのスナップショットを取得(縮小対象のEBSをv1とする)
- 1で作成したスナップショットからボリュームを作成 (作成したEBSをv2とする)
- 縮小対象のEC2と同じAMIからEC2を新規起動
- 3で作成したEC2からルートボリュームをデタッチ (デタッチされたEBSをv3とする)
- v2とv3のEBSを縮小対象のEC2にアタッチ
- v2の内容をv3に同期
- 縮小対象のEBSのルートボリュームをv3に変更する
作業詳細
前提
・縮小対象EC2のルートボリュームをv1とする
1.縮小対象のEC2からルートボリュームのスナップショットを取得
EC2を停止してから取得するのが確実。
2. 1で作成したスナップショットからボリュームを作成
ボリュームのアベイラビリティーゾーンは必ず対象EC2と一致させること。
ここで作成したEBSをv2とする
3. 縮小対象のEC2と同じAMIからEC2を新規起動
・今回はルートボリュームを縮小するので、縮小対象のEC2と同じAMIから作成されたEBSを使用する。
(GRUBの設定作業などが不要となる)
・ルートボリュームを30Gに設定してEC2を起動する
4. 3で作成したEC2からルートボリュームをデタッチ
3で起動したEC2を停止し、ルートボリュームをデタッチ
ここでデタッチしたEBSをv3とする
5. v2とv3のEBSを縮小対象のEC2にアタッチ
→ 縮小対象のEC2にはルートボリューム(v1)と2つのEBS(v2,v3)がアタッチされている状態になる。
※この時にルートデバイスの値を控える!
6. v2の内容をv3に同期
EBSをアタッチしたEC2を起動し、ssh接続して以下の作業を実行。
・ディスクデバイスの状態確認
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1 259:0 0 30G 0 disk
├─nvme1n1p1 259:1 0 30G 0 part
└─nvme1n1p128 259:2 0 1M 0 part
nvme2n1 259:3 0 150G 0 disk
├─nvme2n1p1 259:7 0 150G 0 part /
└─nvme2n1p128 259:8 0 1M 0 part
nvme0n1 259:4 0 150G 0 disk
├─nvme0n1p1 259:5 0 150G 0 part
└─nvme0n1p128 259:6 0 1M 0 part
・マウントポイントを作成
$ sudo mkdir /mnt/new /mnt/old
・v2とv3をマウント
※3つのボリュームはUUIDが同じなので、”-o nouuid”をつけないとエラーとなる
$ sudo mount -o nouuid /dev/nvme1n1p1 /mnt/new
$ sudo mount -o nouuid /dev/nvme0n1p1 /mnt/old
・結果確認
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1 259:0 0 30G 0 disk
├─nvme1n1p1 259:1 0 30G 0 part /mnt/new
└─nvme1n1p128 259:2 0 1M 0 part
nvme2n1 259:3 0 150G 0 disk
├─nvme2n1p1 259:7 0 150G 0 part /
└─nvme2n1p128 259:8 0 1M 0 part
nvme0n1 259:4 0 150G 0 disk
├─nvme0n1p1 259:5 0 150G 0 part /mnt/old
└─nvme0n1p128 259:6 0 1M 0 part
・v3をv2と同期する
$ sudo rsync -ax --delete /mnt/old/ /mnt/new/
・結果確認
$ df -hT
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
devtmpfs devtmpfs 960M 0 960M 0% /dev
tmpfs tmpfs 978M 0 978M 0% /dev/shm
tmpfs tmpfs 978M 448K 978M 1% /run
tmpfs tmpfs 978M 0 978M 0% /sys/fs/cgroup
/dev/nvme2n1p1 xfs 150G 17G 134G 11% /
tmpfs tmpfs 196M 0 196M 0% /run/user/1007
/dev/nvme1n1p1 xfs 30G 17G 14G 54% /mnt/new
/dev/nvme0n1p1 xfs 150G 17G 134G 11% /mnt/old
・v3をアンマウント
$ sudo umount /mnt/new
7. 縮小対象のEBSのルートボリュームをv3に変更する
・EC2を停止
・3つのボリュームを全てデタッチ
・v3をルートボリュームとしてアタッチ
→ 手順5で控えたルートデバイス名を設定
作業完了
サーバに問題がないか確認する
残作業
不要なリソースを削除
・v1, v2, 新規作成したEC2
以上です。
お疲れさまでした!