Est gzip
atomique?
Que se passe-t-il si j'arrête le gzip
processus alors qu'il est en train de compresser un fichier?
Si ce n'est pas atomique, et si j'ai déjà appuyé sur Ctrl + C sur un gzip *.txt
processus, comment puis-je reprendre en toute sécurité?
(Je ne suis pas seulement curieux de savoir comment reprendre, mais aussi de savoir s'il gzip
est spécifiquement atomique.)
command-line
gzip
Vendetta
la source
la source
CTRL+Z
place deCTRL+C
, puis tuez ou reprenez le travail interrompu (il répond par un nombren
[-[n]+ Stopped-- gzip ...
] puis vous pouvez reprendre avec%n
ou avecfg
, ou avecbg
... de la même manière vous pouvez le tuer aveckill %n
).Réponses:
Non. Il crée un fichier compressé puis supprime l'original non compressé.
Plus précisément, il ne compresse pas un fichier in situ et il y a une période de temps pendant laquelle le fichier est compressé où,
Si vous arrêtez le
gzip
processus avec un signal capturable (SIGINT
de Ctrl C, par exemple), il nettoiera les fichiers partiellement créés. Sinon, selon le point où il est arrêté, vous pouvez vous retrouver avec un fichier partiellement compressé à côté de l'original intact.Vous supprimez la version partiellement compressée (si elle existe toujours) et redémarrez le
gzip
.la source
SIGINT
ouSIGTERM
pour lesquelsgzip
installe des gestionnaires de signaux qui suppriment le fichier de sortie).gzip
flux moyen, il y a toujours une petite condition de course. Alternativement, vous pouvezgzip
toujours indiquer de remplacer les fichiers cibles, ce qui évite la plupart des problèmes de nettoyage.Ce n'est pas atomique (l'API du système de fichiers Unix ne fournit vraiment aucun moyen d'effectuer des opérations atomiques qui affectent plusieurs fichiers), mais il est à sécurité intégrée. Le fichier compressé est un nouveau fichier, il n'écrase pas l'original et il ne supprime pas le fichier d'origine tant qu'il n'a pas terminé de créer le fichier compressé (cela peut en fait provoquer un problème si vous n'avez pas assez d'espace disque pour les deux fichiers).
S'il obtient une erreur ou si vous interrompez la compression, le fichier d'origine restera inchangé. Le fichier compressé partiel sera généralement supprimé.
Il n'y a aucun moyen de le reprendre au milieu, vous recommencez tout simplement depuis le début.
la source
sed -i
).Vous n'avez pas à vous en préoccuper car
gzip
crée un nouveau.gz
fichier, le remplit avec le contenu compressé, puis supprime le fichier d'origine. Donc, si vous arrêtez le processus au milieu, cela n'affectera pas votre fichier d'origine.la source
.txt
les fichiers déjà traités avec succès pargzip
ont été remplacés par.txt.gz
des fichiers compressés, vous pouvez donc réexécuter en toute sécuritégzip *.txt
- seuls les fichiers qui n'ont pas encore été traités seront compressés.Le fichier qui était en cours de traitement par gzip au moment où vous avez appuyé sur Ctrl-C ne sera pas modifié - gzip ne le remplacera qu'après une compression réussie.
la source
Non, c'est très anatomique. Cela peut vous causer de gros problèmes si vous compressez un fichier qui est parfois ajouté, comme un journal Web.
Gzip lit, crée le fichier .gz (avec l'horodatage actuel), copie l'horodatage du fichier d'origine, puis supprime l'original.
Certaines interruptions peuvent laisser un
.txt.gz
fichier inachevé et inachevé juste à côté du.txt
fichier. Cela crée alors un problème d'intégrité des données: quel est le vrai fichier? Est-ce.txt.gz
? Ou.txt
fichier incomplet / tronqué ? Outxt.gz
, et un fichier nouvellement créé.txt
?(Ce dernier se produit lorsque vous allez dans votre répertoire de journaux HTTP et que vous y allez
gzip *
).Je trouve généralement qu'il est prudent de régler cela à la main, à moins que vous ne sachiez exactement ce qui s'est passé parce que vous venez de le faire.
Heureusement, gzip fonctionne généralement en série, vous ne devriez donc avoir ce problème qu'avec un seul fichier. La mise en parallèle de gzip n'est pas une bonne idée - même si elle utilisera le processeur plus complètement, elle écrasera le disque, le forçant à lire plusieurs fichiers à la fois, ralentissant considérablement tous les gzip. SSD ou RAMdisk, d'autre part ...
la source