サイトアイコン 協栄情報ブログ

AWS EBSルートボリュームのサイズを縮小する方法


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

皆さま、こんにちは!協栄情報の陳です。

やりたいこと

EBSはサイズの拡張が容易になりますが、縮小ができません。でも、課金を抑えたいという意図など、どうしてもサイズを小さくしたい場合もあります。
今回は、データ同期を利用して、EBSを30Gから10Gへ縮小します。

環境

OS:RHEL7.9

作業ステップ

同期元としてボリュームの作成

EC2を停止して、ルートボリュームからナップショット[EBS-SNAPSHOT]取得

ナップショット[EBS-SNAPSHOT]作成済みことを確認

スナップショットから同期元としてボリュームを作成
注意:ボリュームのアベイラビリティーゾーンは必ず対象EC2と一致

ボリューム[SNAPSHOT]作成済みことを確認

縮小後新ボリュームの作成

今回の縮小対象ボリュームはルートボリュームなので、新ボリュームにディスクパーティションの作成を回避するために、対象EC2と同じのAMIからEC2を新規起動して、ルートボリュームを取得します:
①対象EC2と同じのAMIからEC2を新規起動して、ルートボリュームを10Gに設定します。
②新EC2を作成した後で、停止にして、ルートボリュームをデタッチします。
※新ボリュームを取得するために、新EC2を作成したので、ボリュームを取得できたら、新EC2を削除しても構わないです。

ボリューム[NEW]作成済みことを確認

ボリュームのアタッチ

同期元ボリューム[SNAPSHOT]と新ボリューム[NEW]を対象EC2にアタッチします。

ボリュームの同期

対象EC2を開始して、SSHでディスクデバイスの状態をみてみます。

マウントポイントを作成します。
$ sudo mkdir /mnt/new /mnt/old
同期元と新ボリュームをマウントします。

注意:3つのボリュームは、UUIDが同じですので、"-o nouuid"をつけないとエラーとなります。

$ sudo mount -o nouuid /dev/xvdf2 /mnt/new
$ sudo mount -o nouuid /dev/xvda2 /mnt/old
マウント結果を確認します。

新ボリュームを同期元ボリュームと同期します。

rsyncオプション:
-a 転送元のディレクトリを再帰的にオーナー・グループ・パーミッション・タイムスタンプをそのままコピーします。
-x 再帰的に実行された時にファイルシステムの境界を横断しません。
–delete 転送元のディレクトリに存在せず転送先のディレクトリに存在するファイルがあれば削除します。

$ sudo rsync -ax --delete /mnt/old/ /mnt/new/
同期結果を確認します。

新ボリュームをアンマウントします。
$ sudo umount /mnt/new

ボリュームの切り替え

EC2を停止して、3つのボリュームを全部デタッチして、10Gの新ボリュームをルートボリュームとしてアタッチします。
注意:ルートデバイス名は必ず"/dev/sda1"とします。

結果検証

EC2を開始して、SSHでユーザ名、インストールされたAPPなどを検証します。

最後に

この方法は1つのEC2(新ボリューム取得するためのEC2)と2つのEBS(ボリューム[EBS-SIZE-REDUCE]とボリューム[SNAPSHOT])が残っているため、忘れずに、細心な注意を払う、削除してください。それに、新ルートボリュームの「終了時に削除」が"いいえ"になりましたので、気にすれば、スナップショット→AMI→新EC2起動で「終了時に削除」が"はい"に変更できます。

それでは、今回も読んでいただきありがとうございました!!

モバイルバージョンを終了