Cómo averiguar fácilmente si un dispositivo de bloque (o una parte de él) está montado de alguna manera

10

Quiero saber cuál es la forma más fácil de determinar (sin privilegios de root) si un dispositivo de bloque (por ejemplo sdb) o alguna parte de él está montado (y qué parte de él).

La comprobación /proc/mountsde sdb no es suficiente porque sdbLVM puede utilizar una de sus particiones. Puede verificar, /sys/block/sdb/sdb*/holders/pero obtiene dm-xentradas que deben resolverse a /dev/mappernombres para verificar /proc/mounts. Posible pero si hay una solución más fácil ... (que no debería requerir privilegios de root)

Hauke ​​Laging
fuente
2
Tengo curiosidad, ¿no estabas tratando de averiguar si el dispositivo está montado? * / titulares y * / * / titulares es lo suficientemente bueno como para decirle que está montado si el dispositivo no existe en la tabla / proc / monturas. ¿Por qué necesitas resolverlo más? es decir, cryptsetup lo agrega a los titulares, lo que indica que no debería estar jugando con la unidad ... incluso si / dev / mapper no está montado o causa daños en el cifrado. Es solo que se está montando internamente a través de un controlador. Además, no olvide comprobar / sys / block / sdb / titulares, ya que la unidad podría "retenerse" sin particiones.
Rahly

Respuestas:

12

Esto es esencialmente una cuestión de revisar una bolsa completa de cajas de esquina.

  • Una unidad puede aparecer en / proc / mounts
  • Se puede usar una unidad como intercambio (use / proc / swaps)
  • Un disco puede ser parte de un pv LVM activo (use pvdisplay)
  • Una unidad puede ser parte de un grupo RAID dm-mapper (use / proc / mdstat)
  • Una aplicación puede acceder directamente a una unidad (por ejemplo, Oracle admite escribir directamente en una unidad o partición en lugar de un sistema de archivos) (use el fusor)
  • Se puede acceder directamente a una unidad mediante una máquina virtual (usar fusor)
  • Una unidad puede ser referenciado por un dispositivo de bucle de retorno (por ejemplo: mount /dev/sda -o offset=1M /foo) (uso losetup -a)

Estos son solo los ejemplos con los que se me ocurrió dar un minuto y medio para pensarlo. Estoy seguro de que hay una docena más.

Creo que este último ejemplo es el más interesante y pocas personas lo saben. Le permite montar un sistema de archivos sin usar particiones. Simplemente especifique el desplazamiento inicial y Linux creará de forma transparente un dispositivo de bucle invertido. El ejemplo anterior produce lo siguiente:

# cat /proc/mounts
...
/dev/loop0 /foo ext4 relatime,data=ordered 0 0

# losetup -a
/dev/loop0 [0005]:2048 (/dev/sda), offset 1048576

¿Por qué harías eso? Por lo general, implica situaciones en las que las cosas han salido terriblemente mal anteriormente.

También tenga en cuenta que con la función de espacio de nombres ahora en la línea principal (ver no compartir ), diferentes procesos pueden tener diferentes vistas sobre lo que está montado y lo que no. Aquí las cosas comienzan a ponerse un poco rojas.

tylerl
fuente
1

Hay muchas más formas de montar dispositivos, todos se pueden combinar, por lo que es frecuente que usted lo descubra.

es decir, lo que usa lvm: pvdisplay

Por lo tanto, debe incluir también nfs, cifs, raid, loop, crypt, etc. Un buen punto de partida es siempre /proc/mounts, como ya lo mencionó.


fuente