Come appare il messaggio
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)Cause frequenti
- L'utente rsync non può leggere file o directory di origine.
- I file cambiano durante la copia, per esempio log, cache o file di database.
- Attributi come ACL o xattr non possono essere applicati sulla destinazione.
- Il filesystem di destinazione non salva permessi o proprietari, come FAT o NFS con
root_squash. - Un file sparisce tra la lista e il trasferimento, frequente con i log ruotati.
Verifica
- Exit code e statistiche
rsync -a --stats src/ dst/ 2>&1 | tail -n 15; echo "exit=$?" - Mostra solo le righe di errore
rsync -a src/ dst/ 2>&1 | grep -E 'rsync: |failed|Permission denied' | head -n 20 - Prova senza scrivere
rsync -an --itemize-changes src/ dst/ | head -n 20 - Controlla i permessi sul percorso
namei -l /backup/data
Soluzione
- Leggi le singole righe di errore: il code 23 è il riepilogo, il motivo è subito sopra.
- Verifica i permessi di lettura ed esegui rsync con l'utente giusto, senza forzare root.
- Con file che cambiano, fai prima un backup coerente del database oppure escludi le directory con
--exclude. - Trasferisci gli attributi solo se la destinazione li supporta:
-asenza-AX, o usa un filesystem adatto. - Nei backup il 23 è un fallimento anche se quasi tutto è stato copiato. Non considerarlo un successo.
Domande frequenti
Posso ignorare il code 23?
Solo se sai esattamente quali file mancano. --itemize-changes e le righe di errore lo mostrano; nei backup il 23 è un fallimento.
Perché succede solo alla seconda esecuzione?
Perché i file sono cambiati durante la copia o gli attributi non sono stati applicati sulla destinazione.