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

8

J'ai besoin de remonter un répertoire (/ src) en lecture seule dans un autre emplacement (/ dst). Cela peut être fait comme ceci:

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

Cependant, j'aimerais utiliser /etc/fstable montage au moment du démarrage et avoir vu différentes solutions suggérées à 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 générera une erreur lors de la tentative de montage /dst:

mount: /dst not mounted already, or bad option

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

Avez-vous des idées sur la façon d'accomplir cela en plus de placer les mountcommandes dans /etc/rc.local?

mgd
la source

Réponses:

6

Sur les noyaux plus anciens, mount --bindimpossible de créer une vue en lecture seule d'un système de fichiers en lecture-écriture. Le noyau stocke l'état de lecture-écriture du système de fichiers en un seul endroit qui n'est pas dupliqué par le montage de liaison. Les noyaux plus récents le permettent mais nécessitent toujours une mountétape distincte : d'abord lier, puis rendre en lecture seule. Il y a un correctif du noyau pour changer cela, et certaines distributions (comme Debian) l'ont appliqué, mais Ubuntu ne l'a pas fait (du moins pas à partir de 12.04).

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

Sinon, vous pouvez utiliser bindfs à la place. Il s'agit d'un système de fichiers FUSE . Passer par FUSE est légèrement plus lent car il introduit une couche supplémentaire d'indirection. Vous perdez également la prise en charge des métadonnées de fichier étendues telles que les listes de contrôle d'accès. D'un autre côté, la vue en lecture seule aura un type de système de fichiers reconnaissable, ce qui le rend facile à exclure des traversées du système de fichiers (telles que les locatesauvegardes).

L' fstabentrée ressemble à ceci:

bindfs#/src  /dst  fuse perms=a=rX
Gilles 'SO- arrête d'être méchant'
la source
6

Selon cet article LWN , ce comportement s'est glissé dans le noyau autour de la version 2.6.25. En bref, si le système de fichiers cible est rw, lier quelque chose au-dessus ne peut pas le convertir ro.

Dans 2.6.26, ils ont partiellement corrigé les 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 à partir de fstab.


Voici ce que j'essayais dans fstab:

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

Après avoir tiré un mount -a, a /mntété monté mais je pouvais toujours créer des fichiers. Après avoir démarré 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 /etc/rc.localou à écrire un script Upstart super simple qui démarre sur l' mountallévénement (donc cela se produit immédiatement).

Oli
la source
J'ai également lu que mount --bindcela ne peut pas changer les mountoptions (il le dit également sur la page de manuel pour mount). Ce qui est étrange, c'est que les solutions que j'ai énumérées apparemment (selon d'autres sources) fonctionnent par exemple sur Fedora (la 1ère solution). Merci pour l'idée d'utiliser upstart. (BTW je pense que le 2ème "rw" dans votre première ligne aurait dû être un "ro".)
mgd