Rsync-Fehler 23: Kann ich feststellen, welche Dateien nicht übertragen wurden?


32

Ich bin sudo rsync -va --progressvom Stammverzeichnis eines externen Laufwerks in einen Ordner auf einem anderen externen Laufwerk gelaufen . Der Grund ist, dass das Quelllaufwerk ein fehlerhaftes NTFS hat und ich keinen Zugriff auf einen Windows-PC habe, um das NTFS zu reparieren.

10 Stunden später hieß es:

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]

Ich habe die gesamte Terminalausgabe gespeichert. Am Anfang gibt es ein paar Hundert Input/output error (5)für Dateien, die ich eigentlich nicht brauche, insgesamt ungefähr 2 GB. Die "Datenträgernutzung" in OSX Finder gibt an, dass die Quelle 617 Milliarden Bytes beträgt, nicht 608 wie im obigen Bericht.

Fragen:

  1. Sagt der erste Teil der ausführlichen Ausgabe (Erstellen einer Dateiliste) definitiv Input/output error (5)für JEDE Datei, die nicht kopiert wird?
  2. Bedeutet code 23dies, dass alle Dateien mit Ausnahme Input/output error (5)derjenigen erfolgreich kopiert wurden?

1
Möglicherweise hilfreich: rsync-Fehlermeldungen scheinen mit "rsync:" zu beginnen, sind also grep '^rsync: ' outputmöglicherweise hilfreich.
barrycarter

Antworten:


19

23 bedeutet nur (von der Manpage):

23 Teilübertragung aufgrund eines Fehlers

Für alles, was nicht übertragen werden konnte, erhalten Sie eine Fehlermeldung. Beachten Sie, dass es sich bei den Fehlermeldungen möglicherweise um das Öffnen oder Lesen von Verzeichnissen handelt, sodass nicht unbedingt für jede Datei eine Fehlermeldung angezeigt wird, die nicht übertragen werden konnte.

Wenn sich Ihre Quelle nicht geändert hat, können Sie die rsyncerneut mit ausführen , um -nzu sehen, was diesmal übertragen werden würde, ohne die Übertragung tatsächlich durchzuführen.

Über die Bytedifferenz erhalten rsyncSie die Größe der Dateien (wie viele Daten aus ihnen gelesen werden können). Sind Sie sicher, Finderdass Sie nicht stattdessen die Datenträgernutzung erfahren ?

Beachten Sie auch, dass NTFS Daten in alternativen Streams oder Attributen der Dateien speichern kann und rsyncdiese normalerweise nicht überträgt (nicht berücksichtigt) (und das kann auch eine Menge ausmachen).


Wollen Sie damit sagen, dass ALLE Daten (egal wie korrupt), die nicht übertragen wurden, am Anfang als aufgeführt waren Input/output error (5)?
Themirror

bezüglich bytedifferenz: ja das ist richtig Ich bin jedoch verwirrt darüber, warum der Unterschied zwischen dem Bericht von rsync und der "Datenträgerverwendung" von Finder 9 Milliarden Bytes beträgt, aber ich kann nur 2-3 Milliarden Bytes von Dateien identifizieren, die besagt haben Input/output error (5). Können Sie erklären?
Themirror

1
@themirror, eine 1-Byte-Datei benötigt noch ein paar Kilobyte zum Speichern (versuchen Sie echo > file; du -k filezu sehen, wie viel auf dem Quelldateisystem vorhanden ist, aber auf ntfs sind es normalerweise 4 KB). rsyncwird Ihnen sagen, dass die Größe ist 1, aber Finder kann Ihnen 4096 für diese Datei mitteilen.
Stéphane Chazelas

@themirror, schreibe deinen ersten Kommentar, ich sage, dass für alles (Dateiinhalt, siehe meine Bearbeitung über alternative Streams), das nicht übertragen werden konnte, eine Fehlermeldung angezeigt wird, aber wenn Sie ein nicht lesbares Verzeichnis erhalten / foo , dann offensichtlich /foo/barund /foo/bar/bazauch nicht übertragen worden.
Stéphane Chazelas

17

Sie können die fehlerfreie Ausgabe von rsync mit dem -qFlag rsync stumm schalten.

-q, --quiet                 suppress non-error messages

Wenn Sie rsync erneut mit dem -qFlag ausführen, schlägt rsync wahrscheinlich immer noch fehl, aber mindestens dieses Mal werden alle Fehlermeldungen, die Ihr Problem verursachen, nicht unter Zeilen und Zeilen mit Dateiübertragungsstatusmeldungen vergraben.


2

Betreff: Fehler 23 - Der häufigste Grund für diesen Fehler ist ein Tippfehler in der rsync-Quelle. Sehen Sie sich Ihren Quellcode-Befehl an und vergewissern Sie sich, dass alles mit ls abgeglichen ist. Suchen Sie nach dummen, subtilen Dingen wie einem zusätzlichen Leerzeichen oder einem 1-l-Problem.


Ich weiß, dass es albern ist, aber ich habe sogar versucht, den Code durchzuarbeiten, bis mir klar wurde, dass ich diesen blöden Fehler begangen hatte. Vielen Dank!
Rburhum
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.