Wie kann ich anhand eines Original- und eines Sicherungsdateisystems feststellen, ob Dateien fehlen?

Wie kann ich anhand eines Original- und eines Sicherungsdateisystems feststellen, ob Dateien fehlen?

Ich fand vondieser Beitrag auf Stackoverflow, wenn Sie lediglich eine Liste der entsprechenden Dateien mit unterschiedlichem Inhalt erhalten möchten, können Sie Folgendes ausführen:

diff  --brief --recursive dir1/ dir2/

... und wenn ich es selbst versuche, erhalte ich eine nette kleine Liste mit Dateien, deren Inhalt unterschiedlich ist.

Aber wenn ich eine Sicherungskopie eines Originaldateisystems erstellt habe (nehmen wir an, es handelt sich um GROSSE Dateisysteme, z. B. 2 TB) und ich prüfen möchte, ob die Sicherungskopie mit dem Original übereinstimmt (z. B. wenn ich prüfen möchte, ob die Sicherung erfolgreich war), was soll ich dann ausführen, wenn ich nur wissen möchte, welche Dateien auf beiden Seiten NICHT verfügbar sind? Ich möchte etwas, das Verzeichnisbäume SCHNELL prüft (nicht Inhalte prüft).

Obwohl ein Vergleich der Dateigröße keinen absoluten Hinweis darauf liefert, ob die gesicherte Datei anders ist, wäre ein Vergleich dieser und anderer Metadaten, die nicht den Dateiinhalt betreffen, während des Vergleichsbefehls hilfreich.

(Ich entschuldige mich dafür, dass ich eine sehr ähnliche Frage erneut poste, aber mir ist aufgefallen, dass ein Benutzer argumentierte, die Frage sei vielleicht nicht zum Thema, sodass diese Frage definitiv auf Stackoverflow zu finden sei.)

Irgendwelche Erfahrungen damit?

Antwort1

Eine Nicht-Rsync-Lösung, die Änderungszeit und Dateigröße überprüft:

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

Beispielausgabe:

> 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

Zeigt, dass fooin geändert wurde dir1und barnur in existiert dir2.

Antwort2

Sie sagen uns nicht, welche Backup-Lösung Sie verwenden, aber fast alle echten Backup-Programme haben einen „Verifizierungs“-Modus. (Ein „echtes“ Backup-Tool ist in diesem Zusammenhang so etwas wie Bacula, eine Software, die ausdrücklich für Backup und Wiederherstellung entwickelt wurde.) Wenn
alle anderen Dinge gleich sind, würde ich vorschlagen, echte Backup-Software und ihre integrierten Verifizierungstools zu verwenden.


rsync -nav --delete <backup> <original>Mein Vorschlag wäre,
dass alle anderen Dinge NICHT gleich sind .tutüberprüft den Inhalt und informiert Sie über zusätzliche Dateien, andere Dateien und fehlende Dateien. Es ist nicht so gründlich (langsam) wie ein diffund das -nbedeutet, dass es das Dateisystem nicht wirklich berührt.

Antwort3

Aufgrund der obigen Antworten habe ich das folgende kleine Skript erstellt, das ich mit Ihnen teilen möchte:

# 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

Verwendung:

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

Keine Berichte bedeutet, dass die Ordnerstruktur und -namen gleich sind und dass die Dateien die gleiche Größe und die gleichen Namen haben, ohne dass etwas fehlt.

Getestet auf 1,5 TB großen Verzeichnisbäumen auf SATA2-Festplatten mit 5.400 U/min, ist es nach etwa 5 Minuten abgeschlossen.

Dieses Skript ist noch lange nicht fertig, es gibt zweifellos andere, bessere, schnellere und ausführlichere Tools mit mehr Prüffunktionen. Aber ich dachte, ich würde es trotzdem teilen.

verwandte Informationen