GCEのDISKサイズ縮小

2018-07-27 01:26:34

 GCEでインスタンスを作る際に、ディスクサイズを無駄に大きめに作ってしまいました。このままだと無駄なコストが発生するので、縮小方法を調べてみました。標準機能では拡張するのは簡単ですが、縮小する方法は用意されていません。

 ネットで方法を調べた結果、縮小は無理というありがたい情報しか出てきませんでした。他人の情報に頼れないときは自分で実験を繰り返すのみです。

‌ ということでfdiskを使い、パーティションを無理矢理縮小する方法などを試してみました。縮小したパーティションを、小さいサイズで作った別ディスクに丸ごとコピーする手順です。‌結果、見事にブートに失敗。xfsのUUIDの調整なども試みましたが、何をどうやってもブート出来ません。

 ‌ ディスクイメージを丸ごとコピーするのは諦めました。ならば必要なファイルだけコピーすればいいのです。ということで以下の方法で縮小を行いました。

‌1 サイズを縮小したいインスタンスのスナップショットをとる
2 インスタンスのスナップショットを稼働中のサーバ(元のインスタンスでもOK)の追加ディスクとして作成
3 現在のOSと同じイメージを元にサイズを考慮して追加ディスクを作成
4 以下のコマンドでイメージをコピー

元DISKが/dev/sdb1
‌新DISKが/dev/sdc1

mkdir /mnt/disk1 /mnt/disk2 mount /dev/sdb1 /mnt/disk1 mount /dev/sdc1 /mnt/disk2 rsync -av /mnt/disk1/ /mnt/disk2/ --exclude='/boot/' --exclude='/dev/' --exclude='/etc/fstab' umount /mnt/disk1 umount /mnt/disk2 rmdir /mnt/disk1 /mnt/disk2

‌5 sdcに割り当てたディスクのスナップショットをとる
6 スナップショットを元に新規インスタンスを作成する
 fstabはxfsのUUIDの絡みで除外設定しています。/bootに関しても同様です。
‌ ちなみに5と6は、インスタンスを作る際にコピー先のディスクをそのまま使えば省略可能です。

 ‌今のところこの手順で問題なく動いています。もし動かなくなっても、最悪元のスナップショットで復元可能です。ということで、もしこの手順を試すなら、元のスナップショットは残しておいてください。