web-dev-qa-db-ja.com

1つのドライブを備えたZFSミラーはほとんどオフラインで機能しますか?

シナリオ:2台の外付けハードドライブがあり、一方をもう一方のバックアップにしたい。従来、私は定期的に2番目のドライブを接続し、変更を加えてrsyncを実行していました。 ZFSはこれを行うためのより良い方法を提供しますか?

「zfsmirror」セットアップを作成したいと思いますが、便宜上、バックアップドライブを常に持ち運びたくはなく、変更を定期的に同期します。 ZFSはこれを行う方法を提供しますか、それともこれは適切な使用法ではありませんか?もしそうなら、これを行うための標準的なZFSの方法は何ですか? (たとえば、バックアップドライブを更新するたびに、すべてのセクターの変更をチェックする必要があるため、ドライブをbashしたくありません)

6
Matthew

ZFSには、ミラーリングされたドライブがしばらくオフラインになった後、それを段階的に更新する機能が制限されています。 TL; DR:あなたcanあなたが提案している方法であなたが探していることをしますが、それはミラーがすることを意図していることではありません。

実際には、あなたが提案していることは、ほぼ確実に毎回完全な再銀を必要とします。なぜなら、暫定的な変更は、過ぎ去ったユーバーブロックの改訂が多すぎることにつながるため、増分再銀の共通のベースポイントがないからです。そのプロセス中に障害が発生した場合、データに関する限り、深刻な問題が発生する可能性があります。また、Merkleツリーのオンディスクデータ形式により、ZFSリシルバーは、ファイルシステムベースではないRAIDシステムのように順番に実行するのではなく、「データの重要度が低い順に」実行できることを覚えておいてください。もちろん、ここでの「データの重要性」は、ZFSに関する限りであり、重要または維持する価値があると考える可能性があるものではありません。結果として生じるシークアクティビティは、特に単一のドライブに大きなストレスを簡単にかける可能性があります。

2つのZFSファイルシステムを同期させるための標準的な方法は、それらの間でzfs send | zfs receiveを使用することです。これには、両方のファイルシステムが使用可能である必要があります(ただし、can zfs sendの出力を保存し、後でzfs receiveへの入力として使用する必要がありますが、これが発生することに注意する必要があります。 with 大きな警告zfs receiveno部分的に損傷したデータのストリームからの回復を試み、エラーが検出された場合は中止します)。

  • バックアップドライブごとに1つのプールを用意します。それらをtankおよびpipeと呼びましょう。 tankにコピーしたいデータがあるとしましょうpipe
  • 両方のドライブを接続し、zpool import両方tankpipe-Nをzpoolimportに渡して、ファイルシステムをマウントしないようにすることができます。
  • ソースファイルシステムのスナップショットを作成しますtankzfs snapshot tank@current1984 -r
  • tankpipeの両方に共通する最新のスナップショットを見つけます。 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がフルミラーリバーのようなことをする必要があるシナリオを想像することはできません。また、必要に応じて、後でバックアッププールに冗長性を追加することもできます。コピープロセス中にソースドライブに障害が発生した場合でも、古いバックアップをすぐに利用できるようにしておく必要があります。転送しようとしていた違いだけが失われます。

8
a CVn