129 votes

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

J'utilise rsync pour faire une sauvegarde des fichiers de mon serveur, et j'ai deux questions :

  1. Au milieu du processus, j'ai besoin d'arrêter et de démarrer rsync encore.
    Will rsync reprendra à partir du point où il s'est arrêté ou recommencera depuis le début ?

  2. Dans les fichiers journaux, je vois "f+++++++++" . Qu'est-ce que cela signifie ?

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

219voto

mit Points 4462

Voyons comment fonctionne rsync et comment mieux comprendre les lignes de résultat cryptiques :

1 - L'un des grands avantages de rsync est qu'après une interruption, il se poursuit sans problème la fois suivante.

La prochaine invocation de 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 n'est pas conscient d'avoir été interrompu.

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

Décodage de votre exemple de fichier journal 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 changements 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 récepteur est au moins de la version 2.6.7 (vous pouvez utiliser -vv avec des versions plus anciennes de rsync, mais cela désactive également l'affichage d'autres messages verbeux). verbeux).

L'échappement "%i" a une sortie cryptique de 11 lettres. Le format général ressemble à la chaîne YXcstpoguax, où Y est remplacé par le type de mise à jour effectuée, X est remplacé par le type de fichier, et les autres lettres représentent les attributs qui peuvent être émis s'ils sont modifiés.

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 c signifie qu'une modification/création locale a lieu pour l'élément (comme la création d'un répertoire ou la modification d'un lien symbolique, etc.)
  • A h signifie que l'élément est un lien dur 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 qui sont modifiés).
  • 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 les suivants : f pour un dossier, un d pour un répertoire, un L pour un lien symbolique, un D pour un dispositif, et un S pour un fichier spécial (par exemple, sockets et fifos nommés).

Les autres lettres de la chaîne ci-dessus sont les lettres réelles qui seront affichées si l'attribut associé à l'élément est mis à jour ou un "." pour aucun changement. Il y a trois exceptions à cette règle : (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 lors d'une conversation avec un ancien rsync).

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

  • A c signifie soit qu'un fichier ordinaire 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 à un rsync antérieur à la version 3.0.1, cet indicateur de changement ne sera présent que pour les fichiers réguliers dont la somme de contrôle est différente.
  • A s signifie que la taille d'un fichier ordinaire est différente et sera mise à jour par le transfert du fichier.
  • A t signifie que le temps de modification est différent et est mis à jour à la valeur de l'expéditeur (nécessite --times). Une autre valeur de T signifie que l'heure de modification sera fixée à l'heure de transfert, ce qui se produit lorsqu'un fichier/symlink/dispositif est mis à jour sans --times et lorsqu'un symlink est modifié et que le récepteur ne peut pas fixer son heure. (Note : lors de l'utilisation d'un client rsync 3.0.0, vous pouvez voir l'indicateur s combiné à t au lieu de l'indicateur T approprié pour cet échec de réglage de l'heure).
  • A p signifie que les permissions sont différentes et sont mises à jour à la valeur de l'expéditeur (nécessite --perms).
  • Un site o signifie que le propriétaire est différent et qu'il est mis à jour avec la valeur de l'expéditeur (nécessite les privilèges --owner et super-utilisateur).
  • A g signifie que le groupe est différent et est mis à jour avec la valeur de l'expéditeur (nécessite --group et l'autorité pour définir le groupe).
  • El u est réservé pour une utilisation future.
  • El a signifie que les informations de l'ACL ont changé.
  • El x signifie que les informations de l'attribut étendu ont changé.

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

121voto

Il y a quelque temps, j'avais besoin de comprendre le rsync pour un script que j'étais en train d'écrire. Pendant le processus d'écriture de ce script, j'ai fait des recherches sur Internet et je suis tombé sur ce que @mit avait écrit au-dessus de . J'ai utilisé ces informations, ainsi que des documents provenant d'autres sources, pour créer mon propre guide d'introduction aux drapeaux binaires et à la manière de les obtenir. rsync pour sortir les drapeaux de bits pour toutes les actions (il ne le fait pas par défaut).

Je publie cette information ici dans l'espoir d'aider d'autres personnes qui (comme moi) tombent sur cette page par le biais d'une recherche et qui ont besoin d'une meilleure explication sur le sujet. rsync .

Avec la combinaison de la --itemize-changes drapeau y el -vvv drapeau, rsync nous donne une sortie détaillée de tous les changements de système de fichiers qui ont été identifiés dans le répertoire source par rapport au répertoire cible. Les indicateurs binaires produits par rsync peut alors être décodé pour déterminer ce qui a changé. Pour décoder la signification de chaque bit, utilisez le tableau suivant.

Explication de la position et de la valeur de chaque bit dans l'écran. rsync La sortie de l'entreprise :

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 différents 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/

Capturer rsync (en se concentrant sur les drapeaux binaires) :

Dans mon expérience, les deux --itemize-changes drapeau y el -vvv sont nécessaires pour obtenir rsync pour produire une entrée pour todo les modifications du système de fichiers. Sans le triple verbe ( -vvv ), je ne voyais pas les changements de répertoire, de lien et de périphérique répertoriés. Cela vaut la peine d'expérimenter avec 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'option --dry-run à la commande et rassemble la liste des modifications, telle que déterminée par rsync, dans une variable (sans effectuer de modifications) afin que vous puissiez effectuer vous-même des traitements sur cette 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 l'application rsync est redirigé vers grep (via stdin) afin que nous puissions isoler uniquement les lignes qui contiennent des drapeaux de bits.

Traitement de la sortie capturée :

Le contenu de la variable peut alors être enregistré pour une utilisation ultérieure ou être immédiatement itéré pour trouver des éléments intéressants. J'utilise cette tactique exacte dans le script que j'ai écrit pendant que je faisais des recherches plus approfondies sur rsync . Vous pouvez regarder le script ( https://github.com/jmmitchell/movestough ) pour des exemples de post-traitement de la sortie capturée afin d'isoler les nouveaux fichiers, les fichiers dupliqués (même nom, même contenu), les collisions de fichiers (même nom, contenu différent), ainsi que les changements dans les structures de sous-répertoires.

3voto

Joao Figueiredo Points 1164

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 habituelle de la balise --itemize-changes.

2voto

Wodin Points 980

1.) Il va "relancer la synchronisation", mais il ne transférera pas les fichiers qui ont la même taille et le même horodatage, etc. Il établit d'abord une liste de fichiers à transférer et pendant cette étape, il verra qu'il a déjà transféré certains fichiers et les ignorera. Vous devez demander à rsync de conserver les horodatages, etc. rsync -a ... )

Pendant que rsync transfère un fichier, il l'appelle de la manière suivante .filename.XYZABC au lieu de filename . Puis, lorsqu'il aura fini de transférer ce fichier, il le renommera. Ainsi, si vous arrêtez rsync alors 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 : Conformément à http://ubuntuforums.org/showthread.php?t=1342171 Ces codes sont définis dans la page de manuel rsync, dans la section relative à l'option -i, --itemize-changes option.

J'ai corrigé une partie de ma réponse basée sur celle de Joao.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X