¿Cuáles son las consecuencias para un sistema de archivos ext4 cuando termino un cp
comando de copia escribiendo Ctrl+ Cmientras se está ejecutando?
¿El sistema de archivos se corrompe? ¿El espacio de la partición ocupado por el archivo copiado incompleto todavía se puede usar después de eliminarlo?
Y, lo más importante, ¿es cp
seguro terminar un proceso?
files
filesystems
ext4
file-copy
Seninha
fuente
fuente
Respuestas:
Es seguro hacerlo, pero, naturalmente, es posible que no haya terminado la copia.
Cuando
cp
se ejecuta el comando, realiza syscalls que indican al núcleo que haga copias del archivo. Una llamada al sistema es una función a la que puede llamar una aplicación que solicita un servicio del núcleo, como leer o escribir datos en el disco. El proceso de espacio de usuario simplemente espera a que finalice la llamada al sistema. Si tuviera que rastrear las llamadas, se vería algo así como:Esto se repite para cada archivo que se va a copiar. No se producirá corrupción debido a la forma en que funcionan estas llamadas al sistema. Cuando se ingresan llamadas de sistema como estas, la señal fatal solo tendrá efecto una vez que la llamada de sistema haya finalizado , no mientras se está ejecutando. Debido a esto, matar el proceso por la fuerza solo hará que finalice una vez que finalice la llamada al sistema en ejecución. Esto significa que el núcleo, donde vive el controlador del sistema de archivos, es libre de terminar las operaciones que necesita completar para poner el sistema de archivos en un estado sano. Cualquier E / S de este tipo nunca terminará en la mitad de la operación, lo que las convierte en operaciones atómicas.
Curiosamente, esta es la razón por la cual los comandos como
cp
pueden no terminar inmediatamente cuando son asesinados. Si está copiando un archivo muy grande y lo mata, incluso con SIGKILL, el proceso seguirá ejecutándose hasta que finalice la llamada al sistema actual. Con un archivo grande, esto puede llevar un tiempo, ya que el proceso estará en un estado ininterrumpido.fuente
cp
sí misma. Tiene varias funciones de acceso a archivos que internamente lo usan como valor.cp
SIGKILL después de hacerlo, incluso cuando se trata de archivos grandes ... tal vez la duración de esas operaciones atómicas ininterrumpidas de un proceso es demasiado corta. ¿Funciona la misma explicación para matardd
y otros procesos de lectura / escritura de discos?dd
, eso depende de lo quebs
hayas establecido. Si solo es 512 (el valor predeterminado), entonces debería terminar rápidamente. Si es más grande, puede tardar un poco más.Dado que
cp
es un comando de espacio de usuario, esto no afecta la integridad del sistema de archivos.Por supuesto, debe estar preparado para que al menos un archivo no se haya copiado por completo si elimina un
cp
programa en ejecución .fuente
CAP_SYS_RAWIO
en Linux o el equivalente en otros sistemas operativos) que les dan acceso directo al dispositivo subyacente del sistema de archivos (por ejemplosudo dd if=/dev/urandom of=/dev/sda1
) pueden causar todo tipo de estragos.cp
, es probable que se corrompe de un acabadocp
demasiado ...