さくらのVPSのストレージが増量されたのでいったん止めて拡張した件


さくらのVPSがリリースされた直後くらいからずっと使っているが、昨年末に10周年記念でストレージ容量が20GBから25GBに拡張されていた。

長らく先延ばしにしていたが、今回ようやくファイルシステムを拡張したのでメモを残しておきたい。

ストレージの拡張戦略

ストレージを拡張するにはいくつかのやり方がある。

  1. そもそも再インストール
  2. LVM なら拡張された部分を別の PE にして LVM に追加する
  3. 一度止めてインストール CD か何かで fdisk する
  4. 追加された部分を新しいパーティションとしてどこかにマウントする。

1 は Gentoo Linux だと再インストールが面倒くさいので却下、2 は LVM にしていなかったので無理、4 だと(今回は)マウント箇所が微妙、ということで今回は 3 しか選択肢がなかった。3 の場合、パーティションテーブルの最後のパーティションが拡張されることになる。

ただ、当初 Gentoo Linux をインストールしたときに使った SystemRescueCD のパーティションは残っているものの、中身が古すぎること、そして今の SystemRescueCD をインストールするにはパーティションサイズが小さすぎることから、別のやり方でトライすることにした。

なお、これまで SystemRescueCD を入れていたパーティションは EFI を見据えて /boot として再利用することにする。

SystemRescueCD のインストール

今回は SystemRescueCD の ISO イメージを grub で起動するようにしたい。なので、まずは ISO イメージをダウンロードする。

ISO イメージは /boot に置くのが定番かもしれないが、今回は /usr/share/systemrescue/systemrescue.iso として保存した。

次に、grub 2 から SystemRescueCD を起動できるようにする。基本的な How-to は公式にあるので、これを参考にすればよい。

grub 2 の設定は /etc/grub.d/50_sysresccd として以下のように書いた。

#!/bin/sh
exec tail -n +3 $0

menuentry "SystemRescue (isoloop)" {
    load_video
    insmod gzio
    insmod part_gpt
    insmod part_msdos
    insmod ext2
    insmod ext4

    search --no-floppy --label root --set=root

    loopback loop /usr/share/systemrescue/systemrescue.iso
    echo   'Loading kernel ...'
    linux  (loop)/sysresccd/boot/x86_64/vmlinuz img_label=root img_loop=/usr/share/systemrescue/systemrescue.iso archisobasedir=sysresccd copytoram setkmap=jp
    echo   'Loading initramfs ...'
    initrd (loop)/sysresccd/boot/x86_64/sysresccd.img
}

上の例だと、ISO があるパーティションに root というラベルがついていることが前提になる。なので、念のためラベルがついているか確認する。

# e2label /dev/sda3
root

ラベルがついていない場合は以下のようにしてラベルをつける。

# e2label /dev/sda3 root

なお、定石としては UUID でごにょごにょするのが正しいとは思う。

grub 2.0 の設定を書いたら grub.cfg を再生成する。

# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Linux イメージを見つけました: /boot/vmlinuz-5.13.8-gentoo
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
完了

これで SystemRescueCD の準備は完了となる。

領域の拡張

準備ができたら再起動するのだが、shutdown -r now ではなくいったんシャットダウンする。理由はシンプルで、インスタンスを停止しないとストレージ容量が 20GB から 25GB に拡張されないから。

シャットダウンしたら、コントロールパネルからインスタンスを起動する。

起動と同時に VNC コンソールを立ち上げ、grub のメニューで SystemRescueCD を選択するようにする。

シェルまでたどり着いたら、fdisk /dev/sda して容量を拡張する。まず p で既存のパーティション構成を確認してからd で一番最後のパーティションを削除する。

パーティションを削除したら、このまま再度パーティションを作成する。

ここで気をつけないといけないのは、
  • 新しく切るパーティション先頭セクタを拡張したい一時削除したパーティションの先頭セクタと揃えること。つまり、デフォルトの値を鵜呑みにしないこと。
  • 新しく切るパーティションの最後尾セクタはデフォルト値を指定すること。
  • 「Do you want to remove the signature?」には必ず「n」とすること。

の 3 点になる。特に 1 番目と 3 番目を守らないとデータが消えてしまうので気をつける必要がある。

パーティションを作成できたら、w で変更を反映する。逆に言えば、w をしない限り変更は反映されないので、ミスったら qCtrl-C で fdisk を抜ければ良い。

最後に resize2fs でファイルシステムを拡張して完了となる。

完了したら、shutdown -r now して再起動する。

確認

Gentoo Linux が無事に起動したら、df で容量が拡張されているかを確認する。

# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root         23G   13G  8.7G   59% /
devtmpfs          10M     0   10M    0% /dev
tmpfs            197M  420K  197M    1% /run
cgroup_root       10M     0   10M    0% /sys/fs/cgroup
shm              492M     0  492M    0% /dev/shm

こんな感じでやってみると簡単ではあるが、VPS でありながら物理ハードウェアにやるような作業で拡張するのは結構緊張してしまう。構成管理していれば済む話ではあるが……