legare il montaggio in sola lettura usando fstab su Ubuntu?


8

Devo rimontare una directory (/ src) come di sola lettura in un'altra posizione (/ dst). Questo può essere fatto in questo modo:

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

Tuttavia, vorrei utilizzare /etc/fstabper avere il montaggio in fase di avvio e ho visto diverse soluzioni suggerite a questo problema, ad es

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

che purtroppo lascia la directory montata in lettura / scrittura sul mio sistema e questo

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

che genererà un errore quando si tenta di montare /dst:

mount: /dst not mounted already, or bad option

Le soluzioni di cui sopra presumibilmente funzionano su diverse distribuzioni, ma sfortunatamente non su Ubuntu 10.04.4 LTS (kernel 2.6.32-41-server).

Qualche idea su come realizzare questo oltre a inserire i mountcomandi /etc/rc.local?

Risposte:


6

Sui kernel più vecchi, mount --bindnon è possibile creare una vista di sola lettura di un filesystem di lettura-scrittura. Il kernel memorizza lo stato di lettura / scrittura del filesystem in un unico posto che non è duplicato dal bind mount. I kernel più recenti lo consentono, ma richiedono comunque un mountpassaggio separato : prima associa, quindi esegui la sola lettura. C'è una patch del kernel per cambiarla, e alcune distribuzioni (come Debian) l'hanno applicata, ma Ubuntu non l'ha fatto (almeno non dalla 12.04).

Una soluzione è quella di creare la vista di sola lettura da uno script di avvio anziché da /etc/fstab, come spiega Oli .

Altrimenti, puoi usare invece bindfs . Questo è un filesystem FUSE . Passare attraverso FUSE è leggermente più lento in quanto introduce un ulteriore livello di riferimento indiretto. Si perde anche il supporto per metadati di file estesi come ACL. Il rovescio della medaglia, la vista di sola lettura avrà un tipo di filesystem riconoscibile, rendendo facile l'esclusione dagli attraversamenti del filesystem (come locatee backup).

La fstabvoce è simile alla seguente:

bindfs#/src  /dst  fuse perms=a=rX

6

Secondo questo articolo LWN , questo comportamento si è inserito nel kernel intorno alla versione 2.6.25. In breve, se il filesystem di destinazione è rw, l'associazione di qualcosa in alto non può convertirlo in ro.

In 2.6.26 hanno parzialmente risolto le cose in modo da poter innescare un rimontaggio (come hai scoperto) ma non c'è ancora modo di farlo da dentro fstab.


Ecco cosa stavo provando in fstab:

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

Dopo aver sparato a mount -a, è /mntstato montato ma sono ancora riuscito a creare file. Dopo aver sparato sudo mount -o remount /mnt, è diventato di sola lettura.

Quindi sì, penso che il metodo più pulito sia quello di avere una riga /etc/rc.localo scrivere uno script Upstart semplicissimo che inizia mountallsull'evento (quindi succede immediatamente).


Ho anche letto che mount --bindnon è possibile modificare le mountopzioni (lo dice anche nella pagina man di mount). La cosa strana è che le soluzioni che ho elencato apparentemente (secondo altre fonti) funzionano ad esempio su Fedora (la prima soluzione). Grazie, per l'idea di utilizzo upstart. (A proposito, penso che il secondo "rw" nella tua prima riga avrebbe dovuto essere un "ro".)
mgd,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.