シナリオ:2台の外付けハードドライブがあり、一方をもう一方のバックアップにしたい。従来、私は定期的に2番目のドライブを接続し、変更を加えてrsyncを実行していました。 ZFSはこれを行うためのより良い方法を提供しますか?
「zfsmirror」セットアップを作成したいと思いますが、便宜上、バックアップドライブを常に持ち運びたくはなく、変更を定期的に同期します。 ZFSはこれを行う方法を提供しますか、それともこれは適切な使用法ではありませんか?もしそうなら、これを行うための標準的なZFSの方法は何ですか? (たとえば、バックアップドライブを更新するたびに、すべてのセクターの変更をチェックする必要があるため、ドライブをbashしたくありません)
ZFSには、ミラーリングされたドライブがしばらくオフラインになった後、それを段階的に更新する機能が制限されています。 TL; DR:あなたcanあなたが提案している方法であなたが探していることをしますが、それはミラーがすることを意図していることではありません。
実際には、あなたが提案していることは、ほぼ確実に毎回完全な再銀を必要とします。なぜなら、暫定的な変更は、過ぎ去ったユーバーブロックの改訂が多すぎることにつながるため、増分再銀の共通のベースポイントがないからです。そのプロセス中に障害が発生した場合、データに関する限り、深刻な問題が発生する可能性があります。また、Merkleツリーのオンディスクデータ形式により、ZFSリシルバーは、ファイルシステムベースではないRAIDシステムのように順番に実行するのではなく、「データの重要度が低い順に」実行できることを覚えておいてください。もちろん、ここでの「データの重要性」は、ZFSに関する限りであり、重要または維持する価値があると考える可能性があるものではありません。結果として生じるシークアクティビティは、特に単一のドライブに大きなストレスを簡単にかける可能性があります。
2つのZFSファイルシステムを同期させるための標準的な方法は、それらの間でzfs send | zfs receive
を使用することです。これには、両方のファイルシステムが使用可能である必要があります(ただし、can zfs sendの出力を保存し、後でzfs receiveへの入力として使用する必要がありますが、これが発生することに注意する必要があります。 with 大きな警告 :zfs receive
はno部分的に損傷したデータのストリームからの回復を試み、エラーが検出された場合は中止します)。
zpool import
両方tankとpipe。 -N
をzpoolimportに渡して、ファイルシステムをマウントしないようにすることができます。zfs snapshot tank@current1984 -r
zfs list tank pipe -t snapshot
のようなものを使用して、作業する生のリストを取得します。それらに共通する最新のスナップショットがcurrent1948
であるとしましょう。zfs send -R -I tank@current1948 tank@current1984 | zfs receive pipe
のようなものを実行して、current1948
スナップショットとcurrent1984
スナップショットの間のデルタをtankからpipeに段階的に転送します。 sendおよびreceiveサブコマンドの詳細については、zfs
のマニュアルページを参照してください。current1984
)を少なくとも1つ保持してください。この時点で、使用したスナップショットまで、2つのプールのコンテンツは同じになります。適切に行われた場合、これも違いを転送するだけで済みます。インクリメンタルzfs send | zfs receive
がフルミラーリバーのようなことをする必要があるシナリオを想像することはできません。また、必要に応じて、後でバックアッププールに冗長性を追加することもできます。コピープロセス中にソースドライブに障害が発生した場合でも、古いバックアップをすぐに利用できるようにしておく必要があります。転送しようとしていた違いだけが失われます。