Rsync -avzHP suit les liens physiques au lieu de les copier en tant que liens physiques

13

J'utilise rsnapshot pour créer des sauvegardes horaires / quotidiennes / hebdomadaires / mensuelles de mon partage "professionnel". Maintenant, j'essaie de copier tout le répertoire de sauvegarde sur un disque externe en utilisant rsync.

J'ai utilisé cette commande / paramètres dans une session d'écran (oui, le rsync-exclude.txt se trouve dans le répertoire à partir duquel je lance la commande)

rsync -avzHP --exclude-from 'rsync-exclude.txt' /share/backup/ /share/eSATADisk1/backup/;

Le tout fonctionne sur un QNAP TS-439, le disque interne est un disque unique (pas de RAID) formaté EXT4, le disque externe est formaté EXT3.

Ce qui se passe est: Rsync suit chaque lien dur et copie le fichier réel au lieu de recréer le lien dur mis à jour sur le disque externe. Je ne l'ai pas reconnu tout de suite, donc le disque dur externe a fini par être mis à la poubelle avec xxx copies des mêmes fichiers.

Ce que je veux réaliser, c'est: Copier toute la structure de fichiers générée par rsnapshot sur le disque externe en gardant les liens physiques pour économiser de l'espace. Remarque: Cela ne doit pas nécessairement être fait à l'aide de rsync.

Merci pour vos idées et votre temps. J'apprécierais votre aide, grand temps.

Mise à jour: j'ai appris que rsnapshot n'utilise pas de liens symboliques, il utilise des liens durs, donc j'utilise maintenant l'option -H qui devrait préserver la structure de liens durs selon Rsnapshot vers plusieurs destinations (ou maintenir la structure de liens durs) mais cela ne fonctionnera toujours pas ... Qu'est-ce que j'oublie ici?

Mise à jour 2: j'ai trouvé une autre opinion / déclaration sur ce sujet ici: rsync avec --hard-links se bloque Steven Monday suggère de ne pas essayer de rsync les structures de gros fichiers contenant des liens durs , car cela absorbe beaucoup de mémoire et est une tâche difficile pour rsync. Donc, probablement une meilleure solution serait de créer un .img de la structure de données que j'essaie de sauvegarder. Qu'est-ce que tu penses?

woerndl
la source
Je fais exactement la même chose que vous! +1. Va essayer l'approche
DD

Réponses:

10

La rsyncde commande -H(ou --hard-linksoption) sera, en théorie, faire ce que vous essayez d'accomplir, ce qui est, en bref: pour créer une copie de votre système de fichiers qui préserve la structure liée dur de l'original. Comme je l'ai mentionné dans ma réponse à une autre question similaire , cette option est vouée à l'échec une fois que votre système de fichiers source a dépassé un certain seuil de complexité des liens matériels.

L'emplacement précis de ce seuil peut dépendre de votre RAM et du nombre total de liens durs (et probablement d'un certain nombre d'autres choses), mais j'ai trouvé qu'il était inutile d'essayer de le définir avec précision. Ce qui importe vraiment , c'est que le seuil soit trop facile à franchir dans des situations du monde réel, et vous ne saurez pas que vous l' avez franchi, jusqu'au jour où vous essayez de diriger un rsync -aHou un cp -aqui se débat et échoue finalement .

Ce que je recommande est le suivant: Copiez votre système de fichiers lié de manière très dure en une seule unité, pas en tant que fichiers. Autrement dit, copiez l'intégralité de la partition du système de fichiers en un seul gros objet Il existe un certain nombre d'outils disponibles pour ce faire, mais le plus omniprésent est dd.

Avec le firmware d'origine, votre NAS QNAP devrait également avoir ddintégré fdisk. Avec fdisk, créez sur le lecteur de destination une partition au moins aussi grande que la partition source. Ensuite, utilisez ddpour créer une copie exacte de votre partition source sur la partition de destination nouvellement créée.

Pendant que la ddcopie est en cours, vous devez vous assurer que rien ne change dans le système de fichiers source, de peur de vous retrouver avec une copie corrompue sur la destination. Une façon de le faire est de umountretourner à la source avant de commencer le processus de copie; une autre façon consiste à monter la source en mode lecture seule.

Steven Monday
la source
Supposons que je n'utilise jamais de liens durs en dehors du répertoire des sauvegardes rsnapshot, vais-je toujours avoir des ennuis? Je suis vraiment à court d'espace sur le disque dur mais je veux faire des sauvegardes rsnapshot. Actuellement, mon disque est plein.
Sridhar Sarnobat
Je pense avoir frappé la situation que vous avez signalée. J'ai un répertoire de sauvegarde avec de nombreux instantanés créés avec rsync. Il contient de nombreux fichiers avec de nombreux liens durs. L'utilisation totale du disque est d'environ 200G. Je le copie sur une autre partition en utilisant 'rsync -avH'. Mais après 4 (ou 5?) Jours et nuits, le processus de copie est toujours en cours. Je suppose que rsync est complètement dérouté par le nombre total de liens durs dans le répertoire source.
Guangliang
Dans Ubuntu 18.04 c'est --hard-links(avec un 's').
nobar
1

-l est pour les liens symboliques, pourquoi ferait-il quelque chose pour les liens durs?

(Désolé, c'est une réponse et non un commentaire, je n'ai pas encore de droits de commentaire et cette réponse avait besoin d'une réponse)

Une autre note qui devrait être un commentaire: est-ce que tout le matériel est natif ou êtes-vous sur une machine virtuelle, montage réseau?

Éditer

ignorer mon commentaire précédent concernant la raison pour laquelle vous utilisez des liens physiques, j'ai raté le rsnapshotcommentaire.

Il serait utile d'avoir un test qui teste d'abord la synchronisation entre deux disques locaux du disque local, puis contre votre disque distant. Ce petit test montre l' -Hoption wokrs comme prévu. L' -ioption pour lsaffiche les inodes, montrant ainsi que les liens ont été conservés, sans copies supplémentaires.

$ rsync -avzHP src/ dest
sending incremental file list
created directory dest
./
file111_prime.txt
           9 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/3)
file111.txt => file111_prime.txt

sent 156 bytes  received 59 bytes  430.00 bytes/sec
total size is 18  speedup is 0.08

$ ls -liR
.:
total 8
414044 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 dest
414031 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 src

./dest:
total 8
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

./src:
total 8
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

Un test ultérieur rsync -avzHP src/ host:/tmpsur un hôte distant a toujours maintenu les liens physiques

nhed
la source
Vous avez tout à fait raison, après quelques recherches supplémentaires, j'ai découvert que rsnapshot n'utilise pas de liens symboliques mais des liens physiques. J'ai mis à jour ma question en conséquence. Ainsi, la solution devrait utiliser -H et copier tout le répertoire (comme je le fais) pour préserver la structure de liens durs construite par rsnapshot mais cela ne fonctionne toujours pas. Lorsque je commence à copier tout ce qui se passe dans le quotidien, 0 est copié, pas seulement les fichiers modifiés. // Et oui, j'utilise un Qnap TS-439 et un Lacie Drive externe pour cette opération.
woerndl
Pouvez-vous réduire ce problème en ayant un répertoire source de test et un répertoire de destination de test avec seulement 2 fichiers dans la source, liés ensemble? De plus, comment déterminez-vous que le lien n'a pas été géré correctement et enfin, pourquoi utiliser des liens physiques, si vous lisez le texte long car -Hdans la page de manuel, vous pouvez voir qu'il y a plusieurs mises en garde, qui me diraient, essayez se tenir à l'écart des
liens physiques
Je vais configurer un cas de test et vous tenir au courant. Merci beaucoup pour vos idées jusqu'à présent.
woerndl
1

C'est un long plan, mais si vous ne trouvez pas une autre solution, je vous suggère d'essayer de formater la clé USB en EXT4. Cela pourrait peut-être être le problème: https://bugzilla.samba.org/show_bug.cgi?id=7670

Étant donné suffisamment de liens matériels dans un dossier source et un volume de destination suffisamment petit, la copie avec rsync --hard-links peut échouer. Rsync échoue en épuisant le nombre maximum de liens durs sur la destination <...> le vrai problème n'est pas rsync mais plutôt le système de fichiers sous-jacent.

Motsel
la source
Merci pour votre participation à mon problème! On dirait que c'est lié à la samba. Mon disque est directement connecté au NAS.
woerndl
1
Salut, non, ce problème n'est pas lié à Samba. C'est la maison du site rsync: rsync.samba.org
Motsel
0

Avez-vous essayé d'ajouter l' -loption?

Je sais que la page de manuel indique qu'elle est incluse dans -amais les pages de manuel ne sont pas toujours exactes à 100%.

Ladadadada
la source
Merci pour vos commentaires. J'ai dû mettre à jour ma question: Rsnapshot n'utilise pas de liens symboliques mais des liens durs pour construire sa structure de sauvegarde incrémentielle. Donc -l n'aidera pas de toute façon, mais -H devrait, ce qui malheureusement ne fonctionne pas non plus.
woerndl