En lugar de usar mount | grep
, me gustaría usar mount -l -t bind
, pero eso no funciona y -t none
muestra todas las monturas.
fuente
En lugar de usar mount | grep
, me gustaría usar mount -l -t bind
, pero eso no funciona y -t none
muestra todas las monturas.
Los montajes de enlace no son un tipo de sistema de archivos, ni un parámetro de un sistema de archivos montado; son parámetros de una operación de montaje . Hasta donde sé, las siguientes secuencias de comandos conducen a estados del sistema esencialmente idénticos en lo que respecta al núcleo:
mount /dev/foo /mnt/one; mount --bind /mnt/one /mnt/two
mount /dev/foo /mnt/two; mount --bind /mnt/two /mnt/one
Entonces, la única forma de recordar qué monturas eran monturas de unión es el registro de mount
comandos que quedan /etc/mtab
. La opción debind
montaje indica una operación de montaje de enlace (que hace que se ignore el tipo de sistema de archivos). Pero no tiene la opción de enumerar solo los sistemas de archivos montados con un conjunto particular de conjuntos de opciones. Por lo tanto, debe hacer su propio filtrado.mount
mount | grep -E '[,(]bind[,)]'
</etc/mtab awk '$4 ~ /(^|,)bind(,|$)/'
Tenga en cuenta que /etc/mtab
solo es útil aquí si es un archivo de texto mantenido por mount
. Algunas distribuciones configuradas /etc/mtab
como un enlace simbólico en su /proc/mounts
lugar; /proc/mounts
es principalmente equivalente /etc/mtab
pero tiene algunas diferencias, una de las cuales no es el seguimiento de los montajes de enlace.
Una parte de la información que retiene el núcleo, pero que no se muestra /proc/mounts
, es cuando un punto de montaje solo muestra una parte del árbol de directorios en el sistema de archivos montado. En la práctica, esto sucede principalmente con los montajes de unión:
mount --bind /mnt/one/sub /mnt/partial
En /proc/mounts
, las entradas para /mnt/one
y /mnt/partial
tienen el mismo dispositivo, el mismo tipo de sistema de archivos y las mismas opciones. La información que /mnt/partial
solo muestra la parte del sistema de archivos en la que está rooteado /sub
es visible en la información del punto de montaje por proceso en /proc/$pid/mountinfo
(columna 4). Las entradas allí se ven así:
12 34 56:78 / /mnt/one rw,relatime - ext3 /dev/foo rw,errors=remount-ro,data=ordered
12 34 56:78 /sub /mnt/partial rw,relatime - ext3 /dev/foo rw,errors=remount-ro,data=ordered
findmnt | fgrep [
como se explica aquí .mount --version
estás usando para registrar cualquierbind
información/etc/mtab
? Estoy usando la versión 2.20.1 y miré las últimas fuentes y en ninguno de los casos veo información de enlace grabada en cualquier lugar que te permita buscarbind
. Por otro lado, lo que sugerí en mi respuesta en realidad enumera los montajes de enlace creados con--bind
labind
opción .</etc/mtab awk …
es compatible con POSIX (no recuerdo si es compatible con Bourne). Por favor revise sus hechos. Puedo confirmar que/etc/mtab
tiene labind
opción para un sistema de archivos montadomount --bind /source /target
en Debian estable (montaje desde util-linux-ng 2.17.2).mount
y/etc/mtab
. Está utilizando Debian estable, que tiene la versión anterior de util-linux-ng; Estoy usando Debian testing que tiene una versión más nueva que ya no parece tener el mismo/etc/mtab
comportamiento, lo que es quizá la razón por @rozcietrzewiacz no vieronbind
en en/etc/mtab
si su distribución también está utilizando una versión más reciente?findmnt
como respuesta. Por cierto, solo funciona si el directorio de destino no es otro punto de montaje. Pruebe por ejemplosudo mount --bind / foo && findmnt | grep foo
Tal vez esto podría hacer el truco:
Ejemplo:
fuente
/
está montado en enlace, por ejemplo, la salida no tiene un[...]
.El núcleo no maneja montajes de enlace diferentes de los montajes normales después del hecho. Lo único difiere en lo que sucede mientras se
mount
ejecuta.Cuando monta un sistema de archivos (por ejemplo, con
mount -t ext4 /dev/sda1 /mnt
) el núcleo (un poco simplificado) realiza tres pasos:-t
o utiliza-t auto
mount
adivina el tipo por usted y proporciona el tipo adivinado al kernel)nodev
por ejemplo, es una opción en el punto de montaje, no en el sistema de archivos. Puede tener un montaje de enlace connodev
y uno sin)Si realiza un montaje de enlace (por ejemplo, con
mount --bind /a /b
), sucede lo siguiente:(Saltaré
mount --move
, porque no es relevante para la pregunta).Esto es bastante similar a cómo se crean los archivos en Linux:
Si crea un enlace duro, sucede lo siguiente:
Como puede ver, el archivo creado y el enlace duro no se pueden distinguir:
Pero , como puede identificar todos los enlaces duros a un archivo al comparar los números de inodo, puede identificar todos los montajes a un sistema de archivos al comparar el mayor: números menores de montajes.
Puede hacerlo con
findmnt -o TARGET,MAJ:MIN
o directamente mirando/proc/self/mountinfo
( consulte la documentación del kernel de Linux para obtener más información ).El siguiente script de Python enumera todos los montajes de enlace. Se supone que el punto de montaje más antiguo con la ruta relativa más corta a la raíz del sistema de archivos montado es el montaje original.
fuente
fuente
Esto es similar a la otra respuesta findmnt, pero evita el problema de formato.
Para mostrar todas las submontajes:
Para mostrar todos los submontes de sistemas de archivos de tipo ext4:
Para mostrar todos los montajes, excepto los submontes:
Para mostrar todos los montajes de sistemas de archivos de tipo ext4, excluyendo los submontajes:
El "-n" elimina los encabezados y el "--list" elimina las líneas del formato "árbol".
Probado en el tramo Debian.
fuente