内容
今回は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/new7. 縮小対象のEBSのルートボリュームをv3に変更する
・EC2を停止
・3つのボリュームを全てデタッチ
・v3をルートボリュームとしてアタッチ
→ 手順5で控えたルートデバイス名を設定
作業完了
サーバに問題がないか確認する
残作業
不要なリソースを削除
・v1, v2, 新規作成したEC2
以上です。
お疲れさまでした!






