Quel est l'effet de la copie d'un fichier, par exemple fileA.big (900mb) de l'emplacement B vers l'emplacementC. Si pendant cette opération cp, disons 35% à travers le processus, fileA.big est ajouté avec de nouvelles informations et passe de 900 Mo à 930 Mo.
Quel est le résultat de la copie finale (c'est-à-dire fileA.big à l'emplacementC)?
Que faire si la copie est à environ 70% et que le fichier d'origine est mis à jour mais cette fois tronqué à 400 Mo (c'est-à-dire que la progression de la copie dépasse le point de troncature), quel est le résultat de la copie finale?
Se référant à un OS Linux sur un système de fichiers ext3 / ext4. Pas de magie de l'ombre de volume, etc. Tout simplement vieux cp. La curiosité a été déclenchée par la copie de fichiers couchdb en direct pour la sauvegarde, mais plus intéressé par les scénarios généraux que par les cas d'utilisation spécifiques.
Réponses:
Si
fileA.big
est agrandi pendant la copie, la copie inclura les données qui ont été ajoutées.Si le fichier est tronqué plus court que celui où se trouve actuellement la copie, la copie sera abandonnée là où elle se trouve et le fichier de destination contiendra ce qui a été copié jusqu'au moment où elle a été abandonnée.
la source
Patrick a plus ou moins raison, mais voici pourquoi. La façon dont vous copiez un fichier sous UNIX fonctionne comme ceci:
fileA
.fileB
et bouclez à l'étape 1.Sachant cela, et sachant que c'est aussi simple que cela, nous permet de voir quelques cas d'angle.
Dès que nous trouvons la fin du fichier, la copie est effectuée. Supposons donc que notre fichier augmente pendant la copie, mais augmente plus lentement que nous ne le copions. Le programme de copie continuera à dépasser la taille du fichier d'origine, car au moment où il y arrive, le fichier contient plus. Mais à un moment donné, il rattrape la fin du fichier, et il sait qu'il est à la fin car il ne peut plus lire d'octets pour le moment . Il s'arrête donc là, même si le fichier est sur le point de se développer davantage.
Si le fichier est tronqué, le programme de copie dit "Whoa, j'ai dépassé la fin du fichier!" et quitte.
Et si des morceaux du fichier sont mis à jour au hasard par, disons, un programme de base de données :-), alors votre copie va être un mélange d'anciennes et de nouvelles données, car les données ne sont pas toutes copiées en même temps. Le résultat sera probablement une copie corrompue, c'est pourquoi ce n'est généralement pas une bonne idée de faire des copies de bases de données actives.
(Cela dit, je ne connais pas CouchDB, et il est possible de concevoir une base de données pour résister à ce type de corruption. Mais mieux vaut être absolument sûr.)
la source