要将挂载的文件系统重新装入只读文件系统,我可以使用以下命令:
mount -o remount,ro /foo例如,这在关闭序列中使用,其中根文件系统(/)是在调用halt/reboot之前重新挂载只读的。
什么是真正的重新安装为只读?它是否改变了内核中的“标志”,这样写就被拒绝了?
编写自己的程序,只会重新装入一个给定的文件系统,使其只读,这会有多难呢?
发布于 2015-04-11 12:03:51
安装或重新安装文件系统是使用mount(2) syscall完成的。在重新安装时,这将获取目标位置(挂载点)、在挂载操作中使用的标志以及用于所涉及的特定文件系统的任何额外数据。当只重新挂载只读时,使用的标志是MS_RDONLY和MS_REMOUNT;您还应该提供任何其他标志,这些标志是在文件系统首次挂载时使用的。
重新安装文件系统只读确实会在内核的文件系统数据结构中设置一个标志,在执行一些清理之后(基本上完成任何未完成的写入)。您可以看到它是如何在这个ext4源代码中处理的:如果一个ext4文件系统被挂载读写,然后重新挂载只读,文件系统被同步,配额被挂起,超级块结构中的s_flags被更新以指示文件系统是只读的。然后在整个内核中使用它来拒绝写;例如,参见sb_permission,它阻止对只读文件系统的写访问。
如果您想自己做这件事,您可以尝试按照上面链接的命令页使用适当的选项调用mount()。对于一个完整的解决方案,我相信您需要确定当前的挂载标志并更新它们,但是您可以对一个简单的程序进行硬编码,以匹配您的文件系统当前作为.
https://unix.stackexchange.com/questions/195614
复制相似问题