GNU/Linux >> Tutoriales Linux >  >> Linux

Mover un archivo mientras está en uso:¿cómo funciona?

La entrada del directorio es solo un puntero a un inodo. El inodo contiene la metainformación sobre el archivo (aparte del nombre) y punteros a los datos del archivo (si los hay). Cuando comienzas a copiar un archivo, obtienes un identificador para el inodo.

El sistema operativo mantiene un recuento de referencias al inodo. Mientras haya referencias al inodo, se conservan el inodo y los datos del archivo. Una vez que se eliminan todas las referencias al inodo, se libera el inodo y el espacio requerido por el archivo.

Como tiene el archivo abierto para copiarlo, se mantendrá hasta que su proceso cierre el archivo. Esto debería ocurrir cuando finalice la transferencia de archivos y ocurrirá si falla el proceso de copia. Si la transferencia del archivo falla a la mitad y ha eliminado todos los enlaces físicos al archivo, no podrá reiniciar la transferencia con éxito.

EDITAR:Como han señalado otros, los movimientos de archivos en el mismo dispositivo se realizan sin mover los datos. En su lugar, se crea una nueva entrada de directorio en el directorio de destino y se elimina la entrada de directorio original.

Es posible tener varias entradas de directorio para el mismo archivo. Estos se llaman enlaces duros. Se crean creando una nueva entrada de directorio para el archivo sin eliminar la entrada original. El inodo del sistema de archivos tiene un recuento de referencias para registrar el número de entradas de directorio que apuntan al archivo.

EDIT2:si el proceso falla o se elimina, el archivo se eliminará limpiamente ya que el recuento de acceso a la memoria se reducirá a cero. Esta es la acción que ocurre cuando el programa finaliza normalmente.

En el caso de una falla de energía u otro apagado desordenado del sistema, el disco necesitará un fsck (comprobación del sistema de archivos) antes de que pueda montarse por completo. Según el estado del inodo en disco y las estructuras de directorio, se recuperará el espacio, el archivo permanecerá en el directorio o se realizará una nueva entrada en el lost+found directorio. Los resultados dependerán de qué cambios se hayan vaciado en el disco o escrito en el diario de sistemas de archivos.


Como explicó Matt Jenkins, el sistema operativo (el sistema de archivos) realiza un seguimiento de los archivos que las aplicaciones mantienen abiertos. Mientras un proceso mantenga un archivo abierto, sus datos permanecerán en el disco (aunque se hayan eliminado y ya no estén visibles o accesibles para otros programas).

Tenga en cuenta que una consecuencia de esto es que el espacio ocupado por un archivo solo puede recuperarse una vez que el último proceso que lo usó lo haya cerrado. Esa es una pregunta frecuente para las operaciones del sistema de archivos Linux/Unix:"el comando 'df' dice que la partición está llena, mientras que 'du' informa que hay espacio libre" (consulte, por ejemplo, http://batleth.sapienti-sat.org/projects/FAQs/ext3- preguntas frecuentes.html). Si necesita liberar espacio, no es suficiente eliminar archivos grandes (por ejemplo, archivos de registro), también debe asegurarse de que ningún proceso los mantenga abiertos (generalmente un problema con los archivos de registro).


Es bastante simple en realidad. El archivo mantiene una lista de referencias:procesos que acceden al archivo. Cuando elimina el archivo, simplemente elimina la lista del directorio, pero no el archivo en sí. Los programas que aún tienen el archivo abierto aún pueden acceder a él. El archivo solo se elimina cuando todos los programas que acceden a él lo cierran.

Además, al mover el archivo, si está dentro del mismo sistema de archivos, el archivo en realidad no se mueve como tal, solo cambia el puntero al directorio en el que se encuentra el archivo.


Linux
  1. ¿Qué es NGINX? ¿Como funciona?

  2. ¿Cómo funciona Awk '!a[$0]++'?

  3. ¿Cómo funciona la punta adhesiva?

  4. Ssh:¿cómo funciona TCP-keepalive en Ssh?

  5. UNIX/Linux:Cómo usar Sticky Bit en directorios y archivos

Cómo usar Rsync

¿Cómo funciona el intercambio de memoria en Linux?

Cómo usar el comando lsof en Linux

¿Cómo usar gzip en Linux?

Cómo usar el comando shred de Linux

¿Cómo funciona /proc/*?