元のファイルシステムとバックアップ ファイルシステムがある場合、ファイルが不足しているかどうかをどのように確認できますか?

元のファイルシステムとバックアップ ファイルシステムがある場合、ファイルが不足しているかどうかをどのように確認できますか?

私は見つけたStackoverflowのこの投稿内容が異なる対応するファイルのリストを取得したいだけの場合は、次のコマンドを実行できます。

diff  --brief --recursive dir1/ dir2/

...そしてこれを自分で試してみると、内容が異なるファイルの小さなリストが表示されます。

しかし、元のファイルシステムのバックアップ (たとえば 2TB の大きなファイルシステムを想定) を作成し、バックアップが元のものと同じかどうかを確認したい場合 (たとえば、バックアップが成功したかどうかを確認したい場合)、どちらの側でも使用できないファイルのみに関心がある場合は、何を実行すればよいでしょうか。ディレクトリ ツリーを高速にチェックする (コンテンツをチェックしない) ものが必要です。

ファイル サイズを比較しても、バックアップ ファイルが異なるかどうかは絶対的にわかりませんが、比較コマンドの実行中にファイル サイズとその他のファイル コンテンツ以外のメタデータを比較すると役立ちます。

(非常によく似た質問を再投稿して申し訳ありませんが、この質問はおそらくトピック外であると主張しているユーザーに気付きました。したがって、この質問は間違いなく stackoverflow にあるはずです。)

これについて何か経験はありますか?

答え1

変更時間とファイル サイズをチェックする非 rsync ソリューション:

diff <(find dir1 -mindepth 1 -printf '%P %t %s\n' | sort) <(find dir2 -mindepth 1 -printf '%P %t %s\n' | sort) | grep -E '^[<>]'

出力例:

> bar Sat Sep 14 11:52:33.0544384394 2013 91
< foo Fri Sep 13 17:58:21.0213671425 2013 445
> foo Sun Sep  8 23:01:02.0355432619 2013 347

fooが で変更されdir1barにのみ存在することを示しますdir2

答え2

どのようなバックアップ ソリューションを使用しているかはわかりませんが、実際のバックアップ プログラムのほとんどには「検証」モードがあります。(この場合の「実際の」バックアップ ツールとは、バックアップと復元専用に設計されたソフトウェアである Bacula のようなものです)。
他の条件が同じであれば、実際のバックアップ ソフトウェアとその組み込みの検証ツールを使用することをお勧めします。


他の条件が同じでない場合、 これがrsync -nav --delete <backup> <original>私の提案です。
するは内容をチェックし、余分なファイル、異なるファイル、不足しているファイルについて通知します。 ほど詳細 (低速) ではありません。diffまた、-nはファイルシステムに実際に触れないことを意味します。

答え3

上記の回答から、私が共有したい次のような小さなスクリプトを思いつきました。

# vi /bin/checkbackup

#!/bin/bash
echo "1/5: Checking source files..."
find "$1" -type f -printf "%P %s\n" | sort > ~/.checkbackup_files.tmp
echo "2/5: Comparing destination files..."
find "$2" -type f -printf "%P %s\n" | sort | diff - ~/.checkbackup_files.tmp
echo "3/5: Checking source directories..."
find "$1" -type d -printf "%P\n" | sort > ~/.checkbackup_dirs.tmp
echo "4/5: Comparing destination directories..."
find "$2" -type d -printf "%P\n" | sort | diff - ~/.checkbackup_dirs.tmp
echo "5/5: Cleaning up"
rm -f ~/.checkbackup_files.tmp
rm -f ~/.checkbackup_dirs.tmp

# chmod 755 /bin/checkbackup

使用法:

$ checkbackup /path/to/dir1 /path/to/dir2

レポートがないということは、フォルダー構造と名前が同じであり、ファイルのサイズと名前が同じで、欠落がないことを意味します。

SATA2 5400rpm ディスク上の 1.5TB ディレクトリ ツリーでテストしたところ、約 5 分で完了しました。

このスクリプトは決して完成していません。間違いなく、他にももっと優れた、より高速で、より詳細で、より多くのチェック機能を備えたツールが存在します。しかし、とにかく共有しようと思いました。

関連情報