Linux 文件系统精通指南(1)(2)
要使分区后的磁盘可用,必须在其上构建文件系统。这种情况下,通常还将文件系统称作“分区类型”、“基于磁盘的文件系统”和“文件系统类型”。实际上,可以将这些文件系统看作是文件管理系统,这是因为该称呼正体现了它们的功能:它们通过维护文件上的元数据,使系统上的文件保持状态一致。
Linux 项目的特点之一是需要实现与每个可用实用程序的多个样式和首选设置的兼容性,而这种兼容性在可用文件管理系统的选择上体现得最为明显。Linux 内核内部的虚拟文件系统 (VFS) 实现了此选择。VFS 采用了一组可由其他文件管理系统使用的基本数据结构。这些数据结构是超级块、inode、dentry或目录文件)和数据块。
每个分区都包含一个超级块,用于维护分区中文件系统上的信息,包括一组在每个超级块中唯一编号的 inode、空闲 inode 的数目以及 inode 总数、数据块总数、空闲数据块数和文件系统的状态。文件系统的状态有两种:干净当文件处于未更改状态时)和脏当有未写入磁盘的文件系统更改时)。超级块中的一个 inode 对应着一个文件。
除文件名外,inode 包含了有关文件的所有信息,其中包括:
·地址
·类型
·大小
·所有者
·对文件数据所在块的引用
·文件最后一次修改和访问的时间戳。
可以使用以下命令查看文件的 inode:
$ ls -i
正如前面已经提到的,inode 只在超级块中唯一编号,且每个分区只有一个超级块,这就是硬链接无法跨越多个分区的原因。
文件名通过 dentry 对象用户看到的是目录文件)链接到一个 inode 编号。数据块保存实际的文件数据。
Linux 支持任何具备 VFS 定义的基本函数集的文件管理系统。对于像 vfat 这样的文件管理系统,Linux 项目提供了它自己的设备驱动程序。
您可以从以下输出中看到,不同的文件管理系统可以存在于同一系统的不同分区上。
#df -T
Filesystem Type 1K Blocks Used Available Use% Mounted on
/dev/hda6 reiserfs 4195632 2015020 2180612 49% /
/dev/hda5 ext2 14607 3778 10075 8% /boot
/dev/hda9 reiserfs 937372 202368 735004 22% /home
/dev/hda8 reiserfs 6297248 3882504 2414744 62% /opt
shmfs shm 256220 0 256220 0% /dev/shm
/dev/hda1 vfat 2159992 1854192 305800 86% /windows/C
当前,Oracle 用户遇到的最常用的文件管理系统是 ext2/ext3、ReiserFS不受 Oracle 支持)和 OCFS。以下是非 Oracle 分区主要特性的汇总表。
特性 | ext2 | ext3 | ReiserFS3.6不受 Oracle 支持) |
最大分区大小 | 4TB | 4TB | 16TB |
最大文件大小 | 2GB-4GB | 2GB-4GB | 8TB |
块大小 | 1KB-4KB | 1KB-4KB | 只有 4KB |
日志功能 | 无 | 是 | 有 |
崩溃后重新启动 | 慢 | 快 | 非常快 |
用于恢复清除文件的工具 | 有 | 有 | 无 |
崩溃后数据的状态 | 良好 | 非常好 | 一般 |
ACL 支持 | 有 | 有 | 无 |
稳定性 | 优秀 | 良好 | 良好 |
由于 ext2 和 ReiserFS 均提供了用户级安全性以及更高效的磁盘空间使用等特性,因此尽管至少 ext2 确实提供了碎片整理工具,但几乎不需要这些工具。Ext2 是传统的、事实上的标准 Linux 文件管理系统。它是 Red Hat 版本 Linux 的默认文件管理系统,而 ReiserFS 是 SUSE 的默认文件管理系统。ext2/ext3 的最大文件大小实际上取决于所选择的块大小和硬件体系结构。ext2 的许多特性之一是它允许由磁盘分区决定块大小。ReiserFS 技术允许在磁盘分区中使用可变的文件大小这是因为它基于平衡树技术而不是基于范围),因此除日志功能以外,高效的空间使用也是其设计所固有的。
日志文件管理系统如 ext3 和 ReiserFS)记录对文件系统元数据:inode、空闲块分配映射、inode 映射等的更改。当系统崩溃时,可以通过此方式检查日志以获得最近修改的元数据,从而确保快速恢复文件系统。此功能对大型系统尤其重要。如果没有此功能,则在出现硬件故障后,对于 ext2 等文件系统,需要在重新启动时运行 fsck 工具。对于大型文件系统,此过程可能要花费几个小时。
当然,记录日志需要付出一定的代价,即需要在处理时间和恢复之间寻求一个平衡。对于 ext3,可以选择日志记录模式,这些模式允许在寻求上述平衡时做出某些自主决定。journal 模式记录所有文件系统数据,包括数据块和元数据)是最安全但也是最慢的模式。默认模式称作 orderd)只记录元数据,但在写元数据之前先将数据块写入磁盘,从而在快速恢复和快速性能之间取得折衷。最快的模式是 writeback 模式,该模式只记录元数据。在此模式中,可能会丢失文件数据,但文件系统自身的完整性将得到维护。
在编写本文档期间,Reiser4 刚好已经发布。同 ReiserFS3.6 一样,ReiserFS4 只记录元数据。与 ReiserFS3.6 不同的是,它基于新的舞蹈树算法,此算法似乎比平衡树算法更快。它还可以扩展到使用无数个 CPU,而且在磁盘写入时具有内置加密和压缩功能。
OCFS 是 Oracle 真正应用程序集群 (RAC)、配置文件和数据库文件的指定文件管理系统。其他文件甚至是 Oracle 软件文件)将在 ext2/ext3 或 ReiserFS 上获得更好的性能。
当前,就文件管理系统的选择来讲,共同的见解是,除少数情况外,ext2、ext3 和 ReiserFS 之间的性能基本相当。然而在各种系统的拥护者之间却爆发了激烈的争论。ReiserFS 由于能够处理可变的文件大小,因此更适用于具有许多小文件的系统。当然,如果您正要或计划在 Linux 上运行 Oracle RAC,则可能需要为 Oracle 数据文件和配置文件安装 OCFS 或使用自动存储管理 (ASM)。
除了最常见的 ext2/ext3 和 ReiserFS 文件系统以外,Linux 还支持其他本地文件系统,包括 IBM 的 jsf 和 SGI 的 xfs。对传统 UNIX 文件系统的支持包括 SYSV、BSD、Solaris、Next 和 Veritas VxFS。在各个级别支持的其他文件系统包括
·Microsoft 的 fat、ntfs、vfat、fat32
·IBM 的 hpfs (OS/2)
·Apple 的 Macintosh hfs
·Amiga 的 affs
·Acorn 磁盘文件系统 adfs
请注意,Oracle 不支持某些文件系统,因此在使用这些文件系统时风险自负。
Linux 内核 2.6 版中最重要的新特性是访问控制列表 (ACL)。ACL 允许为一个或多个用户列表或用户组授予对单个文件的使用权限。其他新特性包括:
·对 CD-ROM 上使用的 ISO 9660 文件系统的增强支持
·可以存储在文件系统中的默认挂载选项
·用于加速文件搜索的索引目录
·对 Windows 的逻辑磁盘管理器动态磁盘)的支持
·能够将 ntfs 挂载为读/写,但写仍处于试验状态
·对 fat12旧 DOS 文件系统)的增强支持
评论暂时关闭