ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

Amazon EC2ルートボリュームのサイズを縮小してみた

こんにちは、ソリューション技術部 平原です。

Amazon EBSボリュームのサイズ拡張はシームレスに実施でき、容易に行うことができます。
対して、EBSボリュームのサイズを縮小するにはそれなりの手間が必要となります。
今回、EC2のEBSルートボリュームサイズを縮小してみましたので、その方法を紹介します。

はじめに

言葉の定義
  • 新EBSボリューム:新規起動したEC2インスタンスのEBSルートボリューム
  • 旧EBSボリューム:縮小対象EC2インスタンスのEBSルートボリューム
留意点
  • ルートボリュームは8GB未満にはできない
  • 縮小サイズは、現在の旧EBSボリューム使用量を考慮する

手順概要

  1. 新規でEC2インスタンスを起動する
  2. 任意の作業用EC2インスタンスに新EBSボリュームと旧EBSボリュームをアタッチする
  3. 新EBSボリュームを旧EBSボリュームと同期する
  4. 縮小対象EC2インスタンスに新EBSボリュームをアタッチする
  5. 不要なリソースを削除する

概要フロー

手順詳細

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

techblog.forgevision.com

techblog.forgevision.com