バックアップからパーティションの内容を復元するときにバックアップと現在のパーティションの内容が異なるブロックのみを上書きするにはどうすればよいですか? [コピー]

バックアップからパーティションの内容を復元するときにバックアップと現在のパーティションの内容が異なるブロックのみを上書きするにはどうすればよいですか? [コピー]

dd of=/dev/where/to/restore通常、バックアップからパーティションの内容を復元するためにwithを使用します。入力ストリームどこか(Ssh接続など)。

ただし、書き込み耐久性が厳しく制限されていることが知られているSSDドライブを復元する場合、これはドライブ全体を上書きすることを意味します(通常、パーティションはドライブサイズ全体にわたって配置されます)。希少パーティション(たとえば、ゼロが大量に含まれている)を回復している間、ドライブのスマート属性(または同等の属性)を調べたところ、total_LBA_written完全にゼロになったブロックも属性に含まれることがわかりました。フラッシュ書き込みサイクルを消費します。

そのため、バックアップストリームのソースとターゲットドライブが異なるブロックのみを上書きする方法を探しています。一般的なユースケースは次のとおりです。

  1. バックアップを作成してから短時間ドライブを少し変更してから復元します。少数の他のブロックだけが上書きされます。

  2. ドライブを作成し、blkdiscardそのドライブにスパースバックアップを復元します。ゼロ以外の少数のブロックだけが上書きされます。

私のパーティションにFSがあるか(またはFSがないか)心配したくありません。

目標を達成するために使用できるツールと方法は何ですか?

UPD:コメントの提案に基づいて、次のことを試すことができます。

  1. rsyncブロックデバイス以上
  2. bscp機能がほぼ同じユーティリティrsync
  3. blkdiscard'edドライブ(つまり、すべて0を含む)の場合はdd conv=sparseこれを使用できます。

これらはすべて良いツールなので試してみますが、私の完全な目標を達成することはできません。小川rsyncおよびbscp)は、以前にゼロに設定されているターゲットドライブ()の代わりに使用されますdd conv=sparse

ベストアンサー1

これは意味がありません。とにかく、フラッシュ抽象化レイヤーはデータを上書きする前に読み取る必要があるため(ユーザーが作成するブロックは通常エラー訂正コードブロックとは異なるため)、最初から同じデータを上書きしません。また、フラッシュは思考と完全に異なる場合があります。表示されるLBAブロックは、実際にウェアレベリングアルゴリズム(内部ブロックサイズで動作し、かなり複雑なエラーの場合はマージする必要があります)リポジトリに意味がありません。修正データが必要です)と実際の物理メディアが必要です。

したがって、率直に言って、数えるよりも週に多くの完全バックアップの復元を実行し始めると、書き込みサイクルが心配されます。あなたはそうは思わないようです。

FS(またはFS不足)について心配したくありません。

スナップショットが埋め込まれた書き込み中にコピー(Copy-On-Write)ファイルシステムが問題を完全に解決します。 (やはり、Flashの内部動作についてもっと知っていますが、すべてではありません。したがって、ここで考えた賢い計画がデータを上書きしないため、CoW /スナップショットよりも良いかどうか疑問です。)

Linuxでは、デフォルトでこれらのファイルシステムが提供されています。

私のパーティションにあります。

さて、パーティションの代わりにスナップショットを持つLVMシンボリュームを使用すると、「変更された部分のみを上書きする」という意味は失われます。これは、バックアップを復元するときに変更された部分を上書きせずにコピーからコピー - 修正 - 書き込みを忘れてしまうからです。変化。生データ。外部バックアップストレージをこのシナリオと組み合わせることもできますが、そうすると過剰になります。

おすすめ記事