Mount Mounting schreibgeschützt mit fstab unter Ubuntu?

8

Ich muss ein Verzeichnis (/ src) als schreibgeschützt an einem anderen Speicherort (/ dst) erneut bereitstellen. Dies kann folgendermaßen geschehen:

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

Ich möchte jedoch /etc/fstab, dass die Bereitstellung zum Startzeitpunkt erfolgt, und habe verschiedene Lösungsvorschläge für dieses Problem gesehen, z

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

das lässt leider das verzeichnis gemountet lesen / schreiben auf meinem system und das

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

Dies führt beim Versuch zum Mounten zu einem Fehler /dst:

mount: /dst not mounted already, or bad option

Die oben genannten Lösungen funktionieren angeblich auf verschiedenen Distributionen, aber leider nicht auf Ubuntu 10.04.4 LTS (Kernel 2.6.32-41-Server).

Irgendwelche Ideen, wie dies erreicht werden kann, abgesehen davon, dass die mountBefehle eingegeben werden /etc/rc.local?

mgd
quelle

Antworten:

6

Auf älteren Kerneln mount --bindkann keine schreibgeschützte Ansicht eines Lese- / Schreib-Dateisystems erstellt werden. Der Kernel speichert den Lese- / Schreibstatus des Dateisystems an einem einzigen Ort, der vom Bind-Mount nicht dupliziert wird. Neuere Kernel erlauben dies, erfordern jedoch noch einen separaten mountSchritt: zuerst binden, dann schreibgeschützt machen. Es gibt einen Kernel-Patch, um dies zu ändern, und einige Distributionen (wie Debian) haben ihn angewendet, Ubuntu jedoch nicht (zumindest nicht ab 12.04).

Eine Lösung besteht darin, die schreibgeschützte Ansicht stattdessen aus einem Boot-Skript zu erstellen /etc/fstab, wie Oli erklärt .

Andernfalls können Sie stattdessen bindfs verwenden. Dies ist ein FUSE- Dateisystem. Das Durchlaufen von FUSE ist etwas langsamer, da eine zusätzliche Indirektionsebene eingeführt wird. Sie verlieren auch die Unterstützung für erweiterte Dateimetadaten wie ACLs. Auf der anderen Seite hat die schreibgeschützte Ansicht einen erkennbaren Dateisystemtyp, wodurch es einfach ist, sie von Dateisystemdurchläufen (wie z. B. locateund Sicherungen) auszuschließen .

Der fstabEintrag sieht folgendermaßen aus:

bindfs#/src  /dst  fuse perms=a=rX
Gilles 'SO - hör auf böse zu sein'
quelle
6

Laut diesem LWN-Artikel hat sich dieses Verhalten um Version 2.6.25 in den Kernel eingeschlichen. Kurz gesagt, wenn sich das Zieldateisystem befindet rw, kann das Binden von etwas darüber nicht konvertiert werden ro.

In 2.6.26 wurden teilweise Fehler behoben, sodass Sie ein Remount auslösen können (wie Sie festgestellt haben), aber es gibt immer noch keine Möglichkeit, dies innerhalb von fstab zu tun.


Folgendes habe ich in fstab versucht:

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

Nach einem Brennen mount -a, /mntmontiert war , aber ich konnte immer noch Dateien erstellen. Nach dem Abfeuern sudo mount -o remount /mntwar es schreibgeschützt.

Also ja, ich denke, die sauberste Methode besteht darin, entweder eine Zeile /etc/rc.localeinzugeben oder ein supereinfaches Upstart-Skript zu schreiben, das mit dem mountallEreignis beginnt (also passiert es sofort).

Oli
quelle
Ich habe auch gelesen, dass Optionen mount --bindnicht geändert werden mountkönnen (es steht auch auf der Manpage für mount). Das Seltsame ist, dass die Lösungen, die ich anscheinend (nach anderen Quellen) aufgelistet habe, zB Fedora (die 1. Lösung) funktionieren. Danke für die Idee mit upstart. (Übrigens denke ich, dass das 2. "rw" in Ihrer ersten Zeile ein "ro" gewesen sein sollte.)
mgd