Google Cloud Platformの起動ディスクは、サイズの拡張機能はサポートされているが、縮小機能はサポートされていない。色々調べてみたが縮小の手順を説明しているサイトも見つけられなかった。
そこで、新しく作成した小さめのブートディスクを作成し、既存のブートディスクから必要な内容を転送することで、縮小された起動ディスクを作成し、入れ替えてみた。

  • GCPのCompute Engineのページから縮小後のサイズに合わせた新規のインスタンスを作成。
    • 既存のインスタンスと、同じOS、同じバージョン、同じ設定とする。
    • 「管理、セキュリティ、ディスク、ネットワーキング、単一テナンシー」をクリックして「ディスク」を選択し、「インスタンスを削除する際にブートディスクを削除する」のチェックボックスを外しておく。
  • インスタンスが起動したらログインし、aptコマンドで最新にupdate,upgradeを行い、インスタンスを停止。
  • 作成したインスタンスを削除(作成したブートディスクはそのまま残る)
  • 既存のインスタンスを編集し、「追加デイスク」の「既存のディスクを接続」をクリックし、作成したディスクをアタッチする。
  • 既存のインスタンスにログインし、aptコマンドで最新にupdate,upgradeを行ってから、lsblkでディスクの名前を確認する。
  • # lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    loop0  7:0 0 55.5M 1 loop /snap/core18/2074
    loop1  7:1 0 55.4M 1 loop /snap/core18/2128
    loop2  7:2 0 61.7M 1 loop /snap/core20/1026
    loop3  7:3 0 61.8M 1 loop /snap/core20/1081
    loop4  7:4 0 234.4M 1 loop /snap/google-cloud-sdk/192
    loop5  7:5 0 234.7M 1 loop /snap/google-cloud-sdk/193
    loop6  7:6 0 68.2M 1 loop /snap/lxd/21039
    loop7  7:7 0 68.3M 1 loop /snap/lxd/21260
    loop8  7:8 0 32.3M 1 loop /snap/snapd/12398
    loop9  7:9 0 32.3M 1 loop /snap/snapd/12704
    sda  8:0 0 30G 0 disk 
    ├─sda1 8:1 0 29.9G 0 part /
    ├─sda14 8:14 0  4M 0 part 
    └─sda15 8:15 0 106M 0 part /boot/efi
    sdb  8:16 0 10G 0 disk 
    ├─sdb1 8:17 0 9.9G 0 part 
    ├─sdb14 8:30 0  4M 0 part 
    └─sdb15 8:31 0 106M 0 part
    

    上記の場合、既存のブートディスクが/dev/sdaにあり、転送先が/dev/sdbにある。/bootディレクトリはコピーせずそのまま使用するので、/dev/sdb1を/mnt/rootにマウントする。

    # mkdir /mnt/root
    # mount /dev/sdb1 /mnt/root
    
  • /dev, /proc, /sys, /tmp, /run, /boot, /snap, /mnt, /media, /lost+found以外のディレクトリを転送するので、それ以外のディレクトリを削除しておく。
  • rsyncを使って、必要なファイルを転送する。
  • rsync -aAXH --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/boot","/snap","/mnt/*","/media/*","/lost+found"} / /mnt/root
    
  • 転送が終わったら/snapディレクトリの内容を確認し、先のlsblkでloopxで表示されているマウントポイントとなるディレクトリを作成し、マウントされていないファイル(/snap/binとそれ以外のディレクトリにあるcurrentのシンボリックリンク)をコピーあるいは転送する。(snapディエクトリの取り扱いはよく分かっていないので、こうしておけば大丈夫だろうという処置)
  • インスタンスを停止。
  • インスタンスを編集し、「Boot Disk」と「追加ディスク」にアタッチされているディスクを外して保存。
  • 再度インスタンスを編集し、「Boot Disk」に作成・転送したブートディスクをアタッチし保存。
  • インスタンスを起動して正常に動作することを確認。

この方法が完全に正しいかどうかは自信がないが、このサイトのサーバはこの手順で入れ替えたブートディスクで特に問題なく動作している。