web-dev-qa-db-ja.com

ZFSにフォーマットされた外付けHDD、(オフライン)バックアップとしての別の外付けHDD。サイレント破損からデータを保護するにはどうすればよいですか?

私は、macOS/Ubuntu16.04デュアルブートを備えたベースモデルのMacBookAir(128 GB SSD)を使用しているアマチュア写真家です。 SSDは小さすぎて写真ライブラリを保存できないため、以前はバックアップドライブとして使用していた500 GBの2.5インチ外付けHDDに保存していました。明らかに、写真のバックアップはもうありません。このうち、2 TB 3,5 "ドックで使用する内蔵HDDを購入しました。後者は現在、私の「メイン」外付けHDDになり、2,5"がバックアップになっています。もう一度運転してください。

写真をサイレントデータ破損(ビット腐敗)から保護したいので、昨日2 TBドライブをZFSにフォーマットしました)。3.5インチHDDは以前にHFS +にフォーマットされていて、使用しました。 macOSのDarktableで写真を管理/編集/その他:)写真ライブラリでUbuntu16.04(新しい公式ZFSサポートを含む)でDarktableを使用します。ZFSが破損したデータを自動的に検出し、計算して修復しようとしていることを読みましたデータのチェックサム。その後、自己修復ビットはミラーリングされたプールでのみ可能であることに気づきました。しかし、ZFSは特定の写真が破損していることを通知することもでき、手動で2からのコピーに置き換えることができました。バックアップが破損したバージョンで汚染される前の5 "バックアップドライブ。

残念ながら、自動チェックサム計算/比較中に破損したファイルを検出した場合、ZFSがユーザーに通知するようには見えないことを読みました。だから私の考えは不可能です。もちろん、2,5 "ドライブでプールをミラーリングすることもできますが、次の理由から、プールを常に接続したくありません。

  1. 私のMacBookAirには2つのポートしかなく、両方とも使用されます。つまり、外部キーボードを使用できなくなります(安価なUSBハブが少し前に故障したため、交換する気がしません;))

  2. バックアップドライブを不必要に使い果たしたくない

では、すでに所有しているギアでデータをビット腐敗から保護するための最良の解決策は何でしょうか?確かに私の状況はそうではありませんそれユニーク;)

4
Superpelican

同様のワークフローがあります。外部ディスクを定期的にスクラブする必要があります。

zpool scrub poolname

プールのサイズにもよりますが、これには数時間かかります。ステータスを確認できます。

zpool status poolname

プールに冗長性がない場合、スクラブプロセスはビットエラーを修正できませんが、影響を受けるファイルを通知し、適切なボリュームから影響を受けるボリュームに手動でコピーできます。

または、ディスク容量を犠牲にして、copiesを使用して、ZFSファイルシステムレベルで単一ディスクプールの冗長性を与えることができます。複数のコピーを作成するようにZFSに指示するプロパティ:

zfs set copies=2 poolname/filesystem

このプロパティの設定は、書き込まれる新しいデータにのみ影響するため、プールとファイルシステムの作成中または作成直後に設定する必要があります。

3

その後、バックアップが破損したバージョンで汚染される前に、手動で2,5インチのバックアップドライブからのコピーに置き換えることができました。残念ながら、自動チェックサム中に破損したファイルを検出したときにZFSがユーザーに通知しないようです。計算/比較なので、私の考えは不可能です。

実際、ZFSは(ある意味で)通常の操作で発生したエラーをユーザーに通知します。これは、データを読み取れない場合、または他の場所に保存されているチェックサムに対して検証されない場合に、I/Oエラーをスローすることによって行われます。これがユーザーソフトウェアにどのように伝播するかは、そのソフトウェアがI/Oエラーにどのように応答するかに完全に依存します。最悪の場合、単にクラッシュする可能性があります。より良いケースでは、ファイルが読み取れないことを何らかの形で報告します。

私がすでに所有しているギアでビット腐敗からデータを保護するための最良の解決策は何でしょうか?

単一のドライブでビット腐敗に対する少なくとも部分的な実際の保護が必要な場合は、プールにcopies=2を設定する必要があります。これにより、ストレージ容量が実質的に半分になるため、データをプールに保存する前に実行する必要があることに注意してください。 (ファイルを別のディレクトリにコピーしてから、2番目のコピーを削除する前にコピーして戻すなど、ファイルを書き換えることで、このような設定を有効にすることもできます。)checksumなどのプロパティを設定することをお勧めします。 、可能であれば、プールの作成中にcopiescompressionなど。

単一のコピーのみで冗長ストレージがない場合、ZFSはほとんどのストレージレベルのエラーを検出できますが、修復することはできません。(メタデータは常に追加のコピーとともに保存されます。したがって、冗長性がなく、copys = 1の単一のvdevプールがある場合、重要なメタデータの実際のコピーが2つ取得されます。)これを行うには、Sudo zpool scrub poolnameを実行してプールをスクラブします。実行中のスクラブをキャンセルする必要がある場合は、Sudo zpool scrub poolname -sを実行します(-sは「停止」を表します)。スクラブが終了したら、zpool status poolname -vを実行すると、ストレージレベルのエラーの影響を受けるすべてのファイルのリストを取得できます。これにより、no known data errorsが出力されます。次に、それらのファイルを破棄するか、バックアップから復元するかを決定できます。チェックサムを無効にするchecksum=offを指定してZFSを実行できることに注意してください。 (zfs(8)のマニュアルページでは、チェックサムを無効にすることは[〜#〜]ではなく[〜#〜]推奨される方法、オリジナルを強調します。)

定期的にスクラブを実行する必要があります。スクラブにかかる時間は、データの量と書き込みパターンに大きく依存します(ZFSのコピーにより、この点では、一度に書き込まれることのない大きなファイルを書き込む方が、定期的に更新される小さなファイルよりもはるかに優れています)。 -書き込み時のアーキテクチャは、最終的に断片化につながります。 数週間ごとにスクラブを実行することをお勧めします。数百ギガバイトのデータ(写真を保存するために使用したステートメントに基づく) 500 GBドライブ)、スクラブは数時間以上かかることはありません。

バックアップドライブを不必要に使い果たしたくない

一般的に、磁気回転HDDを殺すのは、スピンアップと物理的な力です。磁気回転ハードディスクは、SSDのフラッシュ摩耗のようなものに悩まされることはありません(一般的に 最近のSSDでは問題ではありません とにかく)。 HDDとSSDはどちらも使用できるように設計および構築されており、それらが正常である限り、かなりのことわざを打つことができます。 (HDDが限界に達したときに心配し始め、できるだけ早くデータをコピーしてください。)

1
a CVn