文件系统 是操作系统用于跟踪磁盘或分区上文件的方法和数据结构;也就是说,文件在磁盘上的组织方式。这个词也用来指代用于存储文件的分区或磁盘,或者文件系统的类型。因此,可以说“我有两个文件系统”,意思是你有两个分区,你在上面存储文件,或者你正在使用“扩展文件系统”,意思是文件系统的类型。
磁盘或分区及其包含的文件系统之间的区别非常重要。一些程序(包括,合理地,创建文件系统的程序)直接在磁盘或分区的原始扇区上操作;如果那里存在一个现有的文件系统,它将被销毁或严重损坏。大多数程序在文件系统上操作,因此无法在不包含文件系统的分区(或包含错误类型的文件系统)上工作。
在可以将分区或磁盘用作文件系统之前,需要对其进行初始化,并将簿记数据结构写入磁盘。这个过程被称为创建文件系统。
大多数 UNIX 文件系统类型都有类似的总体结构,尽管确切的细节差异很大。中心概念是超级块、inode 、数据块、目录块 和 间接块。超级块包含关于整个文件系统的信息,例如它的大小(这里的确切信息取决于文件系统)。inode 包含关于文件的所有信息,除了它的名称。名称存储在目录中,与 inode 的编号一起。目录条目由文件名和代表文件的 inode 的编号组成。inode 包含若干数据块的编号,这些数据块用于存储文件中的数据。然而,inode 中只有少量空间用于存储数据块编号,如果需要更多,则动态分配更多用于指向数据块的指针的空间。这些动态分配的块是间接块;该名称表明,为了找到数据块,必须首先在间接块中找到其编号。
UNIX 文件系统通常允许在文件中创建一个空洞(这是通过lseek()系统调用完成的;查看手册页),这意味着文件系统只是假装在文件中的特定位置只有零字节,但没有为该文件中的位置保留实际的磁盘扇区(这意味着该文件将使用更少的磁盘空间)。这种情况尤其经常发生在小型二进制文件、Linux 共享库、某些数据库和一些其他特殊情况下。(空洞是通过在间接块或 inode 中存储一个特殊值作为数据块的地址来实现的。这个特殊的地址意味着没有为文件的那部分分配数据块,因此,文件中有一个空洞。)
Linux 支持几种类型的文件系统。截至撰写本文时,最重要的有
最古老,被认为是可靠性最高的,但在功能上非常有限(缺少一些时间戳,文件名最多 30 个字符)并且在容量上受到限制(每个文件系统最多 64 MB)。
Minix 文件系统的修改版本,取消了对文件名和文件系统大小的限制,但没有引入其他新功能。它不是很流行,但据报道工作得很好。
ext3 文件系统具有 ext2 文件系统的所有功能。不同之处在于,添加了日志功能。这提高了性能,并在系统崩溃时缩短了恢复时间。它已变得比 ext2 更受欢迎。
本机 Linux 文件系统中功能最丰富的。它被设计为易于向上兼容,以便新版本的文件系统代码不需要重新创建现有的文件系统。
Ext2 的旧版本,不向上兼容。它几乎不再用于新安装,大多数人已转换为 ext2。
一种更强大的文件系统。使用日志功能,这使得数据丢失的可能性更小。日志记录是一种机制,用于记录要执行或已经执行的事务。这使得文件系统能够在例如不正确的关机造成的损坏后相当容易地重建自身。
JFS 是 IBM 设计的日志文件系统,可在高性能环境中使用。
XFS 最初由 Silicon Graphics 设计,用作 64 位日志文件系统。XFS 还被设计为在使用大文件和文件系统时保持高性能。
此外,还存在对几种外国文件系统的支持,以便更容易地与其他操作系统交换文件。这些外国文件系统的工作方式与本机文件系统相同,只是它们可能缺少一些常见的 UNIX 功能,或者有奇怪的限制或其他怪癖。
与 MS-DOS(以及 OS/2 和 Windows NT)FAT 文件系统的兼容性。
扩展了 Linux 下的 msdos 文件系统驱动程序以获得长文件名、所有者、权限、链接和设备文件。这允许将普通的 msdos 文件系统用作 Linux 文件系统,从而无需为 Linux 分配单独的分区。
这是 FAT 文件系统的一个扩展,称为 FAT32。它支持比 FAT 更大的磁盘尺寸。大多数 MS Windows 磁盘都是 vfat。
标准 CD-ROM 文件系统;自动支持流行的 CD-ROM 标准 Rock Ridge 扩展,该扩展允许更长的文件名。
一个网络文件系统,允许在多台计算机之间共享文件系统,以便轻松地从所有计算机访问文件。
一个网络文件系统,允许与 MS Windows 计算机共享文件系统。它与 Windows 文件共享协议兼容。
OS/2 文件系统。
SystemV/386、Coherent 和 Xenix 文件系统。
最先进的 Microsoft 日志文件系统,与以前的 Microsoft 文件系统相比,提供更快的文件访问速度和稳定性。
要使用的文件系统的选择取决于具体情况。如果兼容性或其他原因使得有必要使用非本机文件系统之一,则必须使用该文件系统。如果可以自由选择,那么使用 ext3 可能是最明智的选择,因为它具有 ext2 的所有功能,并且是一个日志文件系统。有关文件系统的更多信息,请参见第 5.10.6 节。您还可以阅读位于 http://www.tldp.org/HOWTO/Filesystems-HOWTO.html 的 Filesystems HOWTO。
还有一个 proc 文件系统,通常可以作为/proc目录访问,即使它看起来像文件系统,但它实际上根本不是文件系统。proc 文件系统可以轻松访问某些内核数据结构,例如进程列表(因此得名)。它使这些数据结构看起来像一个文件系统,并且可以使用所有常用的文件工具来操作该文件系统。例如,要获取所有进程的列表,可以使用以下命令
$ ls -l /proc total 0 dr-xr-xr-x 4 root root 0 Jan 31 20:37 1 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 63 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 94 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 95 dr-xr-xr-x 4 root users 0 Jan 31 20:37 98 dr-xr-xr-x 4 liw users 0 Jan 31 20:37 99 -r--r--r-- 1 root root 0 Jan 31 20:37 devices -r--r--r-- 1 root root 0 Jan 31 20:37 dma -r--r--r-- 1 root root 0 Jan 31 20:37 filesystems -r--r--r-- 1 root root 0 Jan 31 20:37 interrupts -r-------- 1 root root 8654848 Jan 31 20:37 kcore -r--r--r-- 1 root root 0 Jan 31 11:50 kmsg -r--r--r-- 1 root root 0 Jan 31 20:37 ksyms -r--r--r-- 1 root root 0 Jan 31 11:51 loadavg -r--r--r-- 1 root root 0 Jan 31 20:37 meminfo -r--r--r-- 1 root root 0 Jan 31 20:37 modules dr-xr-xr-x 2 root root 0 Jan 31 20:37 net dr-xr-xr-x 4 root root 0 Jan 31 20:37 self -r--r--r-- 1 root root 0 Jan 31 20:37 stat -r--r--r-- 1 root root 0 Jan 31 20:37 uptime -r--r--r-- 1 root root 0 Jan 31 20:37 version $ |
请注意,即使它被称为文件系统,proc 文件系统的任何部分都不会触及任何磁盘。它只存在于内核的想象中。每当有人试图查看 proc 文件系统的任何部分时,内核都会使其看起来好像该部分存在于某处,即使它不存在。因此,即使存在一个多兆字节的/proc/kcore文件,它也不占用任何磁盘空间。
通常没有必要使用许多不同的文件系统。目前,ext3 是最流行的文件系统,因为它是一个日志文件系统。目前,它可能是最明智的选择。Reiserfs 是另一种流行的选择,因为它也是日志记录的。根据簿记结构的开销、速度、(感知的)可靠性、兼容性和各种其他原因,建议使用另一个文件系统。这需要根据具体情况决定。
使用日志记录的文件系统也称为日志文件系统。日志文件系统维护一个日志,或日志,记录文件系统上发生的事情。在系统崩溃时,或者如果你的 2 岁儿子像我的儿子喜欢做的那样按下电源按钮,则日志文件系统旨在用于文件系统的日志来重新创建未保存和丢失的数据。这使得数据丢失的可能性大大降低,并且很可能成为 Linux 文件系统中的标准功能。但是,不要从中获得虚假的安全感。像其他所有事情一样,可能会出现错误。始终确保备份您的数据以防紧急情况。
有关不同文件系统类型的功能的更多详细信息,请参见第 5.10.6 节。
文件系统是使用 mkfs 命令创建的,即初始化的。实际上,每种文件系统类型都有一个单独的程序。mkfs 只是一个前端,它根据所需的文件系统类型运行适当的程序。使用-t fstype选项选择类型。
mkfs 调用的程序具有略有不同的命令行界面。下面总结了常见且最重要的选项;有关更多信息,请参见手册页。
选择文件系统的类型。
搜索坏块并相应地初始化坏块列表。
从名称文件读取初始坏块列表。
还有许多程序被编写为在创建特定文件系统时添加特定选项。例如,mkfs.ext3 添加一个 -b 选项,允许管理员指定应使用什么块大小。请务必查明是否有可用于您要使用的文件系统类型的特定程序。有关确定使用什么块大小的更多信息,请参见第 5.10.5 节。
要在软盘上创建 ext2 文件系统,可以给出以下命令
$ fdformat -n /dev/fd0H1440 Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 KB. Formatting ... done $ badblocks /dev/fd0H1440 1440 $>$ bad-blocks $ mkfs.ext2 -l bad-blocks /dev/fd0H1440 mke2fs 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10 360 inodes, 1440 blocks 72 blocks (5.00%) reserved for the super user First data block=1 Block size=1024 (log=0) Fragment size=1024 (log=0) 1 block group 8192 blocks per group, 8192 fragments per group 360 inodes per group Writing inode tables: done Writing superblocks and filesystem accounting information: done $ |
The-c选项可以与 mkfs 一起使用,而不是 badblocks 和单独的文件。下面的例子就是这样做的。
$ mkfs.ext2 -c /dev/fd0H1440 mke2fs 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10 360 inodes, 1440 blocks 72 blocks (5.00%) reserved for the super user First data block=1 Block size=1024 (log=0) Fragment size=1024 (log=0) 1 block group 8192 blocks per group, 8192 fragments per group 360 inodes per group Checking for bad blocks (read-only test): done Writing inode tables: done Writing superblocks and filesystem accounting information: done $ |
在硬盘或分区上准备文件系统的过程与软盘相同,只是不需要格式化。
块大小指定文件系统用于读取和写入数据的大小。 当使用大型文件(例如数据库)时,较大的块大小将有助于提高磁盘 I/O 性能。 这是因为磁盘在搜索下一个块之前可以读取或写入数据更长的时间。
缺点是,如果你的文件系统上有很多较小的文件,比如/etc,则可能浪费大量磁盘空间。
例如,如果将块大小设置为 4096 或 4K,并且创建了一个大小为 256 字节的文件,它仍然会占用硬盘上的 4K 空间。对于一个文件来说,这似乎微不足道,但当你的文件系统包含数百或数千个文件时,这可能会累积起来。
块大小也会影响某些文件系统上支持的最大文件大小。这是因为许多现代文件系统不受块大小或文件大小的限制,而是受块数的限制。因此,您将使用“块大小 * 最大块数 = 最大块大小”公式。
表 5-1. 文件系统功能比较
文件系统名称 | 引入年份 | 原始操作系统 | 最大文件大小 | 最大文件系统大小 | 日志功能 |
---|---|---|---|---|---|
FAT16 | 1983 | MSDOS V2 | 4GB | 16MB 到 8GB | 否 |
FAT32 | 1997 | Windows 95 | 4GB | 8GB 到 2TB | 否 |
HPFS | 1988 | OS/2 | 4GB | 2TB | 否 |
NTFS | 1993 | Windows NT | 16EB | 16EB | 是 |
HFS+ | 1998 | Mac OS | 8EB | ? | 否 |
UFS2 | 2002 | FreeBSD | 512GB 到 32PB | 1YB | 否 |
ext2 | 1993 | Linux | 16GB 到 2TB4 | 2TB 到 32TB | 否 |
ext3 | 1999 | Linux | 16GB 到 2TB4 | 2TB 到 32TB | 是 |
ReiserFS3 | 2001 | Linux | 8TB8 | 16TB | 是 |
ReiserFS4 | 2005 | Linux | ? | ? | 是 |
XFS | 1994 | IRIX | 9EB | 9EB | 是 |
JFS | ? | AIX | 8EB | 512TB 到 4PB | 是 |
VxFS | 1991 | SVR4.0 | 16EB | ? | 是 |
ZFS | 2004 | Solaris 10 | 1YB | 16EB | 否 |
图例
表 5-2. 大小
千字节 - KB | 1024 字节 |
兆字节 - MB | 1024 KB |
吉字节 - GB | 1024 MB |
太字节 - TB | 1024 GB |
拍字节 - PB | 1024 TB |
艾字节 - EB | 1024 PB |
泽字节 - ZB | 1024 EB |
尧字节 - YB | 1024 ZB |
应该注意的是,艾字节、泽字节和尧字节很少遇到,甚至从未遇到过。 目前估计,世界上的印刷材料总量等于 5 艾字节。 因此,许多人认为其中一些文件系统限制在理论上是存在的。 但是,文件系统软件已经编写成具有这些功能。
有关更多详细信息,您可以访问 http://en.wikipedia.org/wiki/Comparison_of_file_systems。
在使用文件系统之前,必须先挂载它。 然后操作系统会执行各种簿记操作以确保一切正常工作。 由于 UNIX 中的所有文件都在单个目录树中,因此挂载操作会使新文件系统的内容看起来像是已挂载的某个文件系统中现有子目录的内容。
例如,图 5-3 显示了三个单独的文件系统,每个文件系统都有自己的根目录。 当最后两个文件系统挂载到/home和/usr分别位于第一个文件系统上时,我们可以得到一个像 图 5-4 中那样的单个目录树。
挂载可以像以下示例中那样完成
$ mount /dev/hda2 /home $ mount /dev/hda3 /usr $ |
Linux 支持多种文件系统类型。 mount 尝试猜测文件系统的类型。 您也可以使用-t fstype选项直接指定类型; 这有时是必要的,因为 mount 使用的启发式方法并不总是有效。 例如,要挂载 MS-DOS 软盘,可以使用以下命令
$ mount -t msdos /dev/fd0 /floppy $ |
挂载目录不必为空,但它必须存在。 但是,在挂载文件系统时,将无法通过名称访问其中的任何文件。 (已打开的任何文件仍然可以访问。从其他目录具有硬链接的文件可以使用这些名称访问。)这样做没有坏处,甚至可能有用。 例如,有些人喜欢使/tmp和/var/tmp同义,并使/tmp成为/var/tmp的符号链接。 当系统启动时,在挂载/var文件系统之前,将使用位于根文件系统上的/var/tmp目录。 当/var被挂载时,它将使根文件系统上的/var/tmp目录无法访问。 如果/var/tmp不存在于根文件系统上,则在挂载/var.
如果不打算向文件系统写入任何内容,请使用 mount 的-r开关来执行只读挂载。 这将使内核停止任何写入文件系统的尝试,并且还会阻止内核更新 inodes 中的文件访问时间。 只读挂载对于不可写介质(例如 CD-ROM)是必需的。
细心的读者已经注意到一个轻微的后勤问题。 第一个文件系统(称为根文件系统,因为它包含根目录)是如何挂载的,因为它显然不能挂载到另一个文件系统上? 答案是它是由魔法完成的。 根文件系统在启动时被神奇地挂载,并且人们可以依靠它始终处于挂载状态。 如果无法挂载根文件系统,则系统不会启动。 作为根目录神奇挂载的文件系统的名称要么编译到内核中,要么使用 LILO 或 rdev 设置。
有关更多信息,请参阅内核源代码或 Kernel Hackers' Guide。
根文件系统通常首先以只读方式挂载。 然后启动脚本将运行 fsck 以验证其有效性,如果没有问题,它们将重新挂载它,以便也允许写入。 不得在已挂载的文件系统上运行 fsck,因为在 fsck 运行时对文件系统进行的任何更改都将导致问题。 由于根文件系统在被检查时以只读方式挂载,因此 fsck 可以毫无顾虑地解决任何问题,因为重新挂载操作将刷新文件系统保存在内存中的任何元数据。
在许多系统上,还有其他文件系统也应该在启动时自动挂载。 这些在/etc/fstab文件中指定; 有关格式的详细信息,请参见 fstab 手册页。 额外文件系统的确切挂载时间取决于许多因素,并且可以由每个管理员根据需要进行配置; 请参阅第 8 章。
当不再需要挂载文件系统时,可以使用 umount 将其卸载。 umount 接受一个参数:设备文件或挂载点。 例如,要卸载上一个示例的目录,可以使用以下命令
$ umount /dev/hda2 $ umount /usr $ |
有关如何使用该命令的更多说明,请参见手册页。 务必始终卸载已挂载的软盘。不要只是将软盘从驱动器中弹出! 由于磁盘缓存,数据不一定会在您卸载它之前写入软盘,因此过早地将软盘从驱动器中取出可能会导致内容变得乱码。 如果您只从软盘读取数据,则这种情况不太可能发生,但如果您写入数据,即使是意外写入,结果也可能是灾难性的。
挂载和卸载需要超级用户权限,即只有 root 用户才能执行此操作。 原因是如果任何用户都可以在任何目录上挂载软盘,那么很容易创建一个软盘,其中包含伪装成/bin/sh或任何其他常用程序的特洛伊木马。 但是,通常有必要允许用户使用软盘,并且有多种方法可以执行此操作
给用户 root 密码。 这显然是不好的安全措施,但却是最简单的解决方案。 如果无论如何都不需要安全性,那么它就能很好地工作,这在许多非联网的个人系统上都是如此。
使用诸如 sudo 之类的程序来允许用户使用 mount。 这仍然是不好的安全措施,但不会直接向每个人授予超级用户权限。 这需要用户付出几秒钟的努力思考。 此外,可以将 sudo 配置为仅允许用户执行某些命令。 请参见 sudo(8)、sudoers(5) 和 visudo(8) 手册页。
让用户使用 mtools,这是一个用于操作 MS-DOS 文件系统而不挂载它们的软件包。 如果只需要 MS-DOS 软盘,这就能很好地工作,但否则会非常麻烦。
列出软盘设备及其允许的挂载点,以及合适的选项,在/etc/fstab.
/dev/fd0 /floppy msdos user,noauto 0 0 |
Thenoauto选项阻止在系统启动时自动完成此挂载(即,它阻止 mount -a 挂载它)。user选项允许任何用户挂载文件系统,并且由于安全原因,禁止从已挂载的文件系统执行程序(普通或 setuid)和解释设备文件。此后,任何用户都可以使用以下命令挂载带有 msdos 文件系统的软盘
$ mount /floppy $ |
如果要提供对多种类型的软盘的访问,则需要提供多个挂载点。 每个挂载点的设置可以不同。 例如,要同时提供对 MS-DOS 和 ext2 软盘的访问权限,可以在/etc/fstab:
/dev/fd0 /mnt/dosfloppy msdos user,noauto 0 0 /dev/fd0 /mnt/ext2floppy ext2 user,noauto 0 0 |
/dev/fd0 /mnt/floppy auto user,noauto 0 0 |
对于 MS-DOS 文件系统(不仅仅是软盘),您可能希望使用uid, gid和umask文件系统选项来限制对其的访问,这些选项在 mount 手册页上有详细描述。 如果不小心,挂载 MS-DOS 文件系统会使每个人至少具有对其文件中内容的读取权限,这不是一个好主意。
文件系统是复杂的生物,因此,它们往往容易出错。可以使用 fsck 命令检查文件系统的正确性和有效性。可以指示它修复发现的任何小问题,并在存在任何无法修复的问题时提醒用户。幸运的是,实现文件系统的代码经过了非常有效的调试,因此几乎没有问题,并且它们通常是由电源故障,硬件故障或操作员错误引起的;例如,未能正确关闭系统。
大多数系统都设置为在启动时自动运行 fsck,以便在系统使用之前检测到(并希望可以纠正)任何错误。使用损坏的文件系统往往会使情况变得更糟:如果数据结构混乱,则使用文件系统可能会使它们更加混乱,从而导致更多的数据丢失。但是,fsck 在大型文件系统上可能需要一段时间才能运行,并且由于如果系统已正确关闭,则几乎永远不会发生错误,因此可以使用一些技巧来避免在这种情况下进行检查。首先,如果文件/etc/fastboot存在,则不进行任何检查。第二个是,ext2 文件系统在其超级块中有一个特殊的标记,用于指示文件系统在上一次挂载后是否已正确卸载。这允许 e2fsck(fsck 的 ext2 文件系统版本)避免在标志指示已完成卸载时检查文件系统(假设正确的卸载表明没有问题)。/etc/fastboot技巧是否在您的系统上起作用取决于您的启动脚本,但是每次使用 e2fsck 时,ext2 技巧都有效。必须使用 e2fsck 的选项才能显式绕过它以避免使用它。 (有关详细信息,请参见 e2fsck 手册页。)
自动检查仅适用于在启动时自动挂载的文件系统。手动使用 fsck 检查其他文件系统,例如软盘。
如果 fsck 发现无法修复的问题,则您需要深入了解文件系统的工作方式以及特定损坏的文件系统的类型,或者需要良好的备份。后者很容易(尽管有时很繁琐)安排,如果您自己没有专业知识,则可以通过朋友,Linux 新闻组和邮件列表或某些其他支持来源来安排前者。我想告诉您更多有关它的信息,但我在这一方面的教育和经验不足阻碍了我。Theodore Ts'o 的 debugfs 程序应该有用。
fsck 必须仅在未挂载的文件系统上运行,而绝不能在已挂载的文件系统上运行(启动期间的只读根目录除外)。 这是因为它访问原始磁盘,因此可以在操作系统不知道的情况下修改文件系统。 如果操作系统感到困惑,将会出现问题。
定期检查坏块可能是一个好主意。 这是通过 badblocks 命令完成的。 它输出它可以找到的所有坏块的编号列表。 可以将此列表馈送给 fsck 以记录在文件系统数据结构中,以便操作系统不会尝试使用坏块来存储数据。 以下示例将说明如何完成此操作。
$ badblocks /dev/fd0H1440 1440 > bad-blocks $ fsck -t ext2 -l bad-blocks /dev/fd0H1440 Parallelizing fsck version 0.5a (5-Apr-94) e2fsck 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10 Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Check reference counts. Pass 5: Checking group summary information. /dev/fd0H1440: ***** FILE SYSTEM WAS MODIFIED ***** /dev/fd0H1440: 11/360 files, 63/1440 blocks $ |
将文件写入磁盘时,并非总能将其写入连续的块中。 未存储在连续块中的文件是 碎片化的。 读取碎片文件需要更长的时间,因为磁盘的读写头将必须移动更多。 避免碎片是可取的,尽管在具有预读功能的良好缓冲缓存的系统中,碎片不是什么大问题。
现代 Linux 文件系统通过将文件中的所有块保持在一起(即使无法将它们存储在连续的扇区中)来最大程度地减少碎片。 某些文件系统(例如 ext3)有效地分配与文件中的其他块最接近的空闲块。 因此,无需担心 Linux 系统中的碎片。
在 ext2 文件系统的早期,人们曾担心文件碎片问题,这导致开发了一个称为 defrag 的碎片整理程序。 仍然可以在 http://www.go.dlr.de/linux/src/defrag-0.73.tar.gz 下载它的副本。 但是,强烈建议您不要使用它。 它是为旧版本的 ext2 设计的,并且自 1998 年以来未进行更新! 我仅在此处出于参考目的提及它。
有很多 MS-DOS 碎片整理程序可以在文件系统中移动块以消除碎片。 对于其他文件系统,必须通过备份文件系统,重新创建文件系统以及从备份还原文件来完成碎片整理。 备份文件系统后再进行碎片整理对于所有文件系统来说都是一个好主意,因为在碎片整理过程中可能会出现许多问题。
一些其他工具对于管理文件系统也很有用。 df 显示一个或多个文件系统上的可用磁盘空间; du 显示目录及其所有文件包含多少磁盘空间。 这些可用于查找浪费磁盘空间的资源。 两者都有手册页,其中详细说明了可以使用的(许多)选项。
sync 强制将缓冲区缓存中的所有未写入块(请参见第 6.6 节)写入磁盘。 通常不需要手动执行此操作。 后台程序 update 会自动执行此操作。 在灾难中,例如当 update 或其辅助进程 bdflush 死机时,或者您必须立即关闭电源并且无法等待 update 运行时,它可能会很有用。 同样,也有手册页。 man 是您在 Linux 中最好的朋友。 它的表亲 apropos 在您不知道所需的命令名称时也很有用。
除了可以直接或通过独立于文件系统类型的前端访问的文件系统创建器(mke2fs)和检查器(e2fsck)之外,ext2 文件系统还有一些其他可能有用的工具。
tune2fs 调整文件系统参数。 一些更有趣的参数是
最大挂载次数。 当文件系统已挂载太多次时,即使设置了清除标志,e2fsck 也会强制执行检查。 对于用于开发或测试系统的系统,最好降低此限制。
检查之间的最大时间。 即使设置了清除标志并且文件系统没有经常挂载,e2fsck 也可以强制执行两次检查之间的最大时间。 但是,可以禁用此功能。
为 root 保留的块数。 Ext2 为 root 保留了一些块,以便在文件系统已满时,仍然可以执行系统管理而无需删除任何内容。 默认情况下,保留的数量为 5%,这在大多数磁盘上都不足以浪费。 但是,对于软盘,保留任何块都没有意义。
dumpe2fs 显示有关 ext2 或 ext3 文件系统的信息,主要来自超级块。 以下是示例输出。 输出中的某些信息是技术性的,需要了解文件系统的工作方式,但是即使对于非管理人员,也可以很容易地理解其中的很多内容。
# dumpe2fs dumpe2fs 1.32 (09-Nov-2002) Filesystem volume name: / Last mounted on: not available Filesystem UUID: 51603f82-68f3-4ae7-a755-b777ff9dc739 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal filetype needs_recovery sparse_super Default mount options: (none) Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 3482976 Block count: 6960153 Reserved block count: 348007 Free blocks: 3873525 Free inodes: 3136573 First block: 0 Block size: 4096 Fragment size: 4096 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 16352 Inode blocks per group: 511 Filesystem created: Tue Aug 26 08:11:55 2003 Last mount time: Mon Dec 22 08:23:12 2003 Last write time: Mon Dec 22 08:23:12 2003 Mount count: 3 Maximum mount count: -1 Last checked: Mon Nov 3 11:27:38 2003 Check interval: 0 (none) Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 128 Journal UUID: none Journal inode: 8 Journal device: 0x0000 First orphan inode: 655612 Group 0: (Blocks 0-32767) Primary superblock at 0, Group descriptors at 1-2 Block bitmap at 3 (+3), Inode bitmap at 4 (+4) Block bitmap at 3 (+3), Inode bitmap at 4 (+4) Inode table at 5-515 (+5) 3734 free blocks, 16338 free inodes, 2 directories |
debugfs 是一个文件系统调试器。它允许直接访问存储在磁盘上的文件系统数据结构,因此可以用来修复损坏到 fsck 无法自动修复的磁盘。它也被用于恢复已删除的文件。但是,使用 debugfs 需要您非常了解自己在做什么;如果不了解,可能会破坏所有数据。
dump 和 restore 可以用来备份 ext2 文件系统。它们是传统 UNIX 备份工具的 ext2 特定版本。有关备份的更多信息,请参见第 12.1 节。