GNU/Linux >> Tutoriales Linux >  >> Linux

¿Se garantiza que dos subdirectorios con la misma raíz estén en el mismo sistema de archivos montado?

No están garantizados eso. Es posible que /foo/oldPath es un punto de montaje.

Sin embargo, esto se puede comprobar fácilmente ejecutando mount | grep 'on /foo/oldPath' Ninguna salida debe indicar que el oldPath directorio no es un punto de montaje.

Deberá tener más cuidado si utiliza directorios anidados, ya que puede tener un punto de montaje en cualquier lugar.

No estoy seguro de si esto está automatizado, pero vale la pena señalar que el tercer campo desde el montaje (separado por espacios) es el punto de montaje para cada línea, por lo que utilizar un cut -d ' ' -f 3 podría usarse para extraer la ruta (si necesita verificar que no es solo una subcadena de otro punto de montaje, como /foo/oldPath/nested/mountPoint )

Si desea traducir esto a código C/C++, puede usar system("mount | grep 'on /foo/oldPath'") , pero no juraré por eso. Es posible que tenga más suerte en StackOverflow para obtener más detalles de implementación allí si los necesita.


No debe intentar esto, por una variedad de razones (detalladas en las otras respuestas):/foo/oldPath podría ser en sí mismo un punto de montaje, o un sistema de archivos superpuesto podría estar presente y evitar mover archivos. Incluso puede encontrar montajes vinculados, en archivos individuales, lo que también causará problemas al cambiar el nombre de los archivos.

En lugar de tratar de determinar de antemano si los archivos se pueden renombrar, debe intentar renombrarlos y solucionar los errores. rename devolverá -1 si ocurre un error, y errno se establecerá en EXDEV si el cambio de nombre no es posible debido a problemas de montaje cruzado. Luego puede proceder de otra manera (copiar y borrar).

En general, para determinar si dos objetos del sistema de archivos están en el mismo sistema de archivos, debe ejecutar stat en ellos y mire el identificador del dispositivo (el st_dev campo en struct stat ). Dos objetos del sistema de archivos en el mismo sistema de archivos tendrán el mismo identificador de dispositivo.


Tenga en cuenta que cuando ejecuta overlayfs, no puede confiar en rename() de directorios preexistentes.

Creo que normalmente podría ignorar esta posibilidad, si no está escribiendo una herramienta de administración de archivos de propósito general... Por ejemplo, un administrador de paquetes... en cuyo caso aparentemente no lo consideraría reparable (por razones de atomicidad) y desearía confiar en el nuevo redirect_dir formato de overlayfs.

Así que esto es más una nota pedante para hacerle saber que esto es Linux, no cumplimos con POSIX si no queremos, y "garantizado" es una palabra muy fuerte :).

https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt

A menos que la función "redirect_dir" esté habilitada, cambiar el nombre (2) en un directorio inferior o fusionado fallará con EXDEV.

Overlayfs ya no coincide con las expectativas habituales de un sistema de archivos Unix en otros detalles:

Los objetos que no son directorios (archivos, enlaces simbólicos, archivos especiales de dispositivo, etc.) se presentan desde el sistema de archivos superior o inferior, según corresponda. Cuando se accede a un archivo en el sistema de archivos inferior de una manera que requiere acceso de escritura, como abrir para acceso de escritura, cambiar algunos metadatos, etc., el archivo se copia primero del sistema de archivos inferior al sistema de archivos superior (copiar)...

La operación copy_up esencialmente crea un archivo nuevo e idéntico y lo traslada al nombre anterior. Cualquier archivo abierto que haga referencia a este inodo accederá a los datos antiguos.


Linux
  1. Deshabilitar el inicio de sesión con la cuenta raíz

  2. ¿Cómo editar archivos del sistema con el editor Kate?

  3. Verifique los permisos de archivos de Linux con ls

  4. Cómo crear y montar el sistema de archivos Btrfs (explicado con ejemplos)

  5. ¿Cuáles son las opciones de montaje para mejorar el rendimiento del sistema de archivos ext4 en Linux?

Introducción al sistema de archivos de Linux

Asegure Linux con el archivo Sudoers

Comando de montaje de Linux con ejemplos

¿Cómo puedo diferenciar dos secciones del mismo archivo?

¿Cuál es la mejor manera de determinar que dos rutas de archivo se refieren al mismo objeto de archivo?

¿El único usuario de un sistema *nix debe tener dos cuentas?