rsync-Fehler 23 bzw. 36 (Dateinamen zu lang)
Beim Übertragen von Dateien zwischen Computern habe ich mir für rsync
die Verwendung von
rsync -ahvz --progress QUELLE ZIEL
angewöhnt, wobei ich die üblichen
Parameter -a
für
archivieren (rekursiv, Links folgen, Dateiberechtigungen und -zeiten
behalten, usw.), -h
für »menschenlesbare« Ausgabe der numerischen
Größen und gegebenfalls -z
für Kompression (wo sie sich anbietet) noch
um -v
zum Auflisten jeder übertragenen Datei und --progress
zum
Anzeigen des Fortschritts einer jeden Datei ergänze – damit ich sehe,
daß da etwas passiert.
Überträgt man viele Dateien, kann es durch deren ausführliche Auflistung
mit -v
allerdings passieren, daß man Fehlermeldungen nicht mehr
einfach findet und man am Ende mit einer Meldung wie
sent 7.44G bytes received 711.13K bytes 11.65M bytes/sec
total size is 7.58G speedup is 1.02
rsync error: some files could not be transferred (code 23) at
/BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-47/rsync/main.c(992)
[sender=2.6.9]
dasteht (Fehler 23: »Partial transfer due to error«) und mühsam in
tmux
/screen
oder dem Terminal viele Seiten gefüllter Zeilen
zurückblättern müßte, um darin zu suchen, welche Dateien warum nicht
übertragen werden konnten.
Hier kann man sich aber das rsync-Protokoll zunutze machen, indem man
den rsync
-Befehl ein zweites Mal ausführt, dann allerdings
schweigsamer mit -q
für quiet statt -v
für verbose. rsync
versucht dann, die Unterschiede zwischen QUELLE und ZIEL zu
übertragen, welche in der Regel die zuvor wegen Fehlern nicht
übertragenen Dateien sein dürften – und wobei man sich diesmal nur noch
die Fehler anzeigen läßt. Mit rsync -aq QUELLE ZIEL
erhält man dann
zum Beispiel:
rsync: recv_generator: failed to stat
"ZIEL/abcdefhijklmnop/qrstuvwxyz0123456789abcd/efghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz012345678/9abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefg":
File name too long (36)
rsync: recv_generator: mkdir
"ZIEL/123/4567890abcdefghijklmnopqrstuv/wxyz0123456789abcdefghijklmno/pqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz12345678/90abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq/rstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcd/efghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefg"
failed: File name too long (36)
*** Skipping any contents from this failed directory ***
rsync error: some files could not be transferred (code 23) at
/BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-47/rsync/main.c(992)
[sender=2.6.9]
In diesen Fällen der zu langen Datei- und Verzichnisnamen auf dem
Ziel-Dateisystem (»File name too long (36)«) kann man die Quelldateien
und -verzeichnisse entsprechend kürzend umbenennen und danach erneut
rsync
ausführen, um sie zu synchronisieren. (Wenn bei mir Fehler 36
mit zu langen Datei- und Verzeichnisnamen vorkommt, liegt es eigentlich
immer daran, daß auf dem Ziel (zusätzliche) dateisystem-basierte
Verschlüsselung mit eCryptfs
oder EncFS betrieben wird, bei
denen Datei- und Verzeichnisnamen verschlüsselt und damit länger als im
unverschlüsselten Zustand werden.)
Zeigt rsync -aq QUELLE ZIEL
immer noch zu viele – seitenlange – Fehler
an, mag man die Ausgabe von stderr vielleicht in eine Datei umleiten
und die sich danach in einem Texteditor anschauen:
rsync -ahvz --progress QUELLE ZIEL 2> ~/rsync-errors.log