ZFSのデータプールの引越し
システムプールの移行は結構面倒でした。
FreeBSDのRoot on ZFSシステムの別ディスクへの移行
AFTなのにブロックサイズが512B
データプールも移行します。なぜなら、AFTディスク(4096 navite)を使っているのに、元から使っていた512BのHDDに引きづられて、残念な状態になっています。
# zpool status upool pool: upool state: ONLINE status: One or more devices are configured to use a non-native block size. Expect reduced performance. action: Replace affected devices with devices that support the configured block size, or migrate data to a properly configured pool. scan: resilvered 959G in 8h55m with 0 errors on Fri Apr 28 14:30:46 2017 config: NAME STATE READ WRITE CKSUM upool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 gpt/disk4 ONLINE 0 0 0 block size: 512B configured, 4096B native gpt/disk6 ONLINE 0 0 0 block size: 512B configured, 4096B native mirror-1 ONLINE 0 0 0 gpt/disk3 ONLINE 0 0 0 gpt/disk5 ONLINE 0 0 0 block size: 512B configured, 4096B native logs gpt/zil ONLINE 0 0 0 errors: No known data errors
検索すると、この問題を解決するには、プールを作り直すしかないみたいです。そのため、データプールをバックアップして、新しく作り直した仮のプール(vpool)にリストアしました。
仮のデータプールの作成
USB接続の外付け3TBのHDDを仮のデータプールとします。デバイスは、/dev/da1です。
まずは、GPTで初期化します。
# gpart destroy -F da1 # gpart create -s gpt da1 # gpart add -a 4k -t freebsd-zfs -l vdata da1
他のデータが入っていたので、初期化する時にFオプションを使っています。気をつけなければならないのが、ZPOOLとして使っていたディスクを再利用する時です。この場合は、そのプールをzpool destroyしてから使ってください。そうしないと、zpoolではimportもdestroyもできないゾンビなプールになってしまいます。この場合、ddで全領域に0を書き込まないとゾンビプールの退治ができないそうです。
次に、仮のデータプールを作ります。
# zpool create -m none vpool gpt/vdata
別ディスクにバックアップ
まずは、データプールのバックアップです。スナップショットを作り、zfs send/recvで、簡単にバックアップできます。さすがZFSです。2.66TBのデータを約9時間半でバックアップ出来ました。転送レートは88MB/sだったことになります。
# zfs snapshot -r upool@20170513 # zfs send -Rp upool@20170513 | zfs recv -nuvdF vpool # zfs send -Rp upool@20170513 | zfs recv -uvdF vpool
zfs sendのRオプションは階層を示します。pオプションはプロパティも転送することを示します。
recvのuオプションはマウントしないことを示します。通常はuオプションをつけて、マウントしないようにするのが安全です。Fオプションは階層に対応するためで、dオプションは階層ディレクトリを作ります。vオプションはverboseオプションです。表示されるメッセージが増えます。
最初、nオプションをつけて、"dry run"(コピーせずに、振る舞いだけ見る)でどのように展開されるかを確認します。
vpoolに使ったHDDは、外付けのUSB3.0接続のケースに入れています。
玄人志向のGW3.5AA-SUP3はUASPに対応している模様[amazonjs asin="B0053VPYHK" locale="JP"]
データプール再作成
次に、データプールを作り直しました。既存のupoolを一旦破棄してからの、再設定になります。upoolを破棄する前に、事故防止の為、vpoolが入っている外付けのHDDを論理的・物理的に外しました。
まずは、vpoolを論理的に取り外します。
# zpool export vpool
この後、USBケーブルを抜き、物理的に取り外します。その後、バックアップ済みの既存プール(upool)を破棄します。ここでしっかり破棄しておかないと、実態がないのにプール情報だけが残った、ゾンビのプールになってしまいます。このゾンビプールを破棄するためには、HDDの全領域にddで0を書き込む必要があるみたいです。
# zppol destory upool
次に、upoolに使っていた全ディスクを初期化します。ディスクは、/dev/ada1, /dev/ada2, /dev/ada3, /dev/ada4につながっているものとします。gptのラベルは、disk4, disk5, disk6, disk7と設定しました。
# gpart destroy -F ada1 # gpart create -s gpt ada1 # gpart add -a 4k -t freebsd-zfs -l disk4 ada1 # gpart destroy -F ada2 # gpart create -s gpt ada2 # gpart add -a 4k -t freebsd-zfs -l disk5 ada2 # gpart destroy -F ada3 # gpart create -s gpt ada3 # gpart add -a 4k -t freebsd-zfs -l disk6 ada3 # gpart destroy -F ada4 # gpart create -s gpt ada4 # gpart add -a 4k -t freebsd-zfs -l disk7 ada4
データプールを作り直します。
# zpool create upool mirror gpt/disk4 gpt/disk5 mirror gpt/disk6 gpt/disk7 # zpool status upool pool: upool state: ONLINE status: Some supported features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(7) for details. scan: none requested config: NAME STATE READ WRITE CKSUM upool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 gpt/disk4 ONLINE 0 0 0 gpt/disk5 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 gpt/disk6 ONLINE 0 0 0 gpt/disk7 ONLINE 0 0 0 errors: No known data errors
綺麗なデータプールになりました。
[amazonjs asin="B00WWCDFO2" locale="JP"]データリストア
この後、外付けHDDを接続してリストアしました。同じく、zfs send/recvを使います。オプションは先ほど説明した物と同じです。
# zpool import -R /mnt vpool # zfs send -Rp vpool@20170513 | zfs recv -nuvdF upool # zfs send -Rp vpool@20170513 | zfs recv -uvdF upool
2.66TBのデータを転送するのに約6時間半かかりました。転送速度は125MB/sです。
リストアが修了したら、再びバックアップしたプール(vpool)を、論理的・物理的に取り外します。
# zpool export vpool
論理的に外した後、USBケーブルを抜いて、物理的に取り外します。
きちんとできているかどうか、再起動してご確認ください。
ディスカッション
コメント一覧
まだ、コメントがありません