Problème rsync (debian stretch)

Bonjour à tout le monde,
Je pense que ça n’a pas de lien avec ma version de Debian (quoique) mais j’ai un souci de synchronisation rsync que je n’arrive pas à comprendre et encore moins à contourner.
En faisant un backup d’une clé usb vers un dd externe,

rsync -av --ignore-existing /source/ /destination/

… je me retrouve avec beaucoup de fichiers et dossiers non sauvegardés renvoyant ce type d’erreurs :

… failed : Invalid argument (22)

Et quand il s’agit d’un répertoire, il s’ajoute :

*** Skipping any content from this failed directory ***

Et j’ai enfin un code 23 (transferts partiels) qui arrive en bout de course.

J’ai vérifié au niveau des permissions, pas de souci, je suis bien propriétaire des fichiers et dossiers. J’ai essayé, au cas où :

–no-owner --no-group

La source est en ext2 et la destination en fat32.
Les fichiers qui coincent sont de tous types : docs, musique, vidéo, logs etc.

Si quelqu’un a une idée ou une piste, je suis plus que preneur !
Merci !

Salut,

le “invalid argument” fait penser à un nom de fichier avec des espaces, ou en tout cas un nom que rsync interprète “mal”. Tu as des exemples de noms de fichiers avec cette erreur ?

EDIT: ce serait peut-être dû au fait que les noms de fichiers temporaires créés par rsync sur la destination ne correspondent pas au nom de fichier d’origine sur la source, à cause de la différence de système de fichiers entre la source et la destination

Oui j’y ai pensé mais il y a des deux, avec et sans espaces.

Oui c’est ce qui me paraît le plus probable. As-tu une idée pour résoudre ce problème (je précise que je ne peux pas formater la destination) ?

Extrait du manuel de rsync :

22
Erreur lors de l’allocation des tampons de mémoire principaux

Tu as essayé d’autres options de la commande rsync ?
Tu devrais peut-être prendre un des fichiers pour lesquels tu as l’erreur, et essayer d’autres options. Notamment en virant -a qui est une combinaison de -rlptgoD, et en remplaçant par juste les options nécessaires.
J’ai lu ici que les timestamps en FAT32 sont très différents de ceux en ext et que l’option -c pourrait fonctionner. Un des contributeurs conseille d’utiliser rsync -vrc source dest (la plupart des options combinées dans -a ne sont pas prises en charges par FAT32).

Sinon, pour contourner, tu peux créer une archive des fichiers que tu veux synchroniser, et synchroniser l’archive (rsync local vers une archive sur le volume en ext2, puis rsync de l’archive vers le volume en FAT32).

Merci pour les infos.
L’argument

-c

résout le problème sur certains fichiers mais d’autres renvoient toujours :

Invalid argument (22)

Ils font d’ailleurs pas mal turbiner la machine cette fois-ci (avant d’avoir le retour d’erreur).
J’attends que ça termine et je relancerai avec uniquement

rsync -vrc

Sinon je croyais que l’argument

-a

… était justement une fonction particulière d’archivage, tu me conseilles de passer par un :

tar

?

Oui, avec cette option rsync vérifie si les fichiers sont vraiment différents (en comparant les empreintes) entre la source et la destination, au lieu de se fier juste à la date de modification du fichier.

D’après le man, -a = -rlptgoD
-r = recursive
-l = préserver les liens symboliques
-p = préserver les permissions
-t = conserver les dates de modification
-g = conserver le groupe
-o = conserver le propriétaire
-D = préserver les fichiers périphériques et les fichiers spéciaux

Je ne sais pas pourquoi le man présente cette option -a comme une option d’archivage, en tout cas elle n’a pas l’air de faire des archives tar ou autres.
L’idée proposée c’est juste pour n’avoir qu’un seul fichier à synchroniser entre ext2 et FAT32, et en espérant qu’il n’y ait pas d’erreur sur ce fichier.

Bon, à part quelques liens symboliques inutiles, il m’a fallu reprendre à la main chacun des fichiers car ils contenait des guillemets !!!
""
Et rsync n’aime pas les guillemets !^^

(Tout faire par un archivage intermédiaire, comme l’a suggéré @Sputnik93 semble bien plus simple et efficace.)