Pourquoi rsync n'utilise-t-il pas le transfert delta pour les fichiers locaux?

25

J'ai une grande image iso qui est actuellement téléchargée par un client torrent avec la réservation d'espace activée: cela signifie que la taille du fichier ne change pas tandis que certains morceaux dans (4 Mib) changent constamment en raison d'un téléchargement.

À 90% de téléchargement, je fais la synchronisation initiale pour gagner du temps plus tard:

$ rsync -Ph DVD.iso / media / another-hdd /
envoi d'une liste de fichiers incrémentielle

DVD.iso
       2.60G 100% 40.23MB / s 0:01:01 (xfer # 1, à vérifier = 0/1)

envoyé 2,60 G octets reçu 73 octets 34,59 M octets / sec
la taille totale est de 2,60G, l'accélération est de 1,00

Ensuite, lorsque le fichier est entièrement téléchargé, je rsync à nouveau:

total size is 2.60G   speedup is 1.00

Speedup = 1 indique que le transfert delta n'a pas été utilisé, bien que 90% du fichier n'ait pas changé, le répertoire cible se trouve sur un autre FS et la copie prend plusieurs minutes. Pourquoi n'essaye-t-il pas d'accélérer le transfert?! Comment puis-je forcer rsyncà utiliser le transfert delta?

kolypto
la source
6
Ce que vous faites n'a aucun sens. Le but de rsync est d'accélérer le transfert de fichiers sur le réseau, pas localement. Afin de trouver les différences, il doit lire à la fois la source et la destination. Dans le temps qu'il faut pour lire la destination localement pour trouver les différences, vous pouvez tout aussi bien faire une copie normale. Téléchargez simplement le fichier vers la destination en premier lieu au lieu de le copier.
psusi
1
Il n'utilise donc pas delta-xfer car, en travaillant localement, il est plus rapide de copier que de calculer des hachages? Si oui - postez la réponse plz :)
kolypto
9
La lecture peut être plus rapide que l'écriture sur un disque local dans certaines circonstances. Il peut également réduire l'usure d'un SSD. C'est certainement une question valable et la réponse m'est très utile.
HRJ
2
@psusi en dehors du commentaire de HRJ ci-dessus, considérez également le cas lorsque le fichier cible a été redéfini (par exemple sur btrfs ou ocfs2). La réduction des écritures pendant la synchronisation peut faire une énorme différence dans l'utilisation globale de l'espace.

Réponses:

20

Selon la page de manuel, psusi a raison:

-W, --whole-file : Le transfert peut être plus rapide si cette option est utilisée lorsque la bande passante entre les machines source et de destination est supérieure à la bande passante sur le disque (en particulier lorsque le "disque" est en fait un système de fichiers en réseau). Il s'agit de la valeur par défaut lorsque la source et la destination sont spécifiées en tant que chemins locaux, mais uniquement si aucune option d'écriture par lots n'est en vigueur.

liganic
la source
10
Oh merci! J'ai mis cette ligne :) Pour activer le delta-trasfer, utilisez-no-W
kolypto
1
Sur mon système -no-Wne fonctionne pas uniquement l'option longue -no-whole-file. Ma raison d'avoir besoin de ce commutateur est lorsque je configure une sauvegarde et que j'ai de gros fichiers (par exemple des images) qui n'ont pas le même temps de modification. Il est BEAUCOUP plus rapide, l'accélération est de 163,26, pour synchroniser ces fichiers en utilisant le transfert delta sur mon système de fichiers local.
Jesse the Wind Wanderer
6
@JessetheWindWanderer, l'option longue est --no-whole-file(veuillez noter le double --au début).
Eddie C.
Merci Eddie C. Je modifierais mon commentaire si je pouvais comprendre comment :-(
Jesse the Wind Wanderer
17

La réponse directe à cette question est:

Utilisez l' --no-Windicateur pour forcer la compression delta, peu importe local ou distant.

Mise à jour: Il semble qu'il y ait plus dans l'histoire. Le delta compressionsemble être activé uniquement entre le processus de réception et de transmission de rsync. Lors de la sortie du fichier vers le système de fichiers, il rsyncpeut toujours écrire le ou les fichiers entiers, même avec la compression delta activée.

Voir l'enquête "Wakan Tanka" ici .

HRJ
la source
2
--no-Wtransférez toujours le dossier entier dans mon cas. Veuillez consulter unix.stackexchange.com/questions/291156/…
Wakan Tanka
@WakanTanka C'est intéressant! J'ai mis à jour ma réponse.
HRJ
3

Par défaut, rsync crée d'abord une nouvelle copie du fichier cible, puis la remplace, pour diverses raisons de sécurité. Vous pouvez remplacer cela en spécifiant --inplaceavec --no-whole-file. Cela indique à rsync d'effectuer une modification sur place du fichier cible, en acceptant les divers risques (généralement mineurs pour cette situation) comme indiqué dans la page de manuel.

kartik_subbarao
la source
0

Par défaut, rsynccrée une copie du fichier à destination, puis remplace atomiquement l'original par la nouvelle copie. Cela se fait pour des raisons de sécurité. Ce que vous recherchez, c'est l' --inplaceoption, qui ne rsyncmodifiera que les parties du fichier de destination qui ont changé par rapport à la source.

Pour le cas d'utilisation de l'OP, je recommande également de désactiver la pré-allocation, afin qu'une copie éparse puisse être synchronisée, ce qui sera beaucoup plus rapide. Pour les téléchargements, ne vous inquiétez pas de la fragmentation, sauf si vous utilisez un système de fichiers très ancien comme VFAT. Les fichiers multimédias en particulier ne sont pas lus à la performance maximale des supports de stockage, donc leur défragmentation est un effort inutile.

Pour copier votre répertoire de téléchargements avec parcimonie sur le volume de destination, je recommande ces indicateurs et opérations, dans cet ordre:

rsync --ignore-existing -vxaHAXS /source /destination
rsync --inplace -vxaHAX /source /destination

La première passe copiera peu de nouveaux fichiers vers la destination La deuxième passe mettra à jour les fichiers existants sur place, en copiant uniquement les modifications

Comme il effectue des copies delta clairsemées et sur place, vous pouvez l'exécuter à plusieurs reprises sans encourir beaucoup d'E / S supplémentaires. Même si vous avez 20 torrents en cours d'exécution simultanément, cela n'amplifiera pas les écritures à destination, ni ne déformera les volumes source / dest.

Wil
la source
Que voulez-vous dire par "peu" ici, Wil? Pour autant que je sache, cela ne reflète pas vraiment le sens réel du mot.
Julius
@Julius: cela signifie exactement ce que cela implique: copiez les fichiers avec une prise en charge complète de l'allocation parcimonieuse, par exemple, vos films HDR de 40 Go ne prendront pas plus d'espace à la destination qu'à la source. Idem avec les images de disque VirtualBox. Comme indiqué, le PO devra désactiver la pré-allocation pour que cela fonctionne.
Wil