はじめに
Proxmox VEはZFSにインストールできますが、システムをバックアップしようとするとZFSストレージプール(zpool)の名前が衝突してしまいます。GRUBをもう一つインストールすればいいはずですが、この際gummibootというUEFI用のシンプルなブートローダーを使ってみます。
gummibootのセットアップ
新しいUSBメモリーを一つ用意してそこにセットアップしていきます。
EFI System partitionパーティションを作成
dev='/dev/<sdX>' &&
sgdisk -Z $dev && #既存のGPTとMBRを消去
sgdisk -o $dev && #GPT(パーティションテーブル)を作成
sgdisk -n 1::+512M -t 1:ef00 $dev && #第1パーティションにEFI System partitionを作成
sgdisk -p $dev && #GPTを確認
sgdisk -i 1 $dev #第1パーティションを確認
パーティションをフォーマット
dev='/dev/<sdX>' &&
mkfs.vfat -F32 "${dev}1"
gummibootのインストール
apt-get install gummiboot
ブートローダーを作成
dev='/dev/<sdX>' &&
esp='/mnt/boot' &&
mkdir $esp &&
mount "${dev}1" $esp &&
gummiboot install --path $esp &&
cp '/boot/initrd.img-4.4.6-1-pve' "$esp/initrd.img-4.4.6-1-pve" &&
cp '/boot/vmlinuz-4.4.6-1-pve' "$esp/vmlinuz-4.4.6-1-pve"
ブートローダーを設定
$esp/loader/loader.confを作成
default pve
timeout 5
editor 0
$esp/loader/entries/pve.confを作成
title Proxmox Virtual Environment
linux /vmlinuz-4.4.6-1-pve
initrd /initrd.img-4.4.6-1-pve
options root=ZFS=rpool/ROOT/pve-1 rw boot=zfs quiet rootdelay=2
マウントを恒久化
vi /etc/fstab
下記の行を追加
PARTUUID=<partuuid> $esp vfat defaults,noatime,nofail 0 2
確認
これで既存のProxmox VEをgummibootからブートすることができるはずです。Proxmox VEではZFS RootのブートはBIOSブートしか対応していませんが、gummibootによってUEFIブートができるようになります。
ZFS Rootをバックアップ
さきほどのUSBメモリーにバックアップしていきます。
ZFS用のパーティションを作成
dev='/dev/<sdX>' &&
sgdisk -n 2:: -t 2:bf01 -c 2:'zfs' $dev && #第2パーティションにSolaris /usr & Mac ZFSを作成
この後、再起動が必要になるかもしれません。
ZFSストレージプールを作成
zpoolname1='rpool' &&
zpoolname2='rpool2' &&
partuuid='<partuuid>' &&
zpool create -o ashift=12 $zpoolname2 "/dev/disk/by-partuuid/$partuuid" &&
zfs set compression=lz4 $zpoolname2 &&
zfs set atime=off $zpoolname2 &&
zfs set sync=standard $zpoolname2
ZFSを作成
zpoolname2='rpool2' &&
zfs create $zpoolname2/ROOT &&
zfs create -V 1G -b 4K -o primarycache=metadata -o sync=always -o com.sun:auto-snapshot=false $zpoolname2/swap &&
スワップは通常2GBのところ1GBにしてありますが、お好みで変更してください。
ZFSをコピー
zpoolname1='rpool' &&
zpoolname2='rpool2' &&
zfs snapshot $zpoolname1/ROOT/pve-1@temp &&
zfs send $zpoolname1/ROOT/pve-1@temp | zfs recv $zpoolname2/ROOT/pve-1 &&
zfs destroy $zpoolname1/ROOT/pve-1@temp &&
zfs destroy $zpoolname2/ROOT/pve-1@temp
ZFSのマウントポイントを設定
zpoolname2='rpool2' &&
zpool export $zpoolname2 &&
zpool import -d /dev/disk/by-partuuid -R /mnt/$zpoolname2 $zpoolname2 &&
zfs set mountpoint=/ $zpoolname2/ROOT/pve-1 &&
zfs set mountpoint=/$zpoolname2 $zpoolname2
スワップをフォーマット
zpoolname2='rpool2' &&
mkswap /dev/zvol/$zpoolname2/swap
スワップのプール名を修正
vi /mnt/$zpoolname2/etc/fstab
下記の行を$zpoolname1から$zpoolname2に修正する
/dev/zvol/$zpoolname2/swap none swap sw 0 0
$esp/loader/entries/pve2.confを作成
title Proxmox Virtual Environment 2
linux /vmlinuz-4.4.6-1-pve
initrd /initrd.img-4.4.6-1-pve
options root=ZFS=$zpoolname2/ROOT/pve-1 rw boot=zfs quiet rootdelay=2
再起動後、ブート時にProxmox Virtual Environment 2を選べばバックアップした方からブートするはずです。
後始末
この後、gummibootをアンインストールして、/etc/initramfs/post-update.d//zz-update-gummibootを手動で削除しないとカーネルのアップデートに支障を来すかもしれません。