Que signifie f ++++++++++ dans les journaux rsync?

116

J'utilise rsyncpour faire une sauvegarde de mes fichiers serveur, et j'ai deux questions:

  1. Au milieu du processus, je dois m'arrêter et recommencer rsync.
    Est-ce que rsynccommencer à partir du point où il est arrêté ou il redémarre dès le début?

  2. Dans les fichiers journaux que je vois "f+++++++++". Qu'est-ce que ça veut dire?

par exemple:

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
Parrain
la source

Réponses:

197

Jetons un coup d'œil au fonctionnement de rsync et comprenons mieux les lignes de résultat cryptiques:

1 - Un énorme avantage de rsync est qu'après une interruption, la prochaine fois, il continue en douceur.

Le prochain appel rsync ne transférera pas à nouveau les fichiers, qu'il avait déjà transférés, s'ils n'ont pas été modifiés entre-temps. Mais il recommencera à vérifier tous les fichiers depuis le début pour le savoir, car il ne sait pas qu'il a été interrompu.

2 - Chaque caractère est un code qui peut être traduit si vous lisez la section pour -i, --itemize-changesenman rsync

Décodage de votre exemple de fichier journal à partir de la question:

> 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

La partie pertinente de la page de manuel rsync:

-i, --itemize-changes

Demande une simple liste détaillée des modifications apportées à chaque fichier, y compris les modifications d'attributs. C'est exactement la même chose que de spécifier --out-format = '% i% n% L'. Si vous répétez l'option, les fichiers inchangés seront également affichés, mais seulement si le rsync de réception est au moins la version 2.6.7 (vous pouvez utiliser -vv avec les anciennes versions de rsync, mais cela active également la sortie d'autres messages verbeux- sages).

L'échappement «% i» a une sortie cryptique de 11 lettres. Le format général est comme la chaîne YXcstpoguax, où Y est remplacé par le type de mise à jour en cours, X est remplacé par le type de fichier, et les autres lettres représentent des attributs qui peuvent être générés si elles sont modifiées.

Les types de mise à jour qui remplacent le Y sont les suivants:

  • A <signifie qu'un fichier est en cours de transfert vers l'hôte distant (envoyé).
  • A >signifie qu'un fichier est en cours de transfert vers l'hôte local (reçu).
  • A csignifie qu'une modification / création locale est en cours pour l'élément (comme la création d'un répertoire ou la modification d'un lien symbolique, etc.).
  • A hsignifie que l'élément est un lien physique vers un autre élément (nécessite --hard-links).
  • A .signifie que l'élément n'est pas mis à jour (bien qu'il puisse avoir des attributs en cours de modification).
  • A *signifie que le reste de la zone de sortie détaillée contient un message (par exemple "suppression").

Les types de fichiers qui remplacent le X sont: fpour un fichier, un dpour un répertoire, un Lpour un lien symbolique, un Dpour un périphérique et un Spour un fichier spécial (par exemple, les sockets et fifos nommés).

Les autres lettres de la chaîne ci-dessus sont les lettres réelles qui seront générées si l'attribut associé pour l'élément est en cours de mise à jour ou un "." pour aucun changement. Trois exceptions à cela sont: (1) un élément nouvellement créé remplace chaque lettre par un "+", (2) un élément identique remplace les points par des espaces, et (3) un attribut inconnu remplace chaque lettre par un "?" (cela peut arriver lorsque vous parlez à un ancien rsync).

L'attribut associé à chaque lettre est le suivant:

  • A csignifie soit qu'un fichier normal a une somme de contrôle différente (nécessite --checksum) soit qu'un lien symbolique, un périphérique ou un fichier spécial a une valeur modifiée. Notez que si vous envoyez des fichiers à une rsync antérieure à la version 3.0.1, cet indicateur de modification ne sera présent que pour les fichiers normaux dont la somme de contrôle diffère.
  • Un ssignifie que la taille d'un fichier normal est différente et sera mise à jour par le transfert de fichier.
  • Un tsignifie que l'heure de modification est différente et est mise à jour à la valeur de l'expéditeur (nécessite --times). Une valeur alternative de T signifie que l'heure de modification sera définie sur l'heure de transfert, ce qui se produit lorsqu'un fichier / lien symbolique / périphérique est mis à jour sans --times et lorsqu'un lien symbolique est modifié et que le récepteur ne peut pas définir son heure. (Remarque: lorsque vous utilisez un client rsync 3.0.0, vous pouvez voir l'indicateur s combiné avec t au lieu de l'indicateur T approprié pour cet échec de mise à l'heure.)
  • Un psignifie que les autorisations sont différentes et sont mises à jour à la valeur de l'expéditeur (nécessite --perms).
  • Un osignifie que le propriétaire est différent et qu'il est mis à jour à la valeur de l'expéditeur (nécessite les privilèges --owner et super-utilisateur).
  • Un gsignifie que le groupe est différent et est mis à jour à la valeur de l'expéditeur (nécessite --group et l'autorité pour définir le groupe).
  • L' uemplacement est réservé pour une utilisation future.
  • Les amoyens que les informations ACL ont changé.
  • Les xmoyens que les informations d'attributs étendus modifié.

Une autre sortie est possible: lors de la suppression de fichiers, le "% i" affichera la chaîne "* deleting" pour chaque élément qui est supprimé (en supposant que vous parlez à une rsync suffisamment récente pour qu'elle enregistre les suppressions au lieu de les afficher sous forme de un message détaillé).

mit
la source
Ce message / réponse est très ancien maintenant, mais j'ai dû écrire un commentaire à ce sujet. Est l'une des meilleures réponses que j'ai jamais vues à propos de rsync. Merci mit
Jorge
101

Il y a quelque temps, j'avais besoin de comprendre la rsyncsortie d'un script que j'écrivais. Pendant le processus d'écriture de ce script, j'ai cherché sur Google et je suis arrivé à ce que @mit avait écrit ci-dessus . J'ai utilisé ces informations, ainsi que la documentation d'autres sources, pour créer mon propre amorce sur les indicateurs de bits et comment obtenir rsyncdes indicateurs de bits de sortie pour toutes les actions (il ne le fait pas par défaut).

Je publie ces informations ici dans l'espoir que cela aide d'autres personnes qui (comme moi) tombent sur cette page via la recherche et ont besoin d'une meilleure explication rsync.

Avec la combinaison de l' --itemize-changesindicateur et de l' -vvvindicateur, rsyncnous donne une sortie détaillée de toutes les modifications du système de fichiers qui ont été identifiées dans le répertoire source par rapport au répertoire cible. Les indicateurs binaires produits par rsyncpeuvent ensuite être décodés pour déterminer ce qui a changé. Pour décoder la signification de chaque bit, utilisez le tableau suivant.

Explication de chaque position de bit et valeur dans rsyncla sortie de:

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")

Quelques exemples de sortie de rsync pour divers scénarios:

>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/

Capture de rsyncla sortie (axée sur les indicateurs de bits):

Dans mon expérimentation, l' --itemize-changesindicateur et l' -vvvindicateur sont nécessaires pour obtenir rsyncune entrée pour toutes les modifications du système de fichiers. Sans l' -vvvindicateur triple verbose ( ), je ne voyais pas les changements de répertoire, de lien et de périphérique répertoriés. Il vaut la peine d'expérimenter votre version de rsync pour vous assurer qu'elle observe et note tout ce que vous attendiez.

Une utilisation pratique de cette technique consiste à ajouter l' --dry-runindicateur à la commande et à collecter la liste de modifications, telle que déterminée par rsync, dans une variable (sans apporter de modifications) afin que vous puissiez effectuer vous-même certains traitements sur la liste. Quelque chose comme ce qui suit capturerait la sortie dans une variable:

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

Dans l'exemple ci-dessus, la sortie (stdout) de rsyncest redirigée vers grep(via stdin) afin que nous puissions isoler uniquement les lignes qui contiennent des indicateurs de bits.

Traitement de la sortie capturée:

Le contenu de la variable peut ensuite être consigné pour une utilisation ultérieure ou immédiatement répété pour les éléments d'intérêt. J'utilise cette tactique exacte dans le script que j'ai écrit pendant mes recherches rsync. Vous pouvez consulter le script ( https://github.com/jmmitchell/movestough ) pour des exemples de post-traitement de la sortie capturée pour isoler de nouveaux fichiers, des fichiers en double (même nom, même contenu), des collisions de fichiers (même nom, différents contents), ainsi que les changements dans les structures des sous-répertoires.

John Mark Mitchell
la source
1
très utile! qu'est-ce que -T dans la sortie du journal?
Pol Hallen
Pol, vous posez des questions sur l'indicateur -T pour rsync?
John Mark Mitchell
Pol, si je comprends bien votre question, le t dans le journal rsync signifie que les deux fichiers comparés ont des horodatages différents. Cela signifie qu'ils ont été créés ou modifiés à des moments différents.
John Mark Mitchell
3
Je crois que "T" dans la sortie signifie que l'heure a été mise à jour à l'heure actuelle, "<f..T ...... Rise.mp3". Au moins, c'est ce que j'observe. "t" serait l'heure du fichier local.
C. Kelly
1
J'ai quelques années de retard, mais "t" vs "T" est expliqué dans la page de manuel: A t signifie que l'heure de modification est différente et est mise à jour à la valeur de l'expéditeur (nécessite --times). Une valeur alternative de T signifie que l'heure de modification sera définie sur l'heure de transfert, ce qui se produit lorsqu'un fichier / lien symbolique / périphérique est mis à jour sans --times et lorsqu'un lien symbolique est modifié et que le récepteur ne peut pas définir son heure. (Remarque: lorsque vous utilisez un client rsync 3.0.0, vous pouvez voir l'indicateur s combiné avec t au lieu de l'indicateur T approprié pour cet échec de mise à l'heure.)
user187557
2

1) Wodin, ce n'est pas tout à fait vrai. Si vous utilisez la balise --partial ou -P (identique à --partial --progress), rsync reprend les transferts interrompus.

2) Exactement, c'est la sortie commune pour la balise --itemize-changes.

Joao Figueiredo
la source
2

1.) Il "redémarrera la synchronisation", mais il ne transférera pas les fichiers qui sont de la même taille et horodatage, etc. et les sautera. Vous devez dire à rsync de conserver les horodatages, etc. (par exemple en utilisant rsync -a ...)

Pendant que rsync transfère un fichier, il l'appellera quelque chose comme .filename.XYZABCau lieu de filename. Ensuite, quand il aura fini de transférer ce fichier, il le renommera. Donc, si vous tuez rsync pendant qu'il transfère un gros fichier, vous devrez utiliser l'option --partial pour continuer le transfert au lieu de recommencer à zéro.

2.) Je ne sais pas ce que c'est. Pouvez-vous coller quelques exemples?

EDIT: Comme par http://ubuntuforums.org/showthread.php?t=1342171 ces codes sont définis dans la page de manuel rsync dans la section pour l' -i, --itemize-changesoption.

Partie fixe si ma réponse basée sur celle de Joao

Wodin
la source
J'ai mis quelques exemples de journaux ci-dessus. Merci.
GodFather
J'ai mis à jour ma réponse. Les codes sont expliqués dans la page de manuel.
Wodin