在Linux中什么是/ etc / mtab?


Answers:


51
%文件/ etc / mtab
/etc/mtab:../proc/self/mounts的符号链接
%文件/ proc / mounts
/ proc / mounts:自我/ mounts的符号链接
%

/etc/mtab是一种兼容机制。几十年前,Unix没有系统调用来读取现有的安装信息。取而代之的是,安装文件系统的程序应该协同并自愿维护一个表,/etc/mtab以了解安装在何处的文件。

出于明显的原因,这不是理想的机制。

Linux获得了“ procfs”的概念,它获得的一件事是该表的内核维护版本,其形式为mounts伪常规文件。从内核中读取安装信息的“系统调用”变成了对该文件的打开-读取-关闭序列,然后将结果从人类可读形式解析为机器可读形式(某些内容有些微妙,可以从两周前的错误报告中看到)。

/etc/mtab因此,它已普遍地成为的符号链接/proc/mounts,从而使以该名称进行硬连线的程序可以继续从该文件读取装载表,而装载和卸载文件系统的程序不再必须自己明确地进行操作以保持最新状态。(但是,如果其中某些文件仍然/etc/mtab可以写成可写的常规文件,那么在mounts某些极端情况下,其中缺少所有非内核内容的规范化信息并不是所需要的;尽管它们并没有超过的一般问题/etc/mtab。)

如今,每个进程可以对挂载的东西有自己的单独视图,因此mounts,procfs中每个进程都有单独的文件,每个进程自己的表都可以通过self符号链接as 进行访问self/mounts,并且/proc/mounts现在具有兼容性机制。(有趣mountsmounts是,当前的Linux doco中没有记录每个进程或格式,尽管有类似的mountinfo伪常规文件。)

SunOS / Solaris具有类似的机制。该/etc/mnttab文件实际上是一个单文件文件系统,除了通过使用该文件的打开的文件描述符读取表之外,还可以通过read()系统调用来监视挂载点的更改,poll()并使用来获取更多信息ioctl()

在HP-UX中,/etc/mnttab文件名也是如此,但是从版本11开始,它仍然是一个常规文件,其内容由系统实用程序协同维护。

AIX不会导出程序必须解析的可读文本表,并且没有等效文件。类似地,BSD getfsstat()在FreeBSD和OpenBSD上具有完整的系统调用,用于程序以机器可读的形式从内核获取挂载表,而无需通过人类可读的中间形式将其编组。

进一步阅读


除了我在问题中的评论外,这里mtab(5)还有旧时的信息:man.cat-v.org/unix_8th/5/mtab
周伟军

2
不仅如此/proc/mounts/proc/self/mounts它本身现在还是一种兼容机制;它仅显示中可用信息的子集/proc/self/mountinfo。的格式/proc/self/mounts中记录proc(5)为相同的fstab(5)
mosvy

尽管可以承认,fstab(5)只能说是用八进制转义符代替了空格,而空格,制表符,换行符和反斜杠
mosvy

我知道伪文件和常规文件,但是什么是伪常规文件?
gerrit

@gerrit这是一个常规文件,大小为0但仍包含数据;-)
mosvy

12

根据man mount

挂载和卸载程序通常会在/ etc / mtab文件中维护当前已挂载文件系统的列表。仍然支持该真实的mtab文件,但是在当前的Linux系统上,最好使其成为/ proc / mounts的符号链接,因为在用户空间中维护的常规mtab文件不能可靠地与名称空间,容器和其他高级Linux功能一起使用。

安装时不记录在/etc/mtab

-n,--no-mtab

挂载而不用写在/ etc / mtab中。例如,当/ etc在只读文件系统上时,这是必需的。

手册页中提供了更多细微差别。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.