ハマログ

株式会社イーツー・インフォの社員ブログ

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

内容

今回はAWS EBSのルートボリュームを縮小する方法についてまとめます。

EBSは拡張するのは簡単ですが、縮小は手間がかかります!
なので、拡張する前にスナップショットをとっておきましょう!
(それを忘れた人。)

環境

OS:Amazon Linux 2

作業概要

前提

・150G → 30Gに変更したい

  1. 縮小対象のEC2からルートボリュームのスナップショットを取得(縮小対象のEBSをv1とする)
  2. 1で作成したスナップショットからボリュームを作成 (作成したEBSをv2とする)
  3. 縮小対象のEC2と同じAMIからEC2を新規起動
  4. 3で作成したEC2からルートボリュームをデタッチ (デタッチされたEBSをv3とする)
  5. v2とv3のEBSを縮小対象のEC2にアタッチ
  6. v2の内容をv3に同期
  7. 縮小対象の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

以上です。
お疲れさまでした!

Amazon Web Service

  as   2021年10月29日


関連記事

Amazon Linux 2にSupervisorを設定する

Laravelでキューワーカー(Queue Worker)を実行するために、Am…

Amazon Linux 2 x86_64 standard: 3.0のCodeBuild環境でPHP8.0を使う方法。

『今度の開発はPHP8.0環境にLaravel8でソース組んでるんでインフラもそ…

AWS WAFのログを調査する

403 Forbiddenが発生したので調査。 そのサービスではAWS WAFを…


← 前の投稿

次の投稿 →