TAR-Befehl zum Abrufen von Dateien für regelmäßige Sicherungen

TAR-Befehl zum Abrufen von Dateien für regelmäßige Sicherungen

Welchen TAR-Befehl sollte ich verwenden, um Dateien abzurufen, die nach einem bestimmten Datum geändert wurden (einschließlich Änderungen an Eigentümerschaft, Berechtigungen usw.), aber nicht Dateien, die einfach aus einer Sicherung wiederhergestellt wurden?

Wäre es andererseits vorzuziehen, nach einer Wiederherstellung alle Dateien durchzugehen und im Rahmen der Wiederherstellung den Zeitpunkt der Statusänderung für jede einzelne Datei zu ändern?

Ich habe einen Befehl ähnlich dem folgenden verwendet, um alle kürzlich geänderten Dateien seit einem bestimmten Datum für eine regelmäßige, kostengünstige Datensicherung zu tarnen:

$ SINCE=20190501
$ tar cf - --after-date="${SINCE} 00:00:00" . | tar tvf -

Dies ist nicht der eigentliche Befehl, aber er veranschaulicht, was ich sagen möchte. Dieser Befehl gibt einfach die Liste der Dateien aus, die in die Tar-Datei aufgenommen werden sollten, wenn ich die Ausgabe stattdessen an eine Tar-Datei senden würde.

Bisher dachte ich, dieser Befehl würde einwandfrei funktionieren, bis ich meine Festplatte ersetzte und alle Dateien aus dem Backup wiederherstellte. Wenn man sich die Ausgabe von ansieht stat, scheint es, dass das Änderungsdatum das Datum ist, an dem ich alle Dateien aus dem Backup wiederhergestellt habe. Daher werden jetzt alle Dateien in meinem obigen Tar-Befehl ausgewählt.

$ stat restore_file.txt
...
Modify: 2019-04-01 23:52:12.000000000 -0500
Change: 2019-05-25 01:52:10.737688040 -0500

--newer-mtimeScheint auch nicht zu helfen:

$ tar cf - --newer-mtime="${SINCE}" . | tar tvf -

AKTUALISIEREN:Ich habe außerdem Folgendes versucht, aber das hat anscheinend auch nicht geholfen, da trotzdem mehr Dateien ausgewählt wurden, als ich wollte:

$ SINCE=201905010000
$ touch -t "${SINCE}" /tmp/timestamp
$ stat /tmp/timestamp
Access: 2019-05-01 00:00:00.000000000 -0500
Modify: 2019-05-01 00:00:00.000000000 -0500
Change: 2019-06-30 18:29:19.277267874 -0500
$ tar cf - --after-date /tmp/timestamp . | tar tvf -

Antwort1

Durch das Herausfiltern von Verzeichnissen:

$ tar cf - --after-date="${SINCE} 00:00:00" . | tar tvf - | grep -v '^d'

Ich sehe, dass tatsächlich die Dateien abgerufen werden, die ich abrufen wollte, und sonst nichts.

Aus irgendeinem Grund erfasst Tar alle Verzeichnisse ohne Berücksichtigung des Zeitstempels, aber damit kann ich wohl leben. Der obige Befehl funktioniert also meistens immer noch einwandfrei und deshalb hatte ich keine Probleme damit, bis ich mein Backup wiederhergestellt habe.

Was nun die Wiederherstellung betrifft, habe ich angegeben, dass dadurch das Änderungsattribut für jede wiederhergestellte Datei festgelegt wurde. Dies --after-datewar daher nutzlos, da bei meiner nächsten Sicherung am Ende alle Dateien gelöscht wurden.

Um dies zu umgehen, bin ich zum ersten Mal direkt nach der Wiederherstellung dazu übergegangen, Folgendes zu verwenden --newer-mtime:

$ tar cf - --newer-mtime="${SINCE} 00:00:00" . | tar tvf -

Dadurch konnte ich alle neuen Dateien seit der Wiederherstellung abrufen und habe vor, --after-dateab der nächsten Sicherung wieder das Original zu verwenden.

Dies hat einen Nachteil, der weiter unten beschrieben wird: Wenn es zwischen der Wiederherstellung der Dateien und meinem ersten Backup irgendwelche Änderungen an den Berechtigungen oder Eigentümerschaften gab, bemerke ich das nicht und werde es vermutlich auch nie bemerken, es sei denn, die Berechtigungen/Eigentümerschaften derselben Dateien werden erneut geändert. Dann erhalte ich nur zu diesem Zeitpunkt das Update und alle meine Backups bis zu diesem Zeitpunkt würden mit den falschen Berechtigungen/Eigentümerschaften wiederhergestellt.

DerGNU Tar-Handbuchbesagt Folgendes:

Der Status einer Datei gilt als geändert, wenn ihr Inhalt modifiziert wurde oder wenn ihr Besitzer, ihre Berechtigungen usw. geändert wurden.

Mir ist nicht klar, was „und so weiter“ bedeutet, aber das entgeht mir auch.

Angesichts dessen, was ich hier sichere, mache ich mir darüber keine Gedanken, also ist es diesmal in Ordnung für mich. In den Fällen, in denen es mir jedoch wichtig war, könnte ich entweder meine inkrementellen Sicherungen wegwerfen und mit einer brandneuen vollständigen Sicherung von vorne beginnen oder meinen Wiederherstellungsprozess mit einer inkrementellen Sicherung abschließen, indem ich die oben beschriebenen Schritte --newer-mtimeunmittelbar nach der Wiederherstellung befolge. Letzteres würde passieren, bevor die Leute anfangen, die wiederhergestellten Dateien zu verwenden, sodass ich eine gute inkrementelle Sicherung erhalte, bevor ich wieder zu wechsle --after-date.

verwandte Informationen