web-dev-qa-db-fra.com

lier le montage en lecture seule à l’aide de fstab sur Ubuntu?

Je dois remonter un répertoire (/ src) en lecture seule à un autre emplacement (/ dst). Cela peut être fait comme ça:

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

Toutefois, je souhaiterais utiliser /etc/fstab pour que le montage ait lieu au démarrage et avoir différentes solutions suggérées pour résoudre ce problème, par exemple.

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

qui laisse malheureusement le répertoire monté en lecture/écriture sur mon système et cela

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

qui produira une erreur en essayant de monter /dst:

mount: /dst not mounted already, or bad option

Les solutions ci-dessus fonctionnent supposément sur différentes distributions, mais malheureusement pas sur Ubuntu 10.04.4 LTS (noyau 2.6.32-41-server).

Des idées pour accomplir ceci en dehors de placer les commandes mount dans /etc/rc.local?

8
mgd

Sur les noyaux plus anciens, mount --bind ne peut pas créer une vue en lecture seule d'un système de fichiers en lecture-écriture. Le noyau stocke le statut de lecture-écriture du système de fichiers dans un emplacement unique qui n'est pas dupliqué par le montage lié. Les nouveaux noyaux le permettent, mais nécessitent tout de même une étape mount distincte: d'abord lier, puis en lecture seule. Il y a un correctif de noyau pour changer cela, et certaines distributions (comme Debian) l'ont appliqué, mais Ubuntu ne l'a pas (du moins pas à partir de 12.04).

Une solution consiste à créer la vue en lecture seule à partir d'un script de démarrage à la place de /etc/fstab, comme Oli explique .

Sinon, vous pouvez utiliser bindfs à la place. Ceci est un système de fichiers Fuse . Fuse est légèrement plus lent car cela introduit une couche supplémentaire d’indirection. Vous perdez également la prise en charge des métadonnées de fichier étendues telles que les ACL. D'un autre côté, la vue en lecture seule aura un type de système de fichiers reconnaissable, ce qui facilitera l'exclusion des traversées de système de fichiers (telles que locate et les sauvegardes).

L'entrée fstab ressemble à ceci:

bindfs#/src  /dst  Fuse perms=a=rX
6
Gilles

Selon cet article de LWN , ce comportement s'est insinué dans le noyau autour de la version 2.6.25. En bref, si le système de fichiers cible est rw, la liaison d'un élément sur le dessus ne peut pas le convertir en ro.

Dans la version 2.6.26, ils corrigent partiellement certaines choses afin que vous puissiez déclencher un remontage (comme vous l'avez découvert), mais il n'y a toujours aucun moyen de le faire depuis fstab.


Voici ce que j'essayais dans fstab:

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

Après avoir déclenché un mount -a, /mnt a été monté, mais je pouvais toujours créer des fichiers. Après avoir déclenché Sudo mount -o remount /mnt, il est devenu en lecture seule.

Donc oui, je pense que la méthode la plus propre consiste à avoir une ligne dans /etc/rc.local ou à écrire un script Upstart super simple qui commence sur l'événement mountall (donc cela se produit immédiatement).

6
Oli