Montaje de discos USB automáticamente (Cómo funciona)

12

Antecedentes: estoy tratando de montar un disco usb como de solo lectura, pero mi instalación de ubuntu lo está montando rw cuando conecto el disco.

Puedo desmontar el disco manualmente y volver a montarlo manualmente como solo lectura con los comandos umount y mount, pero eso no es divertido. ¿Podría alguien darme una explicación rápida sobre cómo se realizan automáticamente los montajes usb en un sistema Linux típico (udev? Los antecedentes históricos también son buenos) y tal vez cómo puedo ajustar este proceso para que me permita leer el disco ro?

Gracias.

Editar: estoy usando gnome si eso ayuda en absoluto.
Edit2: en mi apuro olvidé proporcionar un poco más de información. Así es como se ve el disco desde la salida de 'mount'.

/dev/sdb1 on /media/LaCie type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)

Edit3: Esto también puede ser relevante a su manera. En la salida de montaje también tengo lo siguiente:

gvfs-fuse-daemon on /home/fletcher/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=fletcher)  

Pensé que esto podría haber estado relacionado con el montaje fuseblk anterior, pero lo que descubrí fue esto.

Gvfs es el sistema de archivos virtual de Gnome. Es un sistema de archivos virtual construido sobre el kernel vfs ya existente. gvfs usa la biblioteca GIO (que es una API VFS) para acceder a archivos, dispositivos, ubicaciones de red remotas, etc. En este caso anterior ('gvfs-fuse-daemon') gvfs está usando FUSE para montar archivos / ubicaciones / dispositivos. Esto es esencialmente lo que sucede cuando monta una conexión de red remota en Nautilus. Utilizará FUSE para montar la ubicación (¿dentro?) Del directorio .gvfs, y luego se comunicará con la capa del sistema de archivos virtual gnome para comunicarse con el nuevo montaje.

Básicamente, esta estructura permite al usuario montar dinámicamente nuevas ubicaciones e interactuar con ellas a través de nautilus.

Solo como referencia: FUSE es un sistema de archivos de espacio de usuario, también conocido como permite al usuario ejecutar mount incluso cuando ese usuario no es root)

Entonces, ¿dónde me deja eso? Bueno, el disco LaCie se está montando con el tipo fuseblk. Esto es solo un dispositivo de bloque montado con fusible. Entonces, algún demonio detectó automáticamente la unidad cuando se enchufó y luego siguió adelante y ejecutó el fusible para montar mi dispositivo de bloqueo. Entonces, ¿qué demonio es esto y cómo está configurado (supongo que es algo de gnomo interno) es la pregunta más importante. Una pregunta secundaria es cómo el sistema detectó automáticamente un disco usb recientemente insertado, pero creo que eso es un poco aparte y un nivel mucho más bajo aquí (léase: udev?).

Enlaces:

pensador
fuente
¿hay una entrada fstab para el sistema de archivos / media / LaCie y / o el dispositivo / dev / sdb1? ¿Está / dev / sdb1 etiquetado de todos modos (e2label / dev / sdb1)?
Tok
No, no hay entrada fstab. Creo que está etiquetado ya que se monta en / media / LaCie. Necesito instalar ntfslabel para saberlo, pero estoy a punto de dejar el trabajo. También aparece en mi escritorio como LaCie.
fthinker

Respuestas:

3

Traté de hacer esto en mi computadora y funciona :)

Primero obtengo un nombre para mi dispositivo:

ls -l /proc/disk/by-id/

En mi caso es / proc / disk / by-id / usb-09a6_8001

Agregué esta línea en / etc / fstab:

/dev/disk/by-id/usb-09a6_8001   /media/macle ext2 ro,users 0 2

Y está funcionando, cuando conecto mi llave USB, está montada en ro y es propiedad de mi usuario.

profano
fuente
Gracias profy :) Pero el objetivo principal de mi pregunta es aliviar la extrema frustración que siento cada vez que me veo obligado a comprender cómo funcionan los dispositivos automount y usb. Estoy aquí para descifrar la magia que hay detrás de estos complejos sistemas. Además, usar dispositivos fstab y usb es un poco complicado porque no siempre se garantiza que se conecten al inicio.
fthinker
1
No sé cómo funciona, pero estoy bastante seguro de que los dispositivos nuevos son detectados por las reglas de udev, eche un vistazo a /etc/udev/rules.d/ y /lib/udev/rules.d/.
profy
2

Como dijo Ulrich Dangel, los udiscos deberían ser la referencia hoy en día. Todavía tengo que ver cómo se notifica (udev-> dbus-> udisks?), Pero manualmente se puede usar para montar un dispositivo con las opciones que necesita.

Udisks habla con polkit para ver qué puede hacer un usuario con los volúmenes. Supongo que aquí, pero si pudiéramos encontrar un lugar para establecer propiedades para un disco / dispositivo con nombre, debería funcionar.

Con udisksctl, su usuario debería poder montar el dispositivo con las opciones que necesita, algo como esto:

udisksctl mount -b / dev / sdxy -o ro / mountpoint

Sin embargo, no sé dónde colocar las opciones.

ACTUALIZACIÓN: Siguiendo las sugerencias de Ulrich, fui a la utilidad de disco Gnome y logré lo que necesita, pero no estoy seguro de si es la solución más elegante o no. Estoy usando Kororaa 17 (basado en Fedora 17) con Cinnamon + Gnome3, fui a la utilidad "Discos" y modifiqué las opciones de montaje para mi unidad usb, agregué "ro" y guardé.

Agrega una entrada a fstab (ahí es donde no lo veo como una solución elegante, creo que debería permanecer como una configuración de usuario, no en todo el sistema), conecto el disco y se monta automáticamente en el punto de montaje seleccionado con opciones Ahorré en la utilidad de discos Gnome.

triples
fuente
¿Qué quieres decir con que tienes que ver cómo se notifica? ¿Qué paso falta?
Ulrich Dangel
Y no es udev→dbus→udisksinoudev/uevent→udisk→dbus
Ulrich Dangel
Quise decir que no estaba realmente seguro y quería verificarlo, pero ahora veo que no estaba 100% equivocado.
tripledes
[strike] Por favor, muestre la línea que se agregó a fstab. Me gustaría confirmar lo que creo que es. [/ Strike] ¿Entonces la línea fstab coincide con la respuesta de @profy? es decir, con la roopción.
invertir el
-1

Sobre el tema de cómo el núcleo detecta el hardware, aquí hay un artículo muy agradable sobre lo que sucede .

En resumen:

  • el kernel escanea constantemente los buses de su PC y asigna dispositivos al sistema de archivos virtual, generalmente debajo /sys/.
  • el núcleo envía un mensaje de que hay nuevo hardware disponible para udev, que:
    • procesar las reglas de udev en el dispositivo
    • enlace simbólico en el dispositivo /dev/
    • cargar controladores de dispositivo
    • notificar al usuario el espacio del dispositivo a través de dbus

En este punto, el dispositivo está listo para ser utilizado por el espacio de usuario. Gvfs y FUSE son sistemas de archivos de espacio de usuario.

invertir
fuente
No, por lo udevgeneral, no notifica que las aplicaciones a través de dbusesto son realizadas por aplicaciones de terceros. Si lo usa qdbus --system, no verá ningún nombre udev. Por lo general, las solicitudes solo se suscriben ueventso envían sus propias reglas
Ulrich Dangel
Gracias por señalar eso @ulrich. Mi resumen ofrece un esquema muy básico que excluye muchos pasos intermedios. Consulte el artículo vinculado para obtener detalles valiosos.
invertir el
2
el artículo también es falso ya que normalmente no hay encuestas involucradas para monitorear los autobuses
Ulrich Dangel