o que monta -o remontar, ro / realmente fazer (sob o capô)

7

Para remontar um sistema de arquivos montado para somente leitura, posso usar o seguinte comando:

mount -o remount,ro /foo

Isso é usado, por exemplo, na seqüência de desligamento, onde o sistema de arquivos raiz ( / ) é remontado como somente leitura, logo antes de halt/reboot ser chamado.

O que, na verdade, o remontando para somente leitura faz? Altera algum "sinalizador" no kernel, de modo que as gravações são negadas?

Quão difícil seria escrever o próprio programa que não faz mais nada além de remontar um determinado sistema de arquivos para somente leitura?

    
por Martin Vegter 11.04.2015 / 13:08

1 resposta

9

A montagem ou remontagem de um sistema de arquivos é feita usando o mount(2) syscall. Ao remontar, isso leva o local de destino (o ponto de montagem), os sinalizadores a serem usados na operação de montagem e quaisquer dados extras usados para o sistema de arquivos específico envolvido. Ao remontar somente leitura, os sinalizadores usados são MS_RDONLY e MS_REMOUNT ; você também deve fornecer quaisquer outros sinalizadores que foram usados quando o sistema de arquivos foi montado pela primeira vez.

A remontagem de um sistema de arquivos somente leitura realmente define um sinalizador nas estruturas de dados do sistema de arquivos do kernel, depois de realizar algumas limpezas (basicamente, finalizar qualquer gravação pendente). Você pode ver como ele é tratado no código de fonte ext4 : se um sistema de arquivos ext4 estiver montado, read-write e remontado somente leitura, o sistema de arquivos será sincronizado, as cotas serão suspensas e s_flags na estrutura do superbloco será atualizado para indicar que o sistema de arquivos é somente leitura. Isso é então usado em todo o kernel para negar gravações; veja, por exemplo, sb_permission que impede o acesso de gravação em uma leitura somente sistema de arquivos.

Se você quiser fazer isso sozinho, pode tentar apenas chamar mount() com as opções apropriadas, de acordo com a página de manual vinculada acima. Para uma solução completa, acredito que você precisaria determinar os atuais flags de montagem e atualizá-los, mas você poderia codificar um programa simples para combinar com o que seus sistemas de arquivos atualmente são montados como ...

    
por 11.04.2015 / 14:03