Erreur Rsync 23: Puis-je savoir quels fichiers n'ont pas été transférés?


32

J'ai couru sudo rsync -va --progressde la racine d'un lecteur externe vers un dossier sur un autre lecteur externe. La raison en est que le lecteur source a un NTFS contenant des erreurs et je n'ai pas accès à un PC Windows pour réparer le NTFS.

10 heures plus tard, il a déclaré:

sent 608725204596 bytes  received 19365712 bytes  15902210.53 bytes/sec
total size is 608586212274  speedup is 1.00
rsync error: some files could not be transferred (code 23) at /SourceCache/rsync/rsync-42/rsync/main.c(992) [sender=2.6.9]

J'ai enregistré l'intégralité de la sortie du terminal. Au début, il y en a quelques centaines Input/output error (5)pour des fichiers dont je n'ai en fait pas besoin pour un total d'environ 2 Go. "Utilisation du disque" du Finder OSX me dit que la source est de 617 milliards d'octets, pas 608 comme dans le rapport ci-dessus.

Des questions:

  1. La première partie de la sortie détaillée (création d'une liste de fichiers) indique-t-elle définitivement Input/output error (5)TOUT fichier qui ne sera pas copié?
  2. Cela code 23signifie- t -il que tous les fichiers sauf Input/output error (5)ceux ont été copiés avec succès?

1
Peut-être utile: les messages d'erreur rsync semblent commencer par "rsync:", donc cela grep '^rsync: ' outputpeut être utile.
barrycarter

Réponses:


19

23 signifie uniquement (à partir de la page de manuel):

23 Transfert partiel dû à une erreur

Pour tout ce qui n'a pas pu être transféré, vous obtiendrez un message d'erreur. Notez que les messages d'erreur peuvent concerner l'ouverture ou la lecture de répertoires, vous ne verrez donc pas nécessairement un message d'erreur pour chaque fichier qui n'a pas pu être transféré.

Si votre source n'a pas changé, vous pouvez réexécuter le rsyncavec -npour voir ce qu'il transfèrerait cette fois sans effectuer le transfert.

À propos de la différence d'octets, rsyncvous donne la taille des fichiers (combien de données peuvent être lues à partir d'eux). Êtes-vous sûr de Finderne pas vous indiquer l' utilisation du disque à la place?

Notez également que NTFS peut stocker des données dans des flux ou des attributs alternatifs des fichiers, et rsyncne transfèrera généralement pas (n'est pas au courant) ceux-ci (et cela peut également représenter beaucoup).


Donc, êtes-vous en train de dire que TOUTES les données (peu importe la façon dont elles sont corrompues) qui n'ont pas été transférées étaient répertoriées au début comme un Input/output error (5)?
themirror

concernant la différence d'octets: Oui c'est correct. Je suis confus cependant sur la raison pour laquelle la différence entre le rapport de rsync et "l'utilisation du disque" du Finder est de 9 milliards d'octets, mais je ne peux identifier que 2 à 3 milliards d'octets de fichiers Input/output error (5). Peux-tu expliquer?
themirror

1
@themirror, un fichier de 1 octet aura encore besoin de quelques kilo-octets alloués sur le disque pour le stocker (essayez echo > file; du -k filede voir combien sur le système de fichiers source, mais sur ntfs, c'est généralement 4k). rsyncvous indiquera que la taille est 1, mais le Finder pourrait vous indiquer 4096 pour ce fichier.
Stéphane Chazelas

@themirror, par votre premier commentaire, je dis que pour tout (contenu du fichier, voir ma modification sur les flux alternatifs) qui n'a pas pu être transféré, vous obtiendrez une erreur, mais si vous obtenez un répertoire impossible à lire / foo , alors évidemment /foo/baret /foo/bar/bazn'aura pas été transféré non plus.
Stéphane Chazelas

17

Vous pouvez désactiver la sortie sans erreur de rsync en utilisant l' -qindicateur de rsync .

-q, --quiet                 suppress non-error messages

Si vous exécutez à nouveau rsync avec l' -qindicateur, rsync échouera probablement encore, mais au moins cette fois, les messages d'erreur à l'origine de votre problème ne seront pas enfouis sous les lignes et les lignes des messages d'état de transfert de fichiers.


2

Re: erreur 23-- La raison la plus courante d'avoir cette erreur est de faire une faute de frappe mineure entrant dans la source rsync. Examinez votre commande source et assurez-vous que tout se vérifie par rapport à ls, et recherchez des choses subtiles stupides comme un espace supplémentaire ou un problème de 1 l.


Je sais que c'est idiot, mais j'ai même emprunté la voie pour continuer à fouiller le code jusqu'à ce que je réalise que j'avais fait cette stupide erreur. Merci!
rburhum
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.