/etc目录下有一个fstab文件,记录了磁盘分区的信息,挂载分区(mount)的时候,就需要读取这个文件的信息。另外,同一目录下,还有一个mtab文件,记录了当前已挂载的磁盘分区信息,每当mount、umount的时候,都会更新该文件,而df命令,读取的也正是这个mtab文件。这是Linux的情况,如果是Unix,文件名字可能有所不同,例如:
操作系统 记录所有分区信息的文件 记录已挂载分区信息的文件
Linux /etc/fstab /etc/mtab
Solaris /etc/vfstab /etc/mnttab
HP-UX /etc/fstab /etc/mnttab
为叙述方便,本文都按Linux的标准编写。
/etc/mtab是一个按行表示已挂载分区信息的文件,以制表符或者空格分隔各列。第一列表示文件系统的名字,第二列表示文件系统挂载的目录,第三列表示文件系统的类型,第四列表示文件系统挂载时的参数,从第五列开始,各个操作系统的定义不尽相同,而且df命令无需用到,因此不再列举。
至此,简述一下df命令的工作原理:
1. 按行读取/etc/mtab文件,每行的内容解析成一个mntent结构体,该结构体在Linux中定义如下,df.c会用到前四个成员,但真正有用的是前两个: