Was bedeutet f +++++++++ in rsync-Protokollen?

116

Ich verwende rsynceine Sicherungskopie meiner Serverdateien und habe zwei Fragen:

  1. In der Mitte des Prozesses muss ich anhalten und rsyncerneut starten .
    Beginnt es rsyncan dem Punkt, an dem es aufgehört hat, oder startet es von vorne neu?

  2. In den Protokolldateien sehe ich "f+++++++++". Was heißt das?

z.B:

2010/12/21 08:28:37 [4537] >f.st...... iddd/logs/website-production-access_log
2010/12/21 08:29:11 [4537] >f.st...... iddd/web/website/production/shared/log/production.log
2010/12/21 08:29:14 [4537] .d..t...... iddd/web/website/production/shared/sessions/
2010/12/21 08:29:14 [4537] >f+++++++++ iddd/web/website/production/shared/sessions/ruby_sess.017a771cc19b18cd
2010/12/21 08:29:14 [4537] >f+++++++++ iddd/web/website/production/shared/sessions/ruby_sess.01eade9d317ca79a
Pate
quelle

Antworten:

196

Werfen wir einen Blick auf die Funktionsweise von rsync und verstehen die kryptischen Ergebniszeilen besser:

1 - Ein großer Vorteil von rsync ist, dass es nach einer Unterbrechung beim nächsten Mal reibungslos weitergeht.

Beim nächsten rsync-Aufruf werden die bereits übertragenen Dateien nicht erneut übertragen, wenn sie in der Zwischenzeit nicht geändert wurden. Es werden jedoch von Anfang an alle Dateien erneut überprüft, um dies herauszufinden, da nicht bekannt ist, dass sie unterbrochen wurden.

2 - Jedes Zeichen ist ein Code, der übersetzt werden kann, wenn Sie den Abschnitt für -i, --itemize-changesin lesenman rsync

Dekodieren Sie Ihre Beispielprotokolldatei aus der Frage:

> f.st ......

> - the item is received
f - it is a regular file
s - the file size is different
t - the time stamp is different

.d..t ......

. - the item is not being updated (though it might have attributes 
    that are being modified)
d - it is a directory
t - the time stamp is different

> f +++++++++

> - the item is received
f - a regular file
+++++++++ - this is a newly created item

Der relevante Teil der rsync-Manpage:

-i, --itemize-Änderungen

Fordert eine einfache detaillierte Liste der Änderungen an, die an jeder Datei vorgenommen werden, einschließlich Attributänderungen. Dies entspricht genau der Angabe von --out-format = '% i% n% L'. Wenn Sie die Option wiederholen, werden auch unveränderte Dateien ausgegeben, jedoch nur, wenn der empfangende Rsync mindestens Version 2.6.7 ist (Sie können -vv mit älteren Versionen von Rsync verwenden, dies aktiviert jedoch auch die Ausgabe anderer ausführlicher Nachrichten. Weise).

Das Escape "% i" hat eine kryptische Ausgabe, die 11 Buchstaben lang ist. Das allgemeine Format ähnelt der Zeichenfolge YXcstpoguax, wobei Y durch die Art der Aktualisierung ersetzt wird, X durch den Dateityp ersetzt wird und die anderen Buchstaben Attribute darstellen, die ausgegeben werden können, wenn sie geändert werden.

Die Aktualisierungstypen, die das Y ersetzen, sind wie folgt:

  • A <bedeutet, dass eine Datei an den Remote-Host übertragen (gesendet) wird.
  • EIN > bedeutet, dass eine Datei auf den lokalen Host übertragen wird (empfangen).
  • A cbedeutet, dass für das Element eine lokale Änderung / Erstellung erfolgt (z. B. das Erstellen eines Verzeichnisses oder das Ändern eines Symlinks usw.).
  • EIN h bedeutet, dass der Artikel ein fester Link zu einem anderen Artikel ist (erfordert --hard-links).
  • EIN . bedeutet, dass das Element nicht aktualisiert wird (obwohl es möglicherweise Attribute enthält, die geändert werden).
  • A *bedeutet, dass der Rest des Einzelausgabebereichs eine Nachricht enthält (z. B. "Löschen").

Die Dateitypen, die das X ersetzen, sind: ffür eine Datei, a dfür ein Verzeichnis, a Lfür einen Symlink, a Dfür ein Gerät und aS für eine spezielle Datei (z. B. benannte Sockets und Fifos).

Die anderen Buchstaben in der obigen Zeichenfolge sind die tatsächlichen Buchstaben, die ausgegeben werden, wenn das zugehörige Attribut für das Element aktualisiert wird, oder ein "." für keine Änderung. Drei Ausnahmen sind: (1) Ein neu erstelltes Element ersetzt jeden Buchstaben durch ein "+", (2) ein identisches Element ersetzt die Punkte durch Leerzeichen und (3) ein unbekanntes Attribut ersetzt jeden Buchstaben durch ein "?" (Dies kann passieren, wenn Sie mit einem älteren Rsync sprechen).

Das Attribut, das jedem Buchstaben zugeordnet ist, lautet wie folgt:

  • EIN c bedeutet entweder, dass eine reguläre Datei eine andere Prüfsumme hat (erfordert --checksum) oder dass ein Symlink, ein Gerät oder eine spezielle Datei einen geänderten Wert hat. Beachten Sie, dass dieses Änderungsflag nur für reguläre Dateien mit unterschiedlichen Prüfsummen vorhanden ist, wenn Sie Dateien vor 3.0.1 an einen rsync senden.
  • A sbedeutet, dass die Größe einer regulären Datei unterschiedlich ist und durch die Dateiübertragung aktualisiert wird.
  • A tbedeutet, dass die Änderungszeit unterschiedlich ist und auf den Wert des Absenders aktualisiert wird (erfordert --times). Ein alternativer Wert von T bedeutet, dass die Änderungszeit auf die Übertragungszeit eingestellt wird. Dies geschieht, wenn eine Datei / ein Symlink / ein Gerät ohne --times aktualisiert wird und wenn ein Symlink geändert wird und der Empfänger seine Zeit nicht einstellen kann. (Hinweis: Wenn Sie einen rsync 3.0.0-Client verwenden, wird möglicherweise das s-Flag mit t anstelle des richtigen T-Flags für diesen Zeiteinstellungsfehler kombiniert.)
  • A pbedeutet, dass die Berechtigungen unterschiedlich sind und auf den Wert des Absenders aktualisiert werden (erfordert --perms).
  • Ein o bedeutet, dass der Eigentümer anders ist und auf den Wert des Absenders aktualisiert wird (erfordert - Eigentümer- und Superuser-Berechtigungen).
  • A gbedeutet, dass die Gruppe unterschiedlich ist und auf den Wert des Absenders aktualisiert wird (erfordert --group und die Berechtigung zum Festlegen der Gruppe).
  • Der uSteckplatz ist für die zukünftige Verwendung reserviert.
  • Die abedeutet , dass die ACL - Informationen geändert.
  • Dies xbedeutet, dass sich die erweiterten Attributinformationen geändert haben.

Eine weitere Ausgabe ist möglich: Beim Löschen von Dateien gibt "% i" für jedes Element, das entfernt wird, die Zeichenfolge "* deleting" aus (vorausgesetzt, Sie sprechen mit einem ausreichend aktuellen rsync, um Löschvorgänge zu protokollieren, anstatt sie als auszugeben eine ausführliche Nachricht).

mit
quelle
Dieser Beitrag / diese Antwort ist jetzt sehr alt, aber ich musste einen Kommentar dazu schreiben. Ist eine der besten Antworten, die ich je über rsync gesehen habe. Danke mit
Jorge
101

Vor einiger Zeit musste ich die rsyncAusgabe für ein Skript verstehen, das ich schrieb. Während des Schreibens dieses Skripts googelte ich herum und kam zu dem, was @mit oben geschrieben hatte . Ich habe diese Informationen sowie die Dokumentation aus anderen Quellen verwendet, um meinen eigenen Primer für die Bit-Flags zu erstellen und um rsynczu erfahren, wie Bit-Flags für alle Aktionen ausgegeben werden (dies geschieht standardmäßig nicht).

Ich poste diese Informationen hier in der Hoffnung, dass sie anderen helfen, die (wie ich) über die Suche auf diese Seite stoßen und eine bessere Erklärung benötigen rsync .

Mit der Kombination aus der --itemize-changesFlagge und die -vvvFlagge, rsyncgibt uns detaillierte Ausgabe aller Dateisystemänderungen , die im Quellverzeichnis identifiziert wurden , als in das Zielverzeichnis verglichen. Die von erzeugten Bit-Flags rsynckönnen dann decodiert werden, um festzustellen, was sich geändert hat. Verwenden Sie die folgende Tabelle, um die Bedeutung jedes Bits zu dekodieren.

Erklärung jeder Bitposition und jedes Wertes in rsyncder Ausgabe:

YXcstpoguax  path/to/file
|||||||||||
||||||||||╰- x: The extended attribute information changed
|||||||||╰-- a: The ACL information changed
||||||||╰--- u: The u slot is reserved for future use
|||||||╰---- g: Group is different
||||||╰----- o: Owner is different
|||||╰------ p: Permission are different
||||╰------- t: Modification time is different
|||╰-------- s: Size is different
||╰--------- c: Different checksum (for regular files), or
||              changed value (for symlinks, devices, and special files)
|╰---------- the file type:
|            f: for a file,
|            d: for a directory,
|            L: for a symlink,
|            D: for a device,
|            S: for a special file (e.g. named sockets and fifos)
╰----------- the type of update being done::
             <: file is being transferred to the remote host (sent)
             >: file is being transferred to the local host (received)
             c: local change/creation for the item, such as:
                - the creation of a directory
                - the changing of a symlink,
                - etc.
             h: the item is a hard link to another item (requires 
                --hard-links).
             .: the item is not being updated (though it might have
                attributes that are being modified)
             *: means that the rest of the itemized-output area contains
                a message (e.g. "deleting")

Einige Beispielausgaben von rsync für verschiedene Szenarien:

>f+++++++++ some/dir/new-file.txt
.f....og..x some/dir/existing-file-with-changed-owner-and-group.txt
.f........x some/dir/existing-file-with-changed-unnamed-attribute.txt
>f...p....x some/dir/existing-file-with-changed-permissions.txt
>f..t..g..x some/dir/existing-file-with-changed-time-and-group.txt
>f.s......x some/dir/existing-file-with-changed-size.txt
>f.st.....x some/dir/existing-file-with-changed-size-and-time-stamp.txt 
cd+++++++++ some/dir/new-directory/
.d....og... some/dir/existing-directory-with-changed-owner-and-group/
.d..t...... some/dir/existing-directory-with-different-time-stamp/

Erfassen rsyncder Ausgabe (konzentriert auf die Bit-Flags):

In meinen Experimenten werden sowohl das --itemize-changesFlag als auch das -vvvFlag benötigt, um rsynceinen Eintrag für alle Dateisystemänderungen auszugeben . Ohne die dreifache Ausführlichkeit (-vvv ) -Flag wurden keine Verzeichnis-, Link- und Geräteänderungen aufgelistet. Es lohnt sich, mit Ihrer Version von rsync zu experimentieren, um sicherzustellen, dass alles, was Sie erwartet haben, beobachtet und notiert wird.

Eine praktische Anwendung dieser Technik besteht darin, das --dry-runFlag zum Befehl hinzuzufügen und die von rsync festgelegte Änderungsliste in einer Variablen zu sammeln (ohne Änderungen vorzunehmen), damit Sie die Liste selbst bearbeiten können. So etwas wie das Folgende würde die Ausgabe in einer Variablen erfassen:

file_system_changes=$(rsync --archive --acls --xattrs \
    --checksum --dry-run \
    --itemize-changes -vvv \
    "/some/source-path/" \
    "/some/destination-path/" \
| grep -E '^(\.|>|<|c|h|\*).......... .')

Im obigen Beispiel wird die Ausgabe von (stdout) von (über stdin) rsyncumgeleitet, grepsodass nur die Zeilen isoliert werden können, die Bitflags enthalten.

Verarbeitung der erfassten Ausgabe:

Der Inhalt der Variablen kann dann zur späteren Verwendung protokolliert oder sofort für interessierende Elemente wiederholt werden. Ich verwende genau diese Taktik in dem Skript, über das ich mehr recherchiert habe rsync. Im Skript ( https://github.com/jmmitchell/movestough ) finden Sie Beispiele für die Nachbearbeitung der erfassten Ausgabe, um neue Dateien, doppelte Dateien (gleicher Name, gleicher Inhalt) und Dateikollisionen (gleicher Name, unterschiedlich) zu isolieren Inhalt) sowie die Änderungen in den Unterverzeichnisstrukturen.

John Mark Mitchell
quelle
1
sehr hilfreich! Was ist -T in der Protokollausgabe?
Pol Hallen
Pol, fragst du nach der - T-Flagge für rsync?
John Mark Mitchell
Pol, wenn ich Ihre Frage richtig verstehe, bedeutet das t im rsync-Protokoll, dass die beiden verglichenen Dateien unterschiedliche Zeitstempel haben. Das heißt, sie wurden zu unterschiedlichen Zeiten erstellt oder geändert.
John Mark Mitchell
3
Ich glaube, "T" in der Ausgabe bedeutet, dass die Zeit auf die aktuelle Zeit aktualisiert wurde, "<f..T ...... Rise.mp3". Zumindest beobachte ich das. "t" wäre die Zeit der lokalen Datei.
C. Kelly
1
Ich bin ein paar Jahre zu spät, aber "t" vs "T" wird in der Manpage erklärt: A t bedeutet, dass die Änderungszeit unterschiedlich ist und auf den Wert des Absenders aktualisiert wird (erfordert --times). Ein alternativer Wert von T bedeutet, dass die Änderungszeit auf die Übertragungszeit eingestellt wird. Dies geschieht, wenn eine Datei / ein Symlink / ein Gerät ohne --times aktualisiert wird und wenn ein Symlink geändert wird und der Empfänger seine Zeit nicht einstellen kann. (Hinweis: Wenn Sie einen rsync 3.0.0-Client verwenden, wird möglicherweise das s-Flag mit t anstelle des richtigen T-Flags für diesen Zeiteinstellungsfehler kombiniert.)
user187557
2

1) Wodin, das stimmt nicht ganz. Bei Verwendung des Tags --partial oder -P (wie --partial --progress) setzt rsync unterbrochene Übertragungen fort.

2) Genau das ist die übliche Ausgabe für das Tag --itemize-change.

Joao Figueiredo
quelle
2

1.) Es wird "die Synchronisierung neu starten", aber es werden keine Dateien mit derselben Größe und demselben Zeitstempel usw. übertragen. Zunächst wird eine Liste der zu übertragenden Dateien erstellt, und in dieser Phase wird festgestellt, dass bereits einige Dateien übertragen wurden und wird sie überspringen. Sie sollten rsync anweisen, die Zeitstempel usw. beizubehalten (z. B. using rsync -a ...).

Während rsync eine Datei überträgt, nennt es sie so etwas wie .filename.XYZABCstattfilename . Wenn die Übertragung dieser Datei abgeschlossen ist, wird sie umbenannt. Wenn Sie also rsync beenden, während eine große Datei übertragen wird, müssen Sie die Option --partial verwenden, um die Übertragung fortzusetzen, anstatt von vorne zu beginnen.

2.) Ich weiß nicht was das ist. Können Sie einige Beispiele einfügen?

BEARBEITEN: Gemäß http://ubuntuforums.org/showthread.php?t=1342171 werden diese Codes in der Manpage rsync im Abschnitt für die -i, --itemize-changesOption definiert.

Teil behoben, wenn meine Antwort auf Joaos basiert

Wodin
quelle
Ich habe oben einige Protokollbeispiele angegeben. Vielen Dank.
GodFather
Ich habe meine Antwort aktualisiert. Die Codes werden in der Manpage erklärt.
Wodin