So sieht die Meldung aus
rsync: [sender] send_files failed to open "/var/log/app/current.log": Permission denied (13)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1338)Häufige Ursachen
- Der rsync-Benutzer darf Quelldateien oder Verzeichnisse nicht lesen.
- Dateien ändern sich während des Laufs, etwa Logs, Caches oder Datenbankdateien.
- Attribute wie ACLs oder xattrs lassen sich am Ziel nicht setzen.
- Das Ziel-Dateisystem kann Rechte oder Besitzer nicht speichern, etwa FAT oder NFS mit
root_squash. - Eine Datei verschwindet zwischen Dateiliste und Übertragung, häufig bei rotierten Logs.
Prüfen
- Exitcode und Statistik ansehen
rsync -a --stats src/ dst/ 2>&1 | tail -n 15; echo "exit=$?" - Nur die Fehlerzeilen zeigen
rsync -a src/ dst/ 2>&1 | grep -E 'rsync: |failed|Permission denied' | head -n 20 - Testlauf ohne Schreiben
rsync -an --itemize-changes src/ dst/ | head -n 20 - Rechte auf dem Pfad prüfen
namei -l /backup/data
Lösung
- Die einzelnen Fehlerzeilen lesen: code 23 ist die Zusammenfassung, der Grund steht direkt darüber.
- Leserechte prüfen und rsync als passenden Benutzer starten, statt root zu erzwingen.
- Bei sich ändernden Dateien die Datenbank vorher konsistent sichern oder Verzeichnisse mit
--excludeauslassen. - Attribute nur übertragen, wenn das Ziel sie kann:
-aohne-AX, oder ein passendes Dateisystem verwenden. - Bei Backups ist 23 ein Fehlschlag, auch wenn fast alles übertragen wurde. Nicht als Erfolg werten.
Häufige Fragen
Kann ich code 23 ignorieren?
Nur wenn du genau weißt, welche Dateien fehlen. --itemize-changes und die Fehlerzeilen zeigen es; bei Backups ist 23 ein Fehlschlag.
Warum passiert das nur beim zweiten Lauf?
Weil Dateien sich während des Laufs geändert haben oder Attribute am Ziel nicht gesetzt werden konnten.