在本节中,我将以两种不同的方式使用“文件系统”这个词。磁盘分区和其他设备上有文件系统,并且文件系统以 Linux 运行系统呈现给您的方式存在。在 Linux 中,您将磁盘文件系统“挂载”到系统的文件系统上。
在前一节中,我提到 init 脚本会检查和挂载文件系统。执行此操作的命令分别是 fsck
和 mount
。
硬盘只是一个可以写入 1 和 0 的大空间。文件系统对它施加了一些结构,使其看起来像目录内的目录内的文件... 每个文件都由一个 inode 表示,inode 说明了文件所有者是谁,创建时间以及在哪里找到其内容。目录也由 inode 表示,但这些 inode 说明了在哪里找到目录中文件的 inode。如果系统想要读取 /home/greg/bigboobs.jpeg
,它首先在“超级块”中找到根目录 /
的 inode,然后在 /
的内容中找到目录 home
的 inode,然后在 /home
的内容中找到目录 greg
的 inode,最后找到 bigboobs.jpeg
的 inode,这将告诉它要读取哪些磁盘块。
如果我们向文件末尾添加一些数据,可能会发生数据在 inode 更新以说明新块属于该文件之前写入,反之亦然。如果此时断电,文件系统将被破坏。fsck
尝试检测和修复的就是这种情况。
mount 命令接受设备上的文件系统,并将其添加到您使用系统时看到的层次结构中。通常,内核以只读方式挂载其根文件系统。在 fsck
检查确认文件系统正常后,使用 mount 命令将其重新挂载为读写。
Linux 也支持其他类型的文件系统:msdos、vfat、minix 等等。特定类型文件系统的细节由虚拟文件系统 (VFS) 抽象出来。我不会详细介绍这一点。在“Linux 内核”中有关于它的讨论(请参阅 Linux 内核 部分的 URL)。
一种完全不同的文件系统挂载在 /proc
上。它实际上是内核中事物的表示。那里有一个目录,对应于系统上运行的每个进程,目录名称为进程号。还有一些文件,例如 interrupts
和 meminfo
,它们告诉您硬件的使用情况。您可以通过探索 /proc
学到很多东西。
命令 mke2fs
有一些参数,用于创建 ext2 文件系统。这些参数控制块的大小、inode 的数量等等。请查看 mke2fs
的 man 手册页以了解详细信息。
文件系统中哪些内容挂载在哪里由 /etc/fstab
文件控制。它也有一个 man 手册页。
创建一个非常小的文件系统,并使用十六进制查看器查看它。识别 inode、超级块和文件内容。
我相信有一些工具可以为您提供文件系统的图形视图。找一个,试用一下,并通过电子邮件将 URL 和评论发送给我!
查看内核中的 ext2 文件系统代码。
mount
命令是 util-linux 软件包的一部分,在 从源代码构建最小 Linux 系统 中有指向它的链接mount
、fstab
、fsck
、mke2fs
和 proc
的 man 手册页Documentation/proc.txt
解释了 /proc
文件系统。/bin
、/sbin
等的内容有最低要求。如果您的目标是制作一个最小但完整的系统,这是一个很好的参考。