it-swarm.com.de

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

Ich verwende rsync, um eine Sicherungskopie meiner Serverdateien zu erstellen, und ich habe zwei Fragen:

  1. In der Mitte des Prozesses muss ich rsync stoppen und erneut starten.
    Wird rsync an dem Punkt beginnen, an dem es aufgehört hat, oder wird es von vorne beginnen?

  2. In den Logdateien 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
92
GodFather

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 Aufruf von rsync 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 es nicht bemerkt, dass sie unterbrochen wurden.

2 - Jedes Zeichen ist ein Code, der übersetzt werden kann, wenn Sie den Abschnitt für -i, --itemize-changes In man rsync Lesen.

Dekodieren Sie Ihre Beispiel-Protokolldatei 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-changes

Fordert eine einfache Auflistung 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 die Version 2.6.7 hat (Sie können -vv mit älteren Versionen von rsync verwenden, dies schaltet jedoch auch die Ausgabe anderer ausführlicher Nachrichten ein). Salbei).

Das Escape "% i" hat eine kryptische Ausgabe, die 11 Buchstaben lang ist. Das allgemeine Format entspricht 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, lauten wie folgt:

  • Ein < Bedeutet, dass eine Datei an den entfernten Host übertragen (gesendet) wird.
  • Ein > Bedeutet, dass eine Datei an den lokalen Host übertragen wird (empfangen).
  • Ein c bedeutet, dass eine lokale Änderung/Erstellung für das Element stattfindet (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 möglicherweise Attribute geändert werden).
  • Ein * Bedeutet, dass der Rest des detaillierten Ausgabebereichs eine Nachricht enthält (z. B. "Löschen").

Die Dateitypen, die das X ersetzen, sind: f für eine Datei, d für ein Verzeichnis, L für einen Symlink, D für ein Gerät und ein S 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 mit einem "+", (2) ein identisches Element ersetzt die Punkte durch Leerzeichen und (3) ein unbekanntes Attribut ersetzt jeden Buchstaben mit einem "?" (Dies kann passieren, wenn mit einem älteren rsync gesprochen wird).

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

  • Ein c bedeutet, 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 von der Prüfsumme abweichende reguläre Dateien angezeigt wird, wenn Sie Dateien vor 3.0.1 an rsync senden.
  • Ein s bedeutet, dass die Größe einer regulären Datei unterschiedlich ist und durch die Dateiübertragung aktualisiert wird.
  • Ein 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 in Kombination mit t anstelle des richtigen T-Flags für diesen Zeiteinstellungsfehler angezeigt.)
  • Ein p bedeutet, dass die Berechtigungen unterschiedlich sind und auf den Wert des Absenders aktualisiert werden (erfordert --perms).
  • Ein o bedeutet, dass sich der Eigentümer unterscheidet und auf den Wert des Absenders aktualisiert wird (erfordert --owner- und Superuser-Berechtigungen).
  • Ein g bedeutet, dass die Gruppe unterschiedlich ist und auf den Wert des Absenders aktualisiert wird (erfordert --group und die Berechtigung zum Festlegen der Gruppe).
  • Der Steckplatz u ist für die zukünftige Verwendung reserviert.
  • Das a bedeutet, dass sich die ACL-Informationen geändert haben.
  • Das x bedeutet, dass sich die erweiterten Attributinformationen geändert haben.

Eine weitere Ausgabe ist möglich: Wenn Sie Dateien löschen, gibt "% i" für jedes zu entfernende Element 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).

162
mit

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

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

Mit der Kombination der --itemize-changes Flagge und die -vvv flag, rsync gibt eine detaillierte Ausgabe aller Dateisystemänderungen aus, die im Quellverzeichnis im Vergleich zum Zielverzeichnis festgestellt wurden. Die von rsync erzeugten Bit-Flags können dann decodiert werden, um festzustellen, was sich geändert hat. Verwenden Sie die folgende Tabelle, um die Bedeutung der einzelnen Bits zu dekodieren.

Erläuterung der einzelnen Bitpositionen und -werte in der Ausgabe von rsync:

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 der Ausgabe von rsync (fokussiert auf die Bit-Flags):

In meinen Experimenten haben sowohl die --itemize-changes Flagge und die -vvv Flag werden benötigt, um rsync zu erhalten, um einen Eintrag für all Dateisystemänderungen auszugeben. Ohne die dreifache Ausführlichkeit (-vvv) Flag, Verzeichnis-, Link- und Geräteänderungen wurden nicht aufgelistet. Es lohnt sich, mit Ihrer Version von rsync zu experimentieren, um sicherzustellen, dass alles, was Sie erwartet haben, beachtet und notiert wird.

Eine praktische Anwendung dieser Technik ist das Hinzufügen des --dry-run Markieren Sie den Befehl, und erfassen Sie die von rsync festgelegte Änderungsliste in einer Variablen (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 (stdout) von rsync (über stdin) nach grep umgeleitet, damit wir nur die Zeilen isolieren können, die Bit-Flags enthalten.

Verarbeitung der erfassten Ausgabe:

Der Inhalt der Variablen kann dann für die spätere Verwendung protokolliert oder sofort für Elemente von Interesse durchlaufen werden. Ich verwende genau diese Taktik in dem Skript, das ich während meiner Recherche zu rsync geschrieben habe. Im Skript ( https://github.com/jmmitchell/movestough ) finden Sie Beispiele für die Nachbearbeitung der erfassten Ausgabe, um neue Dateien zu isolieren, Dateien zu duplizieren (gleicher Name, gleicher Inhalt). Dateikollisionen (gleicher Name, unterschiedlicher Inhalt) sowie die Änderungen in den Unterverzeichnisstrukturen.

77

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

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

2
Joao Figueiredo

1.) Die Synchronisierung wird "neu gestartet", es werden jedoch keine Dateien mit der gleichen Größe und dem gleichen Zeitstempel usw. übertragen. Zunächst wird eine Liste der zu übertragenden Dateien erstellt, und während dieser Phase wird festgestellt, dass bereits einige Dateien übertragen wurden und werde sie überspringen. Sie sollten rsync anweisen, die Zeitstempel usw. beizubehalten (z. B. mit rsync -a ...)

Während rsync eine Datei überträgt, nennt es diese so etwas wie .filename.XYZABC anstelle von filename. 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 rsync-Manpage im Abschnitt für die -i, --itemize-changes Möglichkeit.

Fixteil wenn meine Antwort auf Joaos basiert

1
Wodin