VPSで以下構成でインストールしたい。
# fstab
/dev/vg/swaplv none swap sw 0 0
/dev/vg/rootlv / btrfs subvol=@ 0 1
/dev/vg/bootlv /boot ext4 defaults 0 1
Ubuntu ubiquityインストーラのデフォルトではsubvol=/
でインストールされてしまう。これではスナップショットが使いにくい。
自分の環境ではBIOS(KVM)なのでefiパーティションは作っていないが/boot/efiをマウントすれば同様。
インストール前提
自動セットアップは使えないので通常のlive-server.isoを使う。
https://cdimage.ubuntu.com/ubuntu-server/daily-live/current/
VPSのWebコンソール(novnc)では日本語キーボードで@を入力できないことが多いのでSSH経由で実行する。
インストール用SSHセットアップ
- iso boot後言語選択画面から F1キー -> Help > Exit to shellでシェルへ抜ける。
- root shellが自動で起動しているが、rootでのSSHログインは無効化されているようなのでデフォルトの
installer
ユーザを使う。 - パスワード設定されていないので
passwd installer
でパスワードを設定 - ipアドレスはDHCPで割り当てられているはず。
ip addr
、ip route
で確認。 - リモートからinstallerユーザでログインすると自動でsubiquityが立ち上がる。
インストール
通常のインストール手順を進める。
(LVM作成が若干UI変わっている。VGを消して再作成するとおかしくなるなど挙動が怪しかった20.04から改善されているようだ)
インストーラの中でネットワーク設定の自動検出中にSSHが切れる場合があるので注意。もし切れたらコンソール側で再設定が必要。
インストール完了後リブートせずにもう一度シェルへ抜ける。
subvolume再配置
インストール完了後の/
は/target
にマウントされたままなのでsubvolを作って再マウントし、initramfs/grubに反映する。
(/boot
デバイスを変えていなければgrub側の変更は必要無いはずだが念のため)
# スナップショットでrwコピーを作る
sync
btrfs subvolume snapshot /target /target/@
btrfs property set -ts /target/@ ro false
# 最終構成にあわせて再マウント
# umount /target/boot/efi
umount /target/boot
umount /target
mount -o subvol=@ /dev/vg/rootlv /target
mount /dev/vg/bootlv /target/boot
# mount /dev/vda1 /target/boot/efi
# update-initramfs/grub用にデバイスを持ち込む
mount --bind /proc /target/proc
mount --bind /dev /target/dev
mount --bind /sys /target/sys
# fstabのsubvol変更。ついでに/swap.imgのエントリが自動で入っているので消しておく。
vim /target/etc/fstab
# 最終構成のchrootに入ってfstabとgrubの反映
chroot /target
update-initramfs -u
grub-install --recheck /dev/vda
update-grub
# 再起動
exit
reboot
再起動後
- スナップショットもとが
subvol=/
に残っているので忘れず削除。 - /tmpあたりはsubvolに切り分けておいたほうが良さそう