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