我正在尝试检查已挂载分区 rw/ro 的当前状态。在 Cent6 上,/proc/self/mountinfo 有一些有趣的信息。每个挂载点的输出中包含的项目之一是“挂载选项:每个挂载选项”。另一个是“超级选项:每个超级块选项”。
我想知道这些如何相互比较。我已经读了 man 页面,直到脸色发青,还读了《理解 Linux 内核》这本动物书。我特别想知道的是,如果由于某种原因,驱动器突然因为 ro 而发生故障,Linux 检测到并试图保护自己,超级选项也会改变吗,或者它们会反映驱动器的原始状态吗?我正在寻找一种绝对的方法来测试驱动器是否根据操作系统进行 rw。Fstab 不起作用,而且我一直在阅读不要信任挂载,/proc/mounts 是我一直在使用的,因为 mountinfo 在我的 Cent5 盒子上不可用。我知道我可以直接触摸文件,但我在寻找一种操作系统级别的方法,而不是“用户”级别的方法。我希望我可以比较挂载选项和超级选项,如果它们匹配良好,否则失败。
我还会接受更多的阅读技巧,我已经阅读了大量关于 mountinfo 的提交说明以及 Redhat 关于 /proc/mounts 的一些错误报告,这正是我首先找到 mountinfo 的原因。
谢谢
答案1
/proc/self/mountinfo
是检查您的坐骑最权威的来源。
/proc/mounts
是一个已弃用的用于检查坐骑状态的来源。
在链接的错误报告中,之所以说要避免使用它,是因为它不会产生在某些情况下可能很重要的额外信息(无论它是共享挂载、私有挂载、不可绑定挂载等,仅适用于使用挂载命名空间时),因此在技术上不推荐使用,而建议使用/proc/self/mountinfo
。
这种区别与较旧的发行版无关。例如,EL5 不完全支持单独的命名空间,因此这种情况/proc/self/mountinfo
没有用。
如果您确实只对挂载标志感兴趣,那么 /proc/mounts 就可以了。
请注意,符号/proc/mounts
链接到,/proc/self/mounts
因为进程看到的“挂载视图”是基于每个命名空间的,并且进程可能位于不同的命名空间中。对于绝大多数用例,此例外情况实际上不应适用(如果您使用挂载命名空间,您就会知道)。