¿se une el montaje de solo lectura usando fstab en Ubuntu?

8

Necesito volver a montar un directorio (/ src) como de solo lectura en otra ubicación (/ dst). Esto se puede hacer así:

$ sudo mount --bind /src /dst
$ sudo mount -o remount,ro /dst

Sin embargo, me gustaría utilizar /etc/fstabel montaje durante el arranque y he visto diferentes soluciones sugeridas para este problema, por ejemplo

/src  /dst    none  bind            0 0
/src  /dst    none  remount,bind,ro 0 0

que desafortunadamente deja el directorio montado leer / escribir en mi sistema y esto

/src  /dst    none  bind            0 0
/dst  /dst    none  remount,bind,ro 0 0

que emitirá un error al intentar montar /dst:

mount: /dst not mounted already, or bad option

Las soluciones anteriores supuestamente funcionan en diferentes distribuciones, pero desafortunadamente no en Ubuntu 10.04.4 LTS (kernel 2.6.32-41-server).

¿Alguna idea de cómo lograr esto además de colocar los mountcomandos /etc/rc.local?

mgd
fuente

Respuestas:

6

En los núcleos anteriores, mount --bindno se puede crear una vista de solo lectura de un sistema de archivos de lectura y escritura. El kernel almacena el estado de lectura y escritura del sistema de archivos en un solo lugar que no está duplicado por el montaje de enlace. Los núcleos más nuevos permiten esto, pero aún requieren un mountpaso separado : primero enlazar, luego hacer solo lectura. Hay un parche del kernel para cambiar eso, y algunas distribuciones (como Debian) lo han aplicado, pero Ubuntu no lo ha hecho (al menos no a partir del 12.04).

Una solución es crear la vista de solo lectura desde un script de arranque en lugar de /etc/fstab, como explica Oli .

De lo contrario, puede usar bindfs en su lugar. Este es un sistema de archivos FUSE . Pasar por FUSE es un poco más lento ya que introduce una capa adicional de indirección. También pierde la compatibilidad con metadatos de archivos extendidos, como las ACL. Por otro lado, la vista de solo lectura tendrá un tipo de sistema de archivos reconocible, lo que facilitará la exclusión de los recorridos del sistema de archivos (como locatey copias de seguridad).

La fstabentrada se ve así:

bindfs#/src  /dst  fuse perms=a=rX
Gilles 'SO- deja de ser malvado'
fuente
6

Según este artículo de LWN , este comportamiento se coló en el Kernel alrededor de la versión 2.6.25. En resumen, si el sistema de archivos de destino es rw, vincular algo en la parte superior no puede convertirlo ro.

En 2.6.26, arreglaron parcialmente las cosas para que pueda activar un remontaje (como ha descubierto), pero todavía no hay forma de hacerlo desde fstab.


Esto es lo que estaba intentando en fstab:

/home/oli/Desktop/testmount  /mnt none bind,ro

Después de disparar mount -a, /mntse montó, pero aún podía crear archivos. Después de disparar sudo mount -o remount /mnt, se convirtió en solo lectura.

Entonces, sí, creo que el método más limpio es tener una línea /etc/rc.localo escribir un script Upstart súper simple que comience en el mountallevento (por lo que sucede de inmediato).

Oli
fuente
También leí que mount --bindno se pueden cambiar las mountopciones (también lo dice en la página del manual mount). Lo extraño es que las soluciones que enumeré aparentemente (según otras fuentes) funcionan, por ejemplo, en Fedora (la primera solución). Gracias por la idea de usar upstart. (Por cierto, creo que el segundo "rw" en su primera línea debería haber sido un "ro".)
mgd