FreeBSD/システムディスクバックアップ
#FreeBSD
root on ZFS
rootはzpoolがデータ用(tank)と分離されているので、ここをバックアップ先とする
$ sudo zfs create tank/zroot-backup
snapshotを取ってデータ用プールにバックアップする
既存の不要なスナップショットは消しておくこと
$ sudo zfs snapshot -r zroot@backup-2026-06-13
$ sudo su
$ zfs send -Rv zroot@backup-2026-06-13 | zfs recv -Fduv tank/zroot-backup
send
-R replicate file system
つまり子のデータセットとかスナップショットも転送する
-v verbose
recv
-F もしrecv側がsend側より進んでいるとき、強制的に最新のスナップショットにロールバックする
incremental backupのために必要。recv側に変更がある場合、差分が変になるから
-d プール名を除外した相対パスとして受信する
-u マウントしない
-v verbose
復旧時はパーティションを切ってからブートコードを書き込む必要がありそう
ライブのFreeBSDを起動する
$ gpart show
ここで交換ディスクがada0だったとする
パーティションを切る
code:sh
gpart create -s gpt ada0
gpart add -t efi -s 260m ada0 # p1
gpart add -t freebsd-boot -s 512k ada0 # p2
gpart add -t freebsd-swap -s 2g ada0 # p3
gpart add -t freebsd-zfs ada0 # p4
ZFSプールを作成する
code:sh
zpool create \
-o altroot=/mnt \
-O mountpoint=none \
-O atime=off \
zroot /dev/ada0p4
データ用のプールを認識させる
$ zpool import -o readonly=on tank
データを転送する
$ zfs send -Rv tank/zroot-backup@最新スナップショット名 | zfs recv -Fduv zroot
ブートコードを書き込む
$ gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 2 ada0
bootfsにする
$ zpool set bootfs=zroot/ROOT/default zroot
code:sh
zpool export tank
zpool export zroot
reboot