#事前にProxmox VEをインストールし、一つのパーティションだけ書き戻す方法(成功)
# NAS4Free
zpool import -f -d /dev/gptid -R /mnt/rpool rpool
zfs destroy -f rpool/ROOT/pve-1
zfs snapshot <tank>/pve-1@temp
zfs send <tank>/pve-1@temp | zfs recv rpool/ROOT/pve-1
zfs destroy <tank>/pve-1@temp
zfs destroy rpool/ROOT/pve-1@temp
zfs set mountpoint=/ rpool/ROOT/pve-1
zpool export rpool
# Proxmox VE(ext4 root)
# インポートできるプールを確認
zpool import
# rpoolをインポート・アンマウント
zpool import -f -R /mnt/rpool rpool && zfs unmount rpool
# ACLを有効にする
zfs set acltype=posixacl rpool/ROOT && zfs set xattr=sa rpool/ROOT
# rpool/ROOT/pve-1を削除
zfs destroy rpool/ROOT/pve-1
# バックアップからrpool/ROOT/pve-1を復旧
zfs send tank20160418/pve-1@rpool_to_tank20160418 | zfs recv rpool/ROOT/pve-1
# マウントポイントを設定
zfs set mountpoint=/ rpool/ROOT/pve-1
# rpoolをエクスポート
zpool export rpool
#一からパーティションを作る方法(失敗)
もともと、下記のようなコードでProxmox VEのZFS Rootの複製ができるかと思ったのですが、zpoolのguidが変わるとブートできなくなるようでした。
ZFS Rootでブート中にやろうとするとrpoolが重複するため、MBR、BIOS boot partitionおよびrpool/ROOT/pve-1を一度HDDにコピーし、NAS4Freeでブートするという前提です。
#NAS4Free
#調査
geom disk list
gpart list
gpart show da1
#パーティション消去・作成
gpart destroy da1
gpart create -s gpt da1
gpart add -t bios-boot -b 34 -s 2014 da1
gpart add -t '\!<partuuid>' -b 2048 -l 'zfs' da1
gpart set -a bootme -i 1 da1
#zpool作成
gnop create -S 4096 da1p2
zpool create rpool da1p2.nop
zfs set compression=lz4 rpool
zfs set atime=off rpool
zfs set sync=standard rpool
#zfs作成
zfs create rpool/ROOT
zfs create -V 2G -b 4K -o primarycache=metadata -o sync=always -o com.sun:auto-snapshot=false rpool/swap
#zpoolエクスポート・インポート
zpool export rpool
gnop destroy da1p2.nop
zpool import -d /dev/gptid -R /mnt/rpool rpool
#本体zfsコピー
zfs snapshot <tank>/<fs>@temp
zfs send <tank>/<fs>@temp | zfs recv rpool/ROOT/pve-1
zfs destroy <tank>/<fs>@temp
zfs destroy rpool/ROOT/pve-1@temp
#確認
zpool list
zfs list
#zpool・zfs設定
zpool set bootfs=rpool/ROOT/pve-1 rpool
zfs set mountpoint=/ rpool/ROOT/pve-1
zfs set mountpoint=/rpool rpool
#zpoolエクスポート
zpool export rpool
#mbr・bios_bootコピー
dd if=/mbr1 of=/dev/da1 bs=512 count=1
dd if=/bios_boot1 of=/dev/da1p1