Rsync : possibilité de reprendre au bloc près
luckydu43 Messages postés 4748 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tou.te.s :D,
Question simple, mais réponse par forcément.
J'utilise souvent rsync pour m'assurer que j'ai bien les bonnes données entre la source et la cible. Souvent je copie des gros fichiers et parfois il peut arriver que la connexion s'interrompe (coupure de courant, de VPN) et je ne sais pas si c'est possible de reprendre la synchro au point où elle en était. Je ne veux pas dire au niveau fichier, ça je sais que c'est le rôle de ce programme mais au niveau "bloc" (si je ne me trompe pas dans la terminologie).
En bref, comment reprendre une synchro en perdant le moins de temps à refaire ce qui a déjà été fait ?
Un autre outil mieux adapté ?
Si quelqu'un.e peut m'éclairer sur le sujet et m'accorder un peu de son temps ce serait vraiment chouette.
Avec adelphité,
lnj
Linux / Firefox 145.0
2 réponses
Bonjour
Point lecture un excellent topic à ce sujet (lien).
En résumé, ajouter les options --partial et --append-verify
--partial pour garder la partie commencée, --append-verify pour, en cas de coupure, lancer un checksum des 2 parties partielles avant de poursuivre.
Si envie de gagner le maximum de temps au risque d'une corruption, --append seul sans verify.
Sinon, rclone (lien) vaut le coup d'œil.
Retour rapide car je ne comprends pas tout.
Avant j'utilisais par habitude et simplification rsync -aP ce qui me permettait de synchroniser les fichiers en mode mirroir (-a = -rlptgoD) en affichant la progression (-P = --partial --progress)
Avec -aP, je viens de constater c'est que si le fichier source n'existe pas dans cible, il est nommé en fichier caché .[source].AAA (AAA étant une chaine unique aléatoire) et si j'interromps il est renommé en [source] donc NON caché mais à priori il semble inutilisable pour une future reprise.
Si je relance ma synchro, il créée un nouveau fichier caché avec un autre AAA MAIS si j'interromps à nouveau cette fois, le fichier est supprimé au bout d'un certain temps donc je ne peux pas le reprendre (si j'utilise sync je vois que la commande mets du temps à s'achever) et le premier fichier téléchargé est conservé.
En revanche si je complète -aP par --append-verify cette fois il me créée directement le fichier source dans cible, il est NON caché et NON suffixé par AAA. Si j'interromps le fichier reste en l'état. Si je reprends la synchro reprend là où elle en était.
Pour l'exemple j'ai essayé de synchroniser par VPN un fichier de 20GB (vHD au format qcow2 pour virtualisation Qemu/KVM) en interrompant le processus. Quand je relance le téléchargement il met ~2min pour reprendre là où il en était (dans mon cas, le débit mesuré avec iperf est de 2.45MB/s par le VPN).
Pour info voici la commande (ici je limite à 1000 octets/s pour alléger le trafic du réseau source et en passant par le port de rebond 10022 de mon système VPN) :
rsync -aP --append-verify \ -e "ssh -p 10022" \ --bwlimit=1000 \ root@vpn.local:/root/vhd.qcow2 /root/
Okay, le -aP fait ce qu'on attendait MAIS on n'a plus le fichier temp pendant la copie.
J'ai creusé la doc et on a une "incompatibilité" disons.
- --append-verify permet la future reprise rapidement MAIS DANS le fichier de destination directement, sans qu'il soit "caché" façon .file_name_AAA
- il y a une option --partial-dir mais c'est incompatible avec --append-verify comme expliqué ici (lien) :
- partial files don't get written to the partial-dir until the connection fails. Then any incomplete temporary files get moved to the partial-dir. Upon resuming, the partial files are written to in-place.
- Ce faisant, ce déplacement modifie les checksum de blocs puisque sur des blocs différents.
- ll y a plein d'autres topics concernent ce sujet, je ne mets pas les liens mais pas mal sont concernés et en parlent.
Je vois encore une solution :
- Faire une copie dans un répertoire caché avec un . comme .temprsync :
rsync -aP --append-verify \ -e "ssh -p 10022" \ --bwlimit=1000 \ root@vpn.local:/root/vhd.qcow2 /root/.temprsync
-
Si réussite :
mv .temprsync/* ./
Oh la réponse n'a pas tardé à venir, je te remercie :) je vais étudier tout ça et ferais un retour