NetBSD zfs での機種間zpool移動

ホストAで作成したzpool/zfsを、ホストBに持って行くのが どうもNetBSD9の ZFS では普通にできない。通常はホストAで zpool export して、ホストBのほうで zpool import すればよいと思うのだが、NetBSDのZFSでは export した瞬間に /etc/zfs/zpool.cache をきれいに消してしまうので 手係なくimportできなくなってしまうような気がする。

ホストAで、ホストB用のzpoolを作るために一時的に外付けHDDとして zpoo作成し、一通りファイルをコピーした後外してホストBに取り付ける、 という流れを想定すると、大まかにはこんな感じ。

前提として外付けHDDにFFS用のパーティションとZFS用の パーティションが共存していると仮定する。なぜなら、 NetBSD9でZFSだけのシステムは作れないので、2つのものがあるようにする。 ここでは、sd0aがFFSパーティションで、sd0eがZFSだとする。 sd0e に 「zp0」という名前で zpool を作るものとし、 先にFFSパーティションをnewfsしておいてマウント

newfs /dev/rsd0a
mount -o log /dev/sd0a /altroot
mkdir -p /altroot/etc/zfs

通常NetBSDのzpoolキャッシュは $ROOT/etc/zfs に書かれるので 先に mkdir しておく。続いてzpoolを作る。

zfs create -R /altroot zp0 sd0e

zfsのパーティションをいくつか作ってファイルをコピーしたりした後、 exportすると zpool.cache が消えちゃうのでバックアップを取ってから。

cp /altroot/etc/zfs/zpool.cache /altroot
zfs export zp0
cp /altroot/zpool.cache /altroot/etc/zfs

いろいろ umount してホストBに外付けディスクを持って行く。つける。 以下ホストBで。zpool import -c オプションで zpool.cache ファイルを指定する。

mount /dev/sd0a /mnt
zpool import -R /mnt -c /mnt/etc/zfs/zpool.cache -f zp0

これでくっつくはず。zpool.cacheを失ったらどうにもならん感じ? こわいな。