Quelles sont les conséquences pour un système de fichiers ext4 lorsque je termine une cp
commande de copie en tapant Ctrl+ Cpendant son exécution?
Le système de fichiers est-il corrompu? L'espace de la partition occupé par le fichier copié incomplet est-il toujours utilisable après sa suppression?
Et, plus important encore, mettre fin à un cp
processus est-il une chose sûre à faire?
files
filesystems
ext4
file-copy
Seninha
la source
la source
Réponses:
C'est sûr à faire, mais naturellement vous n'avez peut-être pas terminé la copie.
Lorsque la
cp
commande est exécutée, elle effectue des appels système qui demandent au noyau de faire des copies du fichier. Un syscall est une fonction qu'une application peut appeler et qui demande un service au noyau, comme lire ou écrire des données sur le disque. Le processus de l'espace utilisateur attend simplement la fin de l'appel système. Si vous deviez suivre les appels, cela ressemblerait à quelque chose comme:Cela se répète pour chaque fichier à copier. Aucune corruption ne se produira en raison du fonctionnement de ces appels système. Lorsque syscalls comme ceux - ci sont entrés, le signal fatal prendra effet qu'après l'syscall a fini , pas en cours d' exécution. Pour cette raison, la suppression forcée du processus entraînera sa fin uniquement après la fin de l'appel système en cours d'exécution. Cela signifie que le noyau, où réside le pilote du système de fichiers, est libre de terminer les opérations qu'il doit effectuer pour mettre le système de fichiers dans un état sain. Aucune E / S de ce type ne se terminera jamais au milieu de l'opération, ce qui en fera des opérations atomiques.
Fait intéressant, c'est pourquoi des commandes comme
cp
peuvent ne pas se terminer immédiatement lorsqu'elles sont tuées. Si vous copiez un très gros fichier et le tuez, même avec SIGKILL, le processus se poursuivra jusqu'à la fin de l'appel système actuel. Avec un fichier volumineux, cela peut prendre un certain temps, car le processus sera dans un état ininterrompu.la source
cp
elle-même. Il dispose de diverses fonctions d'accès aux fichiers qui l'utilisent en interne comme valeur.cp
après SIGKILLing, même en traitant de gros fichiers ... peut-être que la durée de ces opérations atomiques ininterrompues d'un processus est trop courte. La même explication fonctionne-t-elle pour la destructiondd
et d'autres processus de lecture / écriture sur disque?dd
, cela dépend de ce quebs
vous lui avez fixé. Si ce n'est que 512 (la valeur par défaut), cela devrait se terminer rapidement. S'il est plus grand, cela peut prendre un peu plus de temps.Étant donné qu'il
cp
s'agit d'une commande de l'espace utilisateur, cela n'affecte pas l'intégrité du système de fichiers.Vous devez bien sûr être prêt à ce qu'au moins un fichier n'ait pas été copié complètement si vous tuez un runnning
cp
programme en cours d' .la source
CAP_SYS_RAWIO
sous Linux ou l'équivalent dans d'autres systèmes d'exploitation) qui leur donnent un accès direct au périphérique sous-jacent du système de fichiers (par exemplesudo dd if=/dev/urandom of=/dev/sda1
) peuvent causer toutes sortes de ravages.cp
, il serait probablement corrompu à la fincp
aussi ...