こんにちは、ソリューション技術部 平原です。
Amazon EBSボリュームのサイズ拡張はシームレスに実施でき、容易に行うことができます。
対して、EBSボリュームのサイズを縮小するにはそれなりの手間が必要となります。
今回、EC2のEBSルートボリュームサイズを縮小してみましたので、その方法を紹介します。
はじめに
言葉の定義
- 新EBSボリューム:新規起動したEC2インスタンスのEBSルートボリューム
- 旧EBSボリューム:縮小対象EC2インスタンスのEBSルートボリューム
留意点
- ルートボリュームは8GB未満にはできない
- 縮小サイズは、現在の旧EBSボリューム使用量を考慮する
手順概要
- 新規でEC2インスタンスを起動する
- 任意の作業用EC2インスタンスに新EBSボリュームと旧EBSボリュームをアタッチする
- 新EBSボリュームを旧EBSボリュームと同期する
- 縮小対象EC2インスタンスに新EBSボリュームをアタッチする
- 不要なリソースを削除する
概要フロー
手順詳細
1. 新規でEC2インスタンスを起動する
- 新ボリュームを作成する為に、新規でEC2インスタンスを起動する
- EC2インスタンス起動時のストレージ設定にて、縮小するボリュームサイズを入力する
※ 縮小対象EC2インスタンスを最初に起動した時と同じAMI(Amazon linux AMI など)で起動することを推奨(AMIが異なる場合では未検証)
2. 任意の作業用EC2インスタンスに新EBSボリュームと旧EBSボリュームをアタッチする
新EBSボリューム及び旧EBSボリュームをデタッチする ※ 旧EBSボリュームをデタッチする前に、デバイス名を記録しておくこと(新ボリュームアタッチの際に必要なため)。
任意の作業用EC2インスタンスに新EBSボリュームと旧EBSボリュームをアタッチする
3. 新EBSボリュームを旧EBSボリュームと同期する
- 作業用EC2インスタンスに新EBSボリュームと旧EBSボリュームのマウントポイントを作成する
# mkdir -p /mnt/new /mnt/old
- 新EBSボリュームと旧EBSボリュームをマウントする
# mount /dev/xvdf1 /mnt/new # mount /dev/xvdg1 /mnt/old
- rsyncコマンドで、新EBSボリュームを旧EBSボリュームと同期する
※ この作業は、旧EBSボリュームのデータを紛失しないように(事前にsnapshotを取得するなど)、細心の注意を払って行うこと
# rsync -ax /mnt/old /mnt/new
- 新EBSボリュームと旧EBSボリュームをアンマウントする
# umount /mnt/new /mnt/old
- マウントポイントを削除する
# rmdir /mnt/new # rmdir /mnt/old
4. 縮小対象EC2インスタンスに新EBSボリュームをアタッチする
- 作業用EC2インスタンスから新EBSボリュームと旧EBSボリュームをデタッチする
- 縮小対象EC2インスタンスに新EBSボリュームをアタッチする ※ 2. で記録したデバイス名を入力すること
5. 不要なリソースを削除する
- 新規起動したEC2インスタンスや旧EBSボリュームなど、不要なリソースを削除する
さいごに
コスト削減のプレッシャーに押し潰されそうな方など、ボリュームサイズの縮小が必要な時に参考にしてもらえると幸いです!
■ おすすめ記事
techblog.forgevision.com