さくらのVPSのストレージが増量されたのでいったん止めて拡張した件
さくらのVPSがリリースされた直後くらいからずっと使っているが、昨年末に10周年記念でストレージ容量が20GBから25GBに拡張されていた。
長らく先延ばしにしていたが、今回ようやくファイルシステムを拡張したのでメモを残しておきたい。
Table of Contents
ストレージの拡張戦略
ストレージを拡張するにはいくつかのやり方がある。
- そもそも再インストール
- LVM なら拡張された部分を別の PE にして LVM に追加する
- 一度止めてインストール CD か何かで fdisk する
- 追加された部分を新しいパーティションとしてどこかにマウントする。
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
をしない限り変更は反映されないので、ミスったら q
か Ctrl-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 でありながら物理ハードウェアにやるような作業で拡張するのは結構緊張してしまう。構成管理していれば済む話ではあるが……