zpoolを入れるディスクイメージファイルをsparseで作るときのワナ

難しいね。

仮想マシン用のディスクイメージはsparseファイルで作るよね。 32GBイメージならこんな感じ。

dd if=/dev/zero of=vdisk.img seek=$((32*1024-1)) bs=1m count=1

ここにZFSを利用するOSを入れるとき、一度インストール完了して、 やり直そうとして、「ええい、もう一回最初からやり直しー」と思って、

dd if=/dev/zero of=vdisk.img seek=$((32*1024-1)) bs=1m count=1

で作り直そう、と思ってもこれ、だめ。

dd of= で指定したファイルがすでにある場合はそのファイルでseekしちゃうから ZEROデータにならず、前回作業したデータがそのまま残る。

なので、そこにインストールするOSがzpoolを利用するものだと 同じzpoolを使えない。zpool import で

One or more devices are missing from the system

と言われる。実際のHDDやSSDの場合は dd if=/dev/zero of=ディスク全体 bs=1m のようにして全消しするしかない。あるいは、poolを別の名前にする。

zpool import

すると2つ以上のpoolが見つかるので、importしたい方のIDを指定して 別名でimportする。

zpool import -f 878743281873824 newpool

zfsパーティションが自動マウントの場合はこれでOK。 legacyマウントの場合は /etc/fstab 内のpool名を書き換える。