web-dev-qa-db-ja.com

ハードリンクをバックアップの重複排除の目的で使用できますか?

フルバックアップ、増分バックアップ、およびデクリメンタルバックアップについて知っています。しかし、なぜ誰も(Windows Backup、TrueImage、Paragon)が次のバックアップアルゴリズムを実装していないように見えるのか疑問に思いました。

リンクをサポートするバックアップメディアが必要です。 NTFS。代替データストリーム(ADS)などのすべての機能をサポートするために、バックアップメディアは同じ形式であることが理想的です。

  1. 最初のバックアップは完全バックアップです。これにより、すべてのファイルがバックアップメディアの\のサブフォルダーにコピーされます。このフォルダを[〜#〜] l [〜#〜](「最後」の場合)と呼びましょう。特別なファイル形式はありません。ファイルをコピーするだけです。
  2. 次のバックアップでは、\の新しいサブフォルダーが作成されます。これを[〜#〜] c [〜#〜](「現在」の場合)と呼びましょう。フルバックアップから変更されたファイルは、ソースディスクから再度コピーされます。変更されていないファイルは[〜#〜] l [〜#〜]から[〜#〜] c [〜#〜]に移動されますそして[〜#〜] l [〜#〜]から[〜#〜] cを指すハードリンクが作成されます[〜#〜]
  3. 繰り返しバックアップする場合、同じ手順が[〜#〜] c [〜#〜]と別の新しいフォルダに適用されます。

このアルゴリズムで機能しないものがありますか?

私はまだ問題に気づいていましたが、次の利点があります。

  • 最後のバックアップ([〜#〜] c [〜#〜])は常に完全バックアップです。バックアップを復元するには、この1つのバックアップのみが必要です。ユーザーは、回復の可能性を損なうことなく、古いバックアップを削除できます(これは、完全バックアップ、増分バックアップ、および増分バックアップには当てはまりません)。
  • 古いバックアップはリンクがあるため完全バックアップのように機能しますが、ディスク上のスペースははるかに少なくなります。
  • ユーザーがファイルを削除しなかった場合、ファイル変更の完全な履歴があります。ただし、SVNとは異なり、古いリビジョンを削除することは可能です。
  • ファイルの移動とリンクの作成は非常に高速な操作です。バックアップの作成は、それに応じて実行する必要があります。
  • 完全なバックアップを削除するのではなく、古いバックアップ(大きなファイルのみなど)で変更されたファイルを選択的に削除することができます
5
Thomas Weller

あなたが説明するものは、rsyncとその--link-dest=オプションを使用して、 dirvish などの数十のラッパープログラムを介してすでに使用されています。

2
Dan D.

実行可能な計画のようです。これにより、バックアップの表示と使用にかかる時間が短縮されます。バックアップが頻繁に使用され、完全なスナップショットを確認する必要がある場合、これは非常に便利です。

「LからCに移動」という表現を、単に「LからCにハードリンク」と言うように変更します。

1つの考慮事項-(最後の箇条書きを参照して)多数のリンクを含むファイルを削除することは、それらのリンクをすべて見つけて削除することを意味します。したがって、その方法でスペースを選択的に回復することはより困難ですが、findコマンドを使用するのは簡単です。

3
ash

それは基本的にあなたがデロリアンコピーと呼んでいるものだと思います。たとえば、この動作を実装するWindows用のLink ShellExtensionがあります。彼らは彼らのドキュメンテーションでかなり良い説明をしています:

http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html#deloreancopy

3
bweber

HardLinkShellExtension 「Delorean-Copy」( 他の回答 を参照)を備えたソリューションは、「すぐに使用できる」ソリューションだけではありません。選択肢があります:

  • コンソールツール ln.exe 同じ機能を持つ同じプログラマーから。著者は、事前に作成された タイムスタンプ付きのDeLoreanのバッチファイル コピーも提供しています。
  • gUIバックアップソリューション HardLinkBackup これはあなたが望むことをほぼ正確に実行します。
  • 1.のln.exeを使用して古いバックアップのハードリンクコピーを新しいバックアップフォルダに作成し、xcopyまたはrobocopyを使用して新しいファイルのみをコピーして古いファイルを削除します(i robocopyの場合は--mirrorだと思います)。変更されたファイルが削除されてからコピーされ、変更されただけではないことを確認するためにテストします(後者は、ハードリンクのために古いバックアップでもファイルを変更します)。
  • xcopyまたはrobocopyを使用して通常のバックアップを作成してから、 dfhl.exe /l /r /w /s /h "X:\Backups-parent-folder\." を実行してすべての同一ファイルをハードリンクします。
  • 3.と同じですが、dfhlの代わりに finddupe -hardlink X:\Backups-parent-folder\** です。


免責事項:finddupeを除いて、上記のすべてのプログラムを使用しましたが、必ずしも同じ方法であるとは限りません。そして、私はどのプログラムにも金銭的なつながりや投資、その他のつながりはありません。

2
Limer

あなたが説明しているのは本質的に増分バックアップスキームです。

Dan D.が指摘 のように、実際にはさまざまなツールで使用されています。特に、ハードリンクが多くのプログラムによってネイティブに処理されるUnixライクなプラットフォームで使用されています。

ただし、多くのWindowsプログラムはハードリンクをうまく処理しません。 FATの時代には、ファイルシステム内の2つの名前が同じデータブロックを指すことは許可されていなかったため、ハードリンクは実際にはエラーと見なされていました。

1つのバックアップは以前のすべてのバックアップに基づいて構築されるため、説明するのは増分バックアップスキームです。唯一の本当の違いは、それらの以前のバックアップが参照される方法と、問題のファイルの参照カウントがゼロに達したときにのみデータが実際に削除されるため、以前のバックアップを削除する方が簡単であるという事実です。バックアップから参照される時間が長くなります。もちろん、その欠点は、特定の以前のバックアップを削除することによって解放されるスペースの量を正確に予測することが難しいことです。極端な場合、ファイルシステムのメタデータによって使用され、再利用されるスペースを除いて、実際にはゼロになる可能性があります。 (そのバックアップと隣接するバックアップの間で変更はありません。)

「通常の」増分バックアップの場合、手動で復元を行う必要があります。あなたが説明しているものの場合、参照は暗黙的です。ただし、最新のバックアップ中に実際にコピーされなかった(参照カウントが正確に1である)すべてを削除した場合でも、複数の増分バックアップを作成した場合と同じように、バックアップは不完全になります。次に、最新のものだけを復元しようとしました。

1
a CVn