Je lisais plusieurs guides sur la façon de combiner des instantanés btrfs avec rsync pour créer une solution de sauvegarde efficace avec l'historique. Cependant, tout dépend si rsync --inplace
ne modifie que les parties des fichiers qui ont réellement changé, ou s'il écrase le fichier entier séquentiellement. S'il écrit tout le fichier, il semble que btrfs créera toujours une nouvelle copie du fichier, ce qui rendrait l'idée beaucoup moins efficace.
21
rsync
lit le fichier entier et cherche et met à jour uniquement les parties nécessaires, btrfs copiera uniquement ces blocs mis à jour. Mais sirsync
lit et écrit tout le fichier, ce sera un problème.rsync
sait non seulement qu'il peut éviter d'écrire l'intégralité du fichier, il y parvient sans le copier complètement sur le net. Petit programme intelligent.Réponses:
Si vous passez rsync deux chemins locaux, il utilisera par défaut "--whole-file", et non delta-transfer. Donc, ce que vous recherchez est "--no-whole-file". Vous obtenez également un transfert delta si vous avez demandé '-c'.
Voici comment vous pouvez vérifier:
Ensuite, touchez un fichier et resynchronisez
Vous pouvez vérifier qu'il a réutilisé l'inode avec "ls -li", mais notez qu'il a envoyé 64 Ko entiers. Réessayez avec --no-whole-file
Maintenant, vous n'avez envoyé que 494 octets. Vous pouvez utiliser strace pour vérifier davantage si l'un des fichiers a été écrit, mais cela montre qu'il a au moins utilisé le transfert delta.
Notez (voir les commentaires) que pour les systèmes de fichiers locaux,
--whole-file
est supposé (voir la page de manuel de rsync). D'un autre côté, à travers un réseau--no-whole-file
est supposé, donc tout--inplace
seul se comportera comme--inplace --no-whole-file
.la source
--inplace
impliquer--no-whole-file
?--no-whole-file
par défaut de toute façon?--inplace
cela n'implique pas--no-whole-file
la version de rsync que j'utilisais en 2013, mais vous êtes invités à répéter cette expérience avec votre propre version de rsync.inplace
ne s'agit pas de `` rechercher des blocs identiques / différents '', il s'agit simplement d'écraser le fichier existant immédiatement, à partir du décalage 0. (sinon, une copie temporaire est créée, puis seulement l'ancien fichier cible supprimé et la copie temporaire renommée . Il est probablement jugé "plus sûr" de conserver l'ancien fichier aussi longtemps que possible, si le processus est interrompu. Bien sûr, cela est pire pour les performances, la consommation de stockage maximale (pensez aux gros fichiers), éventuellement la fragmentation ...) ...--no-whole-file
implique toujours--inplace
, sinon la majeure partie de son gain de performance aurait disparu. Impossible de trouver cela documenté, cependant ...Voici la réponse définitive, je suppose, en citant la bonne partie du manuel:
la source
--inplace
écrase uniquement les régions qui ont changé. Utilisez-le toujours lors de l'écriture sur Btrfs.la source
-vvv
montre qu'il saute les blocs correspondantsL'algorithme de transfert delta de rsync détermine si le fichier entier est transmis ou uniquement les parties qui diffèrent. Il s'agit du comportement par défaut lors de la synchronisation d'un fichier entre deux machines pour économiser de la bande passante. Cela peut être remplacé par le
--whole-file
(ou-W
) pour forcer larsync
transmission du fichier entier.--inplace
détermine sirsync
, pendant le transfert, créera ou non un fichier temporaire. Le comportement par défaut consiste à créer un fichier temporaire. Cela donne une mesure de sécurité en ce que si le transfert est interrompu, le fichier existant dans la machine de destination reste intact / intact.--inplace
remplace ce comportement et indiquersync
de mettre à jour le fichier existant directement. Avec cela, vous courez le risque d'avoir un fichier incohérent dans la machine de destination si le transfert est interrompu.la source
Depuis la page de manuel:
Cela m'amène à croire qu'il écrase le fichier dans son intégralité - j'imagine qu'il serait presque impossible pour rsync de fonctionner autrement.
la source
Le travail théorique sur rsync en place est décrit dans cet article .
Référence de l'article: D. Rasch et R. Burns. Rsync sur place: synchronisation des fichiers pour les appareils mobiles et sans fil. Conférence technique annuelle USENIX, piste FREENIX, 91-100, USENIX, 2003.
Depuis le lien:
Il semble donc que ce soit les détails techniques de ce que rsync --inplace fait. Selon le début de l'article:
Comme il ressort clairement de la réponse de @ dataless , cela implique que
--inplace
le même espace de stockage est utilisé, mais il peut toujours copier le fichier entier dans cet espace. Plus précisément, lorsque des copies sont effectuées à partir de / vers des systèmes de fichiers locaux, rsync assume l'--whole-file
option. Mais lorsqu'elle se trouve sur des systèmes en réseau, elle assume l'--no-whole-file
option.la source