L'utilisation de rsync pendant la mise à jour de la source est-elle sûre?

19

Est-il sûr à utiliser rsynclorsque le système de fichiers source est monté et accessible en écriture, en supposant qu'il peut très bien être modifié pendant que rsync est en cours d'exécution? Je suppose que dans des conditions de course, je ne pourrai pas obtenir les dernières modifications, mais y a-t-il un risque de corruption?

brianmearns
la source
1
Êtes-vous préoccupé par la cohérence (entre les fichiers, comme un fichier de données et certains fichiers de métadonnées associés, le journal ou certains autres) ou la corruption (au sein d'un seul fichier) en cas de changements?
un CVn le
Bon point, je n'avais pas considéré la cohérence entre les fichiers. Je ne pense pas que cela rsyncpuisse vraiment faire quoi que ce soit, seul un instantané peut le faire, mais je suis plus préoccupé par la corruption dans un fichier.
brianmearns

Réponses:

20

L'utilisation rsyncest assez sûre sur les systèmes de fichiers montés en lecture-écriture. Une fois rsyncdémarré, il crée une liste de fichiers, puis commence à copier ces fichiers. Cette liste de fichiers n'est pas mise à jour pendant l'exécution. Les données réelles sont ensuite copiées.

Cela signifie que lorsqu'un fichier change après rsync avoir construit la liste des fichiers, il copie le nouveau contenu. Toutefois, lorsqu'un nouveau fichier est ajouté après rsyncavoir créé sa liste de fichiers, ce nouveau fichier n'est pas copié. Si un fichier est supprimé après rsyncavoir construit la liste des fichiers, rsync avertira qu'il n'a pas pu copier ce fichier. N'oubliez pas que ce rsyncn'est pas un instantané, cela signifie qu'il est difficile de dire à quel moment dans le temps rsyncles données ont été copiées.

Les instantanés du système de fichiers ou du gestionnaire de volumes (par exemple en utilisant ZFS ou LVM), d'autre part, sont créés instantanément et constituent un instantané cohérent du système de fichiers à un moment bien défini qui peut ensuite être copié sur un autre hôte. rsyncn'offre pas ce type de cohérence.

EDIT: Comme d'autres l'ont souligné dans les commentaires, il est possible que rsyncvotre fichier soit corrompu. Lorsque rsync commence à lire un fichier et qu'une application écrit ce fichier en même temps, vous pouvez vous retrouver avec un fichier corrompu.

Marco
la source
2
Ajout d'une note sur les fichiers supprimés. Donnerait probablement à ceci un autre upvote si je pouvais pour la suggestion de gestionnaire de volume + rsync. La seule chose que je pense que cette réponse manque est le comportement de rsync lorsque les fichiers sur la source sont modifiés au milieu de la copie. Je doute que cela gère bien, cependant.
un CVn du
D'accord. Si vous voulez que certains fichiers soient cohérents, vous avez besoin du support du système d'exploitation?
Thorbjørn Ravn Andersen
1
Cette réponse s'applique à condition que l'application côté source écrive d'abord dans un fichier temporaire, puis la déplace en place. Si l'application ouvre un fichier existant pour l'écriture alors que rsync est en train de lire ce fichier, rsync peut copier un mélange corrompu de l'ancienne et de la nouvelle version.
Gilles 'SO- arrête d'être méchant'
@Gilles Merci de l'avoir signalé. J'ai mis à jour ma réponse. Est-ce lié à rsync ou cela se produit-il dans une application qui lit pendant qu'une autre application écrit dans le même fichier?
Marco
1
@Marco Cela arriverait avec n'importe quelle application, à moins que les deux n'utilisent un protocole de verrouillage (unix n'a pas de verrous obligatoires, seulement des verrous consultatifs, c'est-à-dire des verrous qui ne fonctionnent que si tout le monde les utilise). C'est pourquoi le protocole normal pour modifier un fichier si une modification simultanée est un problème est d'écrire un fichier temporaire puis de le déplacer en place.
Gilles 'SO- arrête d'être méchant'