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
?
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
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).