bind montagem somente leitura usando fstab no Ubuntu?

8

Eu preciso remontar um diretório (/ src) como readonly em outro local (/ dst). Isso pode ser feito assim:

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

No entanto, gostaria de usar /etc/fstab para que a montagem ocorra no momento da inicialização e tenha visto diferentes soluções sugeridas para esse problema, por exemplo,

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

que infelizmente deixa o diretório montado de leitura / gravação no meu sistema e isso

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

que emitirá um erro ao tentar montar /dst :

mount: /dst not mounted already, or bad option

As soluções acima supostamente funcionam em diferentes distros, mas infelizmente não no Ubuntu 10.04.4 LTS (kernel 2.6.32-41-server).

Alguma idéia de como fazer isso além de colocar os comandos mount em /etc/rc.local ?

    
por mgd 11.05.2012 / 15:49

2 respostas

6

Em kernels mais antigos, mount --bind não pode criar uma visualização somente leitura de um sistema de arquivos de leitura / gravação. O kernel armazena o status de leitura e gravação do sistema de arquivos em um único local que não é duplicado pela montagem de ligação. Os kernels mais recentes permitem isso, mas ainda requerem uma etapa mount separada: primeiro vincular e, em seguida, tornar somente leitura. Existe um patch no kernel para mudar isso, e algumas distribuições (como o Debian) o aplicaram, mas o Ubuntu não (pelo menos não a partir de 12.04).

Uma solução é criar a visualização somente leitura de um script de inicialização, em vez de /etc/fstab , como Oli explica .

Caso contrário, você pode usar bindfs . Este é um sistema de arquivos FUSE . A passagem pelo FUSE é um pouco mais lenta, pois introduz uma camada adicional de indireção. Você também perde o suporte para metadados de arquivos estendidos, como ACLs. Por outro lado, a visualização somente leitura terá um tipo de sistema de arquivos reconhecível, facilitando a exclusão das travessias do sistema de arquivos (como locate e backups).

A entrada fstab tem esta aparência:

bindfs#/src  /dst  fuse perms=a=rX
    
por Gilles 18.10.2012 / 11:44
6

De acordo com este artigo do LWN , esse comportamento se infiltra no Kernel em torno da versão 2.6.25. Em suma, se o sistema de arquivos de destino for rw , a vinculação de algo no topo não poderá convertê-lo em ro .

Em 2.6.26 eles consertaram parcialmente as coisas para que você possa acionar uma remontagem (como você descobriu), mas ainda não há como fazer isso no fstab.

Veja o que eu estava tentando no fstab:

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

Depois de disparar um mount -a , /mnt foi montado, mas ainda consegui criar arquivos. Depois de disparar sudo mount -o remount /mnt , tornou-se somente leitura.

Então, sim, acho que o método mais limpo é ter uma linha em /etc/rc.local ou escrever um script Upstart super-simples que inicia no evento mountall (assim acontece imediatamente).

    
por Oli 11.05.2012 / 16:15