
Linuxには重複排除を見つけるための多くのツールがあります。このWikiページ。
ほとんどすべてのスクリプトは、単に検出、重複ファイル名の印刷、または単一のコピーにハードリンクして重複ファイルの削除を実行します。
btrfsが登場し、別のオプションが登場しました。つまり、ファイルのCoW(記録中にコピー)コピーを作成します(例:btrfs cp reflink=always
)。これを行うためのツールが見つかりませんでした。これを行うためのツールを知っている人はいますか?
答え1
私は書いたベッドライニングこの目的のために。増分btree検索とCoW重複排除を組み合わせます。以下を実行できるLinux 3.6で使用するのが最善です。
sudo bedup dedup
答え2
ベッドで寝ようとしました。素晴らしいですが(多くの人にとって最良の選択になることができるいくつかの便利な差別化機能があります)、すべてのターゲットファイル全体でチェックサムを検索しているようです。
遅すぎます。
一方、rdfindやrmlintのような他のプログラムは異なる検索をします。
rdfindにはbtrfs reflinkを使用する「実験的」機能があります。 (そしてハードリンク、シンボリックリンクなどのための「信頼できる」オプション)
rmlintは、btrfsレプリケーション、参照リンク、汎用ハードリンク、シンボリックリンク、削除、およびカスタムコマンドの「強力な」オプションを提供します。
しかし、もっと重要なのはrdfindとrmlintですかなり急いで。たとえば、スケールの順序です。すべてのターゲットファイルのチェックサムを調べる代わりに、次の操作を行います。
- パスとファイルサイズのみを収集して、ターゲットファイルシステム全体を調べます。
- 固有のファイルサイズを持つファイルを考慮対象から削除します。これだけで、多くの時間とディスク活動を節約できます。 (「Scads」は一種の逆指数関数のようなものです。)
- 残りの候補の最初のNバイトをスキャンします。ファイルサイズは同じですが、最初のNバイトが異なるファイルは考慮対象から削除されます。
- 最後のNバイトについても同じことを行います。
- もうありません(通常非常に小さい噴水)残り、チェックサムチェック。
私はrmlintの他の利点を知っています。
- チェックサムを指定できます。 md5はとても怖いですか? sha256を試してみてください。または512。または少しずつ比較してみてください。または、独自のハッシュ関数を使用してください。
- リンクを参照する代わりに、Btrfsを「複製」して「参照」するオプションを提供します。 "cp --reflink=always" は原子的ではなく、カーネル内のファイルに何が起こっているのかわからず、常にメタデータを保存しないため、少し危険です。 「Clone」、OTOH(略称です...公式API関連名は省略します)は、アトミックでメタデータを保存するカーネルレベルの呼び出しです。ほぼ常に同じ結果を生成しますが、より強力で安全です。 (ほとんどのプログラムは、最初に他のファイルの一時再リンクを正常に設定できない場合は、重複ファイルを削除しないほどスマートです。)
- さまざまなユースケースに多くのオプションがあります(欠点でもあります)。
私はrmlintをdeduperemoveと比較しました。後者はまた、すべてのターゲットファイルのチェックサムを盲目的にチェックします。 Duperemovが取った。数日私は終わらなければならない本があり(私の考えには4つ)、今後全力を尽くします。ファームリントが持っていった数時間重複エントリを識別し、1日以内にBtrfsクローンを使用して重複を削除します。
(しかし、高品質で強力なソフトウェアを書いてサポートし、無料で提供するために一生懸命働く人は誰でも大いに賞賛されなければなりません!)
ところで:いずれにせよ、重複排除のための一般的なハードリンクを「ユニバーサル」重複排除ソリューションとして使用することは避けてください。
ハードリンクは、特定のターゲットユースケース(個々のファイル、特定の最小サイズ以上の特定のファイル形式をスキャンできるツールの使用、または多くの無料および商用のバックアップ/スナップショットソリューションの一部)で非常に便利ですが、次の利点があります。 。重い大規模な汎用ファイルシステムの「データ重複排除」用です。その理由は、おそらくほとんどのユーザーが数千ファイルシステムのファイルは同じバイナリを持ちますが、機能はまったく異なります。
たとえば、多くのプログラムは最初は同じテンプレートおよび/または隠し設定ファイル(時には表示されるすべてのフォルダにあります)を作成し、ほとんどはユーザー(ユーザー)が不要になるまで同じままです。
具体的な注意:写真のサムネイルキャッシュファイルは、写真を含むフォルダ内の多数のプログラムによって生成され(移動性のため)、作成に数時間または数日かかることがありますが、写真アプリの使用は非常に簡単です。これらの初期キャッシュファイルがすべて一緒にハードリンクされている場合は、後でディレクトリでアプリケーションを開くと大きなキャッシュが生成されます...と推測してみてください。以前にハードリンクされたキャッシュがあったすべてのフォルダに、無効なキャッシュがあります。これは、予期しないデータ破損につながる災害の結果につながる可能性があります。また、ハードリンクをサポートしていないバックアップソリューションが何らかの理由で中断される可能性があります。
また、スナップショット全体を台無しにすることもできます。スナップショットのポイントは、「ライブ」バージョンが変更され続け、以前の状態にロールバックできることです。すべてが互いにハードリンクされている場合...同じアイテムに「ロールバック」されます。
しかし、良いニュースは、Btrfsを使用して重複排除のためのリンクを複製/参照すると、これらの損傷を排除できることです。 (私の考えでは、スキャン中にハードリンクファイルを同じように処理する必要があるため、他にない限りロジックを考慮してください。)ハードリンクの数は、重複排除を実行する特定のユーティリティによって異なります。
答え3
11年後:お勧めしますfclones
。これはdedupe
サブコマンドで正確に行われます。
これは優れたツールであり、高速で(Rustで書かれている)、すべてのバックアップを重複排除し、合理化するための優れたツールとして、私にとって非常に便利でした。