文件系统 HOWTO

Martin Hinner < martin@hinner.info>,http://martin.hinner.info

版本 0.8,2007 年 1 月
这份小型 HOWTO 是关于文件系统和访问文件系统的。它不像您可能期望的那样是 Linux 或 Unix 相关的文档。您可以在这里找到许多关于非 Unix(文件)系统的有趣信息,但 Unix 是我的主要兴趣所在 :-) 。更多信息和本文档的最新版本可以在 http://martin.hinner.info/fs/ 找到。

1. 简介

2.

3. DOS FAT 12/16/32, VFAT

4. 高性能文件系统 (HPFS)

5. 新技术文件系统 (NTFS)

6. 扩展文件系统 (Ext, Ext2, Ext3)

7. Macintosh 分层文件系统 - HFS

8. ISO 9660 - CD-ROM 文件系统

9. 其他文件系统

10. 原始分区

11. 附录


1. 简介

文件系统 HOWTO 是关于文件系统以及从各种操作系统访问文件系统的文档。尽管本文档是根据我所知的最佳知识汇编而成,但它可能并且很可能包含错误。如果您发现任何错误或过时的信息,请告诉我。我将尽力保持本文档的更新并尽可能无错误。也欢迎任何贡献,所以如果您想写任何关于文件系统的内容,请通过电子邮件与我联系。

更新:请注意,此 HOWTO 已超过 5 年未更新,并且确实包含一些过时的信息。我将尝试找一些时间为文件系统相关信息建立 WIKI 站点,以便任何人都可以做出贡献。有关更多信息,请参见下一章。

在您阅读此 HOWTO 之前,建议您阅读 Stein Gjoen 的 Disk-HOWTO(您可以从 http://sunsite.unc.edu/LDP/HOWTO/ 获取)。

此 HOWTO 可以从 http://martin.hinner.info/fs/http://metalab.unc.edu/filesystems/howto/ 获取。

如果您是日语用户,您可能会对 FUJIWARA Teruyoshi 将此 HOWTO 翻译成日语感兴趣。它可以在 http://www.linux.or.jp/JF/JFdocs/Filesystems-HOWTO.html 找到。SGML 源文件可以从 ftp://ftp.linet.gr.jp/pub/JF/sgml/Filesystems-HOWTO.sgml.gz 下载。

1.1 联系作者

您可以通过 martin@hinner.info 与我联系。我欢迎任何建议和更正,但在您提出问题之前,请先尝试在互联网上搜索。您还应该查看我的主页 (http://martin.hinner.info/) 以获取任何更新或其他信息。请注意,我非常忙于我的其他项目(例如 汽车诊断基于 ARM 的微处理器开发工具),并且我有一份全职工作(我在 SECONS Ltd.Fintera Ltd. 工作),所以我有非常有限的时间回复电子邮件。

1.2 HOWTO 维护

如果您想为本 HOWTO 做出贡献或接管维护工作,请查看作者的网站 (http://martin.hinner.info/) 并与他联系。

我还将尝试建立一个 wiki 风格的网站,用于文件系统相关信息,以便任何人都可以贡献,并且该网站稍后将与此 HOWTO 合并。所有这些活动都取决于我的空闲时间。

1.3 版权

文件系统 HOWTO,版权 (c) 1999-2000 Martin Hinner < martin@hinner.info>。

本 HOWTO 是免费文档;您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它;可以是许可证的第 2 版,或(由您选择)任何更高版本。

发布本 HOWTO 是希望它能有用,但不作任何担保;甚至不包含对适销性或特定用途适用性的暗示担保。有关更多详细信息,请参见 GNU 通用公共许可证。

您应该已收到随本文档或 GNU CC 一起提供的 GNU 通用公共许可证副本;如果没有,请写信至:Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA。

1.4 文件系统邮件列表

您可能想加入文件系统邮件列表。它旨在成为最终用户和开发人员的良好信息来源。因此,如果您有任何与文件系统相关的事情,请加入 ;-) 要订阅,请发送电子邮件至 < majordomo@penguin.cz> 并在电子邮件消息的正文(不是主题)中放入(不带引号):“subscribe fs-l”。

Linux 内核文件系统邮件列表

要加入 Linux 内核文件系统邮件列表 linux-fsdev@vger.rutgers.edu,请发送电子邮件至 listserv@vger.rutgers.edu。在邮件正文中放入 "subscribe linux-fsdev"

FreeBSD 文件系统邮件列表

要加入技术性 FreeBSD 文件系统邮件列表 freebsd-fs@FreeBSD.org,请发送电子邮件至 majordomo@FreeBSD.org。在邮件正文中放入 "subscribe freebsd-fs"

1.5 metalab.unc.edu 上的文件系统集合

文件系统集合是一个 FTP/WWW 站点,提供有关文件系统和文件系统相关程序和驱动程序的有用信息。它位于 http://metalab.unc.edu/filesystems/,或者仅 FTP 位于 ftp://metalab.unc.edu/pub/docs/filesystems/

1.6 致谢

最初的“文件系统访问 HOWTO”由 Georgatos Photis 编写(请参阅他的主页 http://students.ceid.upatras.gr/~gef/)。本 HOWTO 包含了他网页上的许多信息。谢谢你,Gef。

FUJIWARA Teruyoshi <fujiwara@linux.or.jp> 将此 HOWTO 翻译成日语。

其他为本 HOWTO 做出贡献或帮助我(直接或间接)的人员(按字母顺序排列)

非常感谢以上人员。如果我遗漏了任何人,请告知我。

1.7 文件系统可访问性地图

这是文件系统可访问性“地图”,按操作系统字母顺序排列。您可能会发现此列表有点混乱。这是因为 Linux sgmltools 不知道表。

您看到此“地图”仍未完成。我将尝试在不久的将来完成它。

FreeBSD: BSD FFS | Ext2 | HPFS | NTFS

Linux: AFFS| BeFS| BFS| Ext2 FS| BSD FFS| HPFS| Qnx4 FS| Xia

NetBSD: BSD FFS | FAT12/16 | ISO9660

NetWare 2.x: NWFS-286

NetWare 3.x, 4.x: NWFS-386 | ISO9660

NetWare 5.x: NWFS-386 | NSS | ISO9660

OpenBSD: BSD FFS | FAT12/16

OS/2: Ext2 FS | FAT12/16/32 | HPFS | HPFS | ISO 9660 | JFS | VFAT

QNX 4: FAT12/16 | ISO 9660 | Qnx4 FS

SCO OpenServer: AFS| DTFS| EAFS| HTFS| ISO 9660 | S51K

SCO UnixWare: BFS| DTFS| ISO 9660 | System V| VxFS

1.8 连续分配文件系统简介

一些连续文件系统:BFSISO9660 和扩展

1.9 链表分配文件系统简介

1.10 基于 FAT 的文件系统简介

(待办)

一些 FAT 文件系统:FAT12/16/32,VFATNetWare 文件系统

1.11 Inode 文件系统简介

(待办)

1.12 区段文件系统简介

(待办)

一些“区段”文件系统:EFSVxFS

1.13 使用平衡树的文件系统简介

(待办)

一些使用 B+ 树的文件系统:HFSNSSReiser FSSpiralog 文件系统

1.14 日志/Journaling 文件系统简介

文件系统通过同步写入来更新其结构信息(称为元数据)。每个元数据更新可能需要多次单独写入,如果系统在写入序列期间崩溃,元数据可能处于不一致状态。

在下次启动时,文件系统检查实用程序(称为 fsck)必须遍历元数据结构,检查和修复它们。在大型文件系统上,此操作需要非常非常长的时间。并且磁盘可能不包含足够的信息来纠正结构。这会导致文件错位或删除。

Journaling 文件系统使用一个单独的区域,称为日志或 journal。在实际执行元数据更改之前,它们会被记录到这个单独的区域。然后执行操作。如果系统在操作期间崩溃,则日志中有足够的信息来“重放”日志记录并完成操作。

这种方法不需要对文件系统进行全面扫描,从而在大型文件系统上产生非常快速的文件系统检查时间,通常对于多千兆字节的文件系统只需几秒钟。此外,由于保存了待处理操作的所有信息,因此无需删除或丢失和查找移动。Journaling 文件系统的缺点是它们比其他文件系统慢。

一些 Journaling 文件系统:BeFSHTFSJFSNSSSpiralog 文件系统VxFSXFS

1.15 其他文件系统特性

配额

快照

ACL


2.

2.1 PC 分区

GNU parted

GNU Parted 是一个用于创建、销毁、调整大小、检查和复制分区以及其上的文件系统的程序。

这对于为新操作系统创建空间、重新组织磁盘使用、在硬盘之间复制数据以及“磁盘映像” - 在多台计算机上复制安装非常有用。

Parted 支持以下操作

Filesystem      detect  create  resize  copy    check
ext2            *       *       *1      *2      *3
fat             *       *       *4      *4      *
linux-swap      *       *       *       *       *

注释

(1) 分区的起始位置对于 ext2 必须保持固定。

(2) 您复制到的分区必须大于(或完全相同大小)您从中复制的分区。

(3) 在打开文件系统时会进行有限的检查。这是目前唯一的检查。如果文件系统中存在任何错误(以及通常绝大多数错误),所有命令(包括调整大小)都会优雅地失败,使文件系统保持完好无损。

(4) 调整大小或复制后,新分区的大小受到 fat 的簇大小的限制(主要影响 FAT16)。这比您想象的更糟糕,因为您无法选择您的簇大小(这是 Windows 中的一个 bug,但您想要兼容性,对吗?)。

因此,实际上,您始终可以缩小分区(因为 Parted 可以缩小簇大小),但您可能无法将分区增长到您想要的大小。如果您使用 FAT32 没有问题,您将始终能够将分区增长到您想要的大小。

总结:您始终可以缩小分区。如果您因某种原因无法使用 FAT32,您可能无法增长分区。

修复损坏的分区表

Fixdisktable

这是一个处理 ext2、FAT、NTFS、ufs、BSD 磁盘标签(但尚未处理旧的 Linux 交换分区)的实用程序;如果您授予它权限,它实际上会重写分区表。

gpart

GPART 是一个实用程序,用于处理 ext2、FAT、Linux 交换、HPFS、NTFS、FreeBSD 和 Solaris/x86 磁盘标签、minix、reiser fs;它打印主要分区表的建议内容,并且文档齐全。

rescuept

识别 ext2 超级块、FAT 分区、交换分区和扩展分区表;它也可能识别 BSD 磁盘标签和 Unixware 7 分区。它打印出可以与 fdisk 或 sfdisk 一起使用以重建分区表的信息。它位于 util-linux 发行版的未安装部分。

findsuper

小型实用程序,用于查找具有 ext2 超级块签名的块,并打印出位置和一些信息。它位于 e2progs 发行版的未安装部分。

2.2 其他分区

因为我使用 Intel x86 机器,所以非常欢迎任何贡献(或非 x86 机器捐赠 ;-) )。如果您可以提供任何有用的信息,请随时发送邮件给

ADFS 分区

Amiga 分区

ATARI 分区

Macintosh 分区

OSF 分区

Sun 分区

Ultrix 分区

2.3 Unix 磁盘标签

(待办)

BSD 磁盘标签

(待办)

UnixWare 磁盘标签

UnixWare VTOC(卷表目录)将磁盘分区划分为 16 个逻辑分区。Linux 内核支持 UnixWare VTOC,您必须选中“UnixWare 切片支持 (EXPERIMENTAL)”并重新编译您的内核。读取 UnixWare 磁盘标签的另一种方法是使用 prtvtoc(1) 命令的 GPL 端口,它在 vxtools 包中。

SCO OpenServer 磁盘标签

(待办)

Sun Solaris 磁盘标签

(待办)

2.4 Windows NT 卷

此 linux 内核驱动程序允许您访问和挂载线性和条带集卷。

使用 FTEdit 修复“容错”NTFS 磁盘

如果您有配置为容错 (FT) 分区(例如带奇偶校验的条带和卷集)的 Windows NT 工作站或服务器,并且这些分区无法访问并在磁盘管理器中显示为“未知”类型,则您可以尝试使用实用程序 FTEDIT 再次使其可访问。

2.5 MD - Linux 的多设备驱动程序

此驱动程序使您可以将多个硬盘分区组合到一个逻辑块设备中。这可以用于简单地将一个分区附加到另一个分区,或者将多个冗余硬盘组合到 RAID1/4/5 设备,以便提供针对硬盘故障的保护。这称为“软件 RAID”,因为分区的组合由内核完成。

2.6 LVM - 逻辑卷管理器 (HP-UX LVM?)

Linux 实现可在此处获得

2.7 VxVM - Veritas 卷管理器

有关 Veritas 卷管理器的更多信息,请参见 http://www.veritas.com/

另请参见:VxFS (Veritas Journaling 文件系统)

2.8 IBM OS/2 LVM

逻辑卷管理器在 OS/2 WarpServer 5 中可用。它允许您在多个磁盘/分区上创建线性卷。有人说它与 IBM AIX 逻辑卷管理器兼容。

另请参见:HPFSJFS

2.9 StackVM

StackVM 是 CrosStor 的卷管理器。使用 StackVM,管理员可以将多个物理磁盘切片组合成一个称为 vdisk 的单个逻辑设备。Vdisk 是虚拟磁盘的缩写。物理磁盘可以组合形成串联、RAID 0(条带化)、RAID 1(镜像)、RAID 4 或 RAID 5。此外,单个磁盘分区可以细分为多个简单 vdisk。有关更多信息,请参见 CrosStor 主页 http://www.crosstor.com/

2.10 Novell NetWare 卷

NetWare 卷用于 NWFS-386 文件系统。


3. DOS FAT 12/16/32, VFAT

3.1 VFAT:长文件名

Windows 95/98 和 Windows NT/2000 将长文件名存储在 FAT 的特殊目录项中,这些目录项设置了 ReadOnlyHiddenSystemVolume 属性,因此如果您从 DOS 访问 FAT 卷,您将看不到这些“文件”。这些特殊条目具有这种疯狂的结构

byte              sequence number for slot
string(10)        first 5 characters in name 
byte              attribute byte 
byte              always 0
byte              checksum for 8.3 alias
string(12)        6 more characters in name
word              starting cluster number, 0 in long slots
string(4)         last 2 characters in name

当您从不支持 VFAT 的系统删除或修改带有长文件名的文件时,问题就出现了,因为只有 DOS 8+3 条目会被删除或修改。Windows 95/98 的 Scandisk 可以修复此问题。

3.2 UMSDOS:Linux 在 FAT 文件系统上的 LFN/属性

Linux 拥有自己的 FAT 扩展,它为您提供 FAT 分区上的长文件名、权限和所有者、链接和特殊设备,称为 UMSDOS。每个目录都包含名为 "--linux-.---" 的文件。长名称和其他必要字段存储在其中。有关更多信息,请参阅文件 /usr/src/linux/Documentation/filesystems/umsdos.txt。Linux umsdos 驱动程序的作者是 Jacques Gelinas < jacques@solucorp.qc.ca>,目前由 Matija Nalis < mnalis@jagor.srce.hr> 维护。

3.3 OS/2 在 FAT 文件系统上的扩展属性

OS/2 Warp 版本 3、4 和 5 将长文件名和扩展属性存储在 FAT 卷上的文件“\ea data. sf”和“\wp root. sf”中(这两个文件都在文件系统的根目录中)。据我所知,没有任何其他操作系统已知实现 OS/2 EA。如果您可以提供有关 EA 结构的任何信息,请随时邮寄至

3.4 Star LFN

Star LFN 是一个模拟器,允许在 DOS 4.0 或更高版本下运行的程序使用 Windows 95 DOS 窗口中存在的长文件名功能。目前,它只能从系统+隐藏文件中读取和写入长文件名,这意味着您既不能读取也不能写入真正的 Windows 95 长文件名。有关更多信息,请参阅 http://sta.c64.org/starlfn.html

3.5 从 OS/2 访问 VFAT (VFAT-OS2)

VFAT-OS2 是一个软件包,它允许 OS/2 无缝访问来自 OS/2 的 Windows 95 VFAT 格式化分区,就像它们是标准的 OS/2 驱动器盘符一样。此软件包的最终目标是能够使用 VFAT 文件系统来替代 FAT。它现在还可以以只读模式访问 NTFS 分区。

3.6 从 DOS 访问 VFAT (LFNDOS 驱动程序)

有些人说 Microsoft 发布了一个名为 LFNDOS 的驱动程序,它在 DOS 下提供了 Microsoft 长文件名 API。如果您知道可以在哪里下载此驱动程序,请给我发送电子邮件。

3.7 从 DOS 访问 VFAT (免费 LFNDOS 驱动程序)

LFNDOS 为 DOS 程序提供 Windows 95 长文件名 (LFN) API。它使用与 Windows 95 相同的格式在磁盘上存储名称,因此您可以在两个系统下互换查看和使用长文件名。它作为常驻内存程序运行,常驻时需要大约 60k 的常规内存。

在 Windows 95 下,DOS 程序可以通过调用 Windows 提供的一组中断函数来使用长文件名。例如,COMMAND.COM 在从 Windows 作为 DOS 提示符运行时将允许长文件名,但如果您在 MS-DOS 模式下重新启动则不允许。诸如 EDIT.COM 和所有 DJGPP 程序之类的其他程序在可用时会使用长文件名。

3.8 从 DOS 访问 VFAT (Odi 的 LFN 工具)

这些工具提供了在 DOS 下使用由 Windows 95/98 在 FAT32、FAT16 和 FAT12 文件系统上创建的长文件名进行轻松文件管理。键入 LDIR 会显示带有其长文件名的目录。使用 LCOPY 复制文件会保留长文件名。您甚至可以使用长名称创建目录 (LMD) 或使用长名称重命名文件 (LREN)。

3.9 从 OS/2 访问 FAT32 (FAT32.IFS)

用于 OS/2 的 FAT32.IFS 将允许您从 OS/2 访问 FAT32 分区。您无法创建 FAT32 分区,您仍然需要 Win95 OSR2 才能执行此操作。此外,OS/2 的 CHKDSK 无法修复可能发生的所有错误,您必须使用 Windows 95 Scandisk 来修复某些错误。

3.10 从 Windows NT 4.0 访问 FAT32

适用于 NT 4.0 和 NT 3.51 的 FAT32 文件系统驱动程序。

3.11 从 Windows NT 4.0 访问 FAT32

这是 Windows NT(R) 4.0 的 FAT32 文件系统驱动程序。安装后,系统上存在的任何 FAT32 驱动器都将作为本机 Windows NT 卷完全可访问。免费版本提供只读功能。读/写版本可供出售。

3.12 从 Linux 访问 Stac/Dblspaced/Drvspaced 驱动器 (DMSDOS)

DMSDOS 读取和写入压缩的 DOS 文件系统 (CVF-FAT)。支持以下配置它适用于 FAT32、NLS、代码页(在 Linux 2.0.33 下使用 fat32 补丁版本 0.2.8 以及在标准 2.1.xx 内核和 2.0.34+35 中使用 fat32 进行了测试)。Dmsdos 可以与 vfat 或 umsdos 一起运行以获得长文件名。它已经过重新设计以准备好用于 SMP,现在应该可以在 libc6 下完全编译。

3.13 从 Linux 访问 Dblspaced/Drvspaced 驱动器 (thsfs)

3.14 Fsresize - FAT16/32 分区调整工具

调整 FAT16/FAT32 文件系统的大小。它不需要任何其他程序(如碎片整理程序)。它具有 --backup 和 --restore 选项,因此如果发生电源故障(或错误),您始终可以返回。备份文件通常 < 1 MB。

作者可能不会发布更多版本的 fsresize,因为他正在开发 parted - Partition Magic 的克隆。它将能够调整大小、复制、创建和检查文件系统/分区。

3.15 FIPS - FAT16 分区调整工具


4. 高性能文件系统 (HPFS)

良好的 HPFS 链接

4.1 从 DOS 访问 HPFS (iHPFS)

iHPFS 使 OS/2 用户在启动纯 DOS 时可以使用他们的 HPFS 分区。HPFS 分区被分配一个驱动器盘符,并且可以像任何 DOS 驱动器一样访问。iHPFS 仅限于只读访问。

此程序不再开发,因为作者不使用 OS/2。如果您愿意维护该程序,请告知他。

4.2 从 DOS 访问 HPFS (hpfsdos)

4.3 从 DOS 访问 HPFS (hpfsa)

4.4 从 DOS 访问 HPFS (amos)

4.5 从 Linux 访问 HPFS

此驱动程序是 Linux 内核 (2.1.x+) 的一部分。它可以读取和写入 HPFS 分区。访问权限和所有者可以存储在扩展属性中。原始只读 HPFS 中的一些错误已得到纠正。它支持 Warp Server Advanced 上的 HPFS386。

如果您的内核支持 HPFS,请在“文件系统”子菜单中对“OS/2 HPFS 文件系统支持”说“是”(“Y”es)。然后使用“make dep bzImage”重新编译内核,重新启动并尝试挂载您的 HPFS 分区(例如 mount /dev/hda2 /mnt -t hpfs)。

4.6 从 FreeBSD 访问 HPFS

驱动程序允许将 HPFS 卷挂载到 Unix 命名空间中。目前仅支持只读访问。

4.7 从 Windows NT 3.5 访问 HPFS

此程序将编辑 Windows NT 注册表并启用 HPFS 支持。Pinball.sys 是 Windows NT 的 HPFS 文件系统驱动程序。它可以在 NT 3.5x 的 CD-ROM 上找到。Microsoft 不再支持 HPFS。安装此程序将使您的保修和可能的许可协议失效。

4.8 从 Windows NT 4 访问 HPFS

适用于 Windows NT 4.0 的 HPFS 驱动程序


5. 新技术文件系统 (NTFS)

参考资料

5.1 从 DOS 访问 NTFS (NTFSDOS.EXE)

NTFSDOS.EXE 是一个适用于 DOS/Windows 的网络文件系统重定向器,它能够识别和挂载 NTFS 驱动器以进行透明访问。它使 NTFS 驱动器看起来与标准 FAT 驱动器没有区别,从而可以从 DOS 或 Windows(包括从 Windows 3.1 文件管理器和 Windows 95 资源管理器)导航、查看和执行它们上的程序。

5.2 从 DOS 访问 NTFS (ntpwd)

NTPwd 包含用于访问 NTFS 分区的命令行工具,它是 Linux 使用的驱动程序的 Dos 端口。它还包含一个用于更改 NT 密码的小实用程序。

5.3 从 OS/2 访问 NTFS

ntfs_003.zip 存档仅包含用于在 OS/2 中访问 NTFS 分区的命令行工具。用于访问 NTFS 的真正 IFS 包含在 VFAT-OS2 v0.05 中。

5.4 从 Linux 访问 NTFS

既可以用作内核驱动程序,也可以用作一组命令行实用程序。

5.5 从 FreeBSD 和 NetBSD 访问 NTFS

驱动程序允许在 FreeBSD 和 NetBSD 下挂载 NTFS 卷。我们还支持有限的写入能力:您可以写入未压缩的无空洞文件,但您还不能更改文件的大小。写入支持是为了在 NTFS 卷上进行交换。

5.6 从 BeOS 访问 NTFS

这是 BeOS 的 NTFS 驱动程序的 ALPHA 版本。它不是世界上最完善的东西,但作者发布的每个版本都比上一个版本更稳定。他刚刚实现了压缩文件读取,因此请小心使用它们。他还最终处理了 NTFS 5 卷,并设法根除了一些错误。

作者现在为 Be Inc 工作,因此您不会在网络上看到他的 NTFS 和 ext2 文件系统支持得到更多更新。驱动程序将被拉入未来的 BeOS 版本中。

5.7 从 BeOS 访问 NTFS (另一个)

5.8 使用 NTFSDOS 工具修复 NTFS

NTFSDOS 的附加组件,允许用户重命名现有文件或用新数据覆盖文件。功能非常有限。

5.9 使用 NTRecover 修复 NTFS

使用启动软盘和到第二个 NT 系统的串行连接,以提供对已死 NT 系统上 NTFS 驱动器的完全访问权限。非常适合抢救数据或更换驱动程序。


6. 扩展文件系统 (Ext, Ext2, Ext3)

扩展文件系统 (ext fs)、第二扩展文件系统 (ext2fs) 和第三扩展文件系统 (ext3fs) 由 Rmy Card、Laboratoire MASI--Institut Blaise Pascal,< card@masi.ibp.fr>、Theodore Ts'o、麻省理工学院,< tytso@mit.edu> 和 Stephen Tweedie、爱丁堡大学,< sct@redhat.com> 在 Linux 上设计和实现

6.1 扩展文件系统 (ExtFS)

这是早期 Linux 系统中使用的旧文件系统。

6.2 第二扩展文件系统 (Ext2 FS)

第二扩展文件系统可能是 Linux 社区中使用最广泛的文件系统。它提供标准的 Unix 文件语义和高级功能。此外,由于内核代码中包含的优化,它非常强大并提供出色的性能。

由于 Ext2fs 在设计时就考虑到了发展,因此它包含可用于添加新功能的钩子。有些人正在研究当前文件系统的扩展:符合 Posix 语义的访问控制列表、取消删除和即时文件压缩。

Ext2fs 最初是在 Linux 内核中开发和集成的,现在正积极移植到其他操作系统。已经在 GNU Hurd 之上实现了运行在 Ext2fs 服务器。人们还在 Mach 微内核之上的 LITES 服务器和 VSTa 操作系统中进行 Ext2fs 端口的开发。最后但并非最不重要的一点是,Ext2fs 是 Masix 操作系统的重要组成部分,目前正在由作者之一开发。

动机

第二扩展文件系统的设计和实现是为了解决第一个扩展文件系统中存在的一些问题。我们的目标是提供一个强大的文件系统,该文件系统实现 Unix 文件语义并提供高级功能。

当然,我们希望 Ext2fs 具有出色的性能。我们还希望提供一个非常强大的文件系统,以减少在密集使用中数据丢失的风险。最后但并非最不重要的一点是,Ext2fs 必须包含扩展条款,以允许用户在无需重新格式化文件系统的情况下从新功能中受益。

“标准” Ext2fs 功能

Ext2fs 支持标准的 Unix 文件类型:常规文件、目录、设备特殊文件和符号链接。

Ext2fs 能够管理在非常大的分区上创建的文件系统。虽然原始内核代码将最大文件系统大小限制为 2 GB,但 VFS 层中的最新工作已将此限制提高到 4 TB。因此,现在可以使用大磁盘,而无需创建多个分区。

Ext2fs 提供长文件名。它使用可变长度的目录项。最大文件名大小为 255 个字符。如果需要,此限制可以扩展到 1012。

Ext2fs 为超级用户 (root) 保留了一些块。通常,保留 5% 的块。这允许管理员轻松地从用户进程填满文件系统的情况中恢复。

“高级” Ext2fs 功能

除了标准的 Unix 功能外,Ext2fs 还支持一些通常在 Unix 文件系统中不存在的扩展。

文件属性允许用户在对一组文件执行操作时修改内核行为。可以在文件或目录上设置属性。在后一种情况下,在目录中创建的新文件将继承这些属性。

可以在挂载时选择 BSD 或 System V Release 4 语义。挂载选项允许管理员选择文件创建语义。在以 BSD 语义挂载的文件系统上,文件是使用与其父目录相同的组 ID 创建的。System V 语义稍微复杂一些:如果目录设置了 setgid 位,则新文件继承目录的组 ID,子目录继承组 ID 和 setgid 位;在另一种情况下,文件和子目录是使用调用进程的主组 ID 创建的。

BSD 样式的同步更新可以在 Ext2fs 中使用。挂载选项允许管理员请求在修改元数据(inode、位图块、间接块和目录块)时将其同步写入磁盘。这对于保持严格的元数据一致性很有用,但这会导致性能不佳。实际上,此功能通常不使用,因为除了与使用元数据的同步更新相关的性能损失之外,它还可能导致用户数据损坏,而文件系统检查器不会标记该损坏。

Ext2fs 允许管理员在创建文件系统时选择逻辑块大小。块大小通常可以是 1024、2048 和 4096 字节。使用大块大小可以加快 I/O 速度,因为访问文件需要更少的 I/O 请求,因此需要更少的磁盘磁头寻道。另一方面,大块会浪费更多磁盘空间:平均而言,分配给文件的最后一个块仅半满,因此随着块变大,每个文件的最后一个块中会浪费更多空间。此外,Ext2 文件系统的预分配技术获得了更大的块大小的大部分优势。

Ext2fs 实现了快速符号链接。快速符号链接不使用文件系统上的任何数据块。目标名称不存储在数据块中,而是存储在 inode 本身中。此策略可以节省一些磁盘空间(无需分配数据块)并加快链接操作(访问此类链接时无需读取数据块)。当然,inode 中可用的空间是有限的,因此并非每个链接都可以实现为快速符号链接。快速符号链接中目标名称的最大大小为 60 个字符。我们计划在不久的将来将此方案扩展到小文件。

Ext2fs 跟踪文件系统状态。内核代码使用超级块中的一个特殊字段来指示文件系统的状态。当文件系统以读/写模式挂载时,其状态设置为“未清理”。当它被卸载或以只读模式重新挂载时,其状态将重置为“已清理”。在启动时,文件系统检查器使用此信息来决定是否必须检查文件系统。内核代码还在该字段中记录错误。当内核代码检测到不一致时,文件系统将标记为“错误”。文件系统检查器会测试这一点,以强制检查文件系统,而不管其表面上是否处于清理状态。

始终跳过文件系统检查有时可能很危险,因此 Ext2fs 提供了两种方法来强制定期检查。挂载计数器在超级块中维护。每次文件系统以读/写模式挂载时,此计数器都会递增。当它达到最大值(也记录在超级块中)时,即使文件系统“已清理”,文件系统检查器也会强制检查。上次检查时间和最大检查间隔也保存在超级块中。这两个字段允许管理员请求定期检查。当达到最大检查间隔时,检查器将忽略文件系统状态并强制执行文件系统检查。

属性允许用户请求对文件进行安全删除。当删除此类文件时,随机数据会写入先前分配给该文件的磁盘块中。这可以防止恶意人员通过使用磁盘编辑器来访问文件的先前内容。

最后,最近已将受 4.4 BSD 文件系统启发的新类型文件添加到 Ext2fs 中。不可变文件只能读取:任何人都不能写入或删除它们。这可以用于保护敏感的配置文件。追加文件可以以写入模式打开,但数据始终追加到文件末尾。与不可变文件一样,它们不能被删除或重命名。这对于只能增长的日志文件尤其有用。

物理结构

Ext2 文件系统的物理结构受到 BSD 文件系统布局的强烈影响。文件系统由块组组成。块组类似于 BSD FFS 的柱面组。但是,块组与磁盘上块的物理布局无关,因为现代驱动器倾向于针对顺序访问进行优化,并向操作系统隐藏其物理几何形状。

,---------+---------+---------+---------+---------,
| Boot    | Block   | Block   |   ...   | Block   |
| sector  | group 1 | group 2 |         | group n |
`---------+---------+---------+---------+---------'

每个块组都包含关键文件系统控制信息(超级块和文件系统描述符)的冗余副本,并且还包含文件系统的一部分(块位图、inode 位图、inode 表的一部分和数据块)。块组的结构在此表中表示

,---------+---------+---------+---------+---------+---------,
| Super   | FS      | Block   | Inode   | Inode   | Data    |
| block   | desc.   | bitmap  | bitmap  | table   | blocks  |
`---------+---------+---------+---------+---------+---------'

就可靠性而言,使用块组是一个巨大的胜利:由于控制结构在每个块组中复制,因此很容易从超级块已损坏的文件系统中恢复。这种结构也有助于获得良好的性能:通过减少 inode 表和数据块之间的距离,可以在文件上的 I/O 期间减少磁盘磁头寻道。

在 Ext2fs 中,目录作为可变长度条目的链表进行管理。每个条目都包含 inode 号、条目长度、文件名及其长度。通过使用可变长度条目,可以在目录中实现长文件名,而不会浪费磁盘空间。

性能优化

在 Linux 中,Ext2fs 内核代码包含许多性能优化,这些优化倾向于提高在读取和写入文件时的 I/O 速度。

Ext2fs 通过执行预读来利用缓冲区缓存管理:当需要读取一个块时,内核代码会请求对多个连续块执行 I/O 操作。 这样,它试图确保要读取的下一个块已经加载到缓冲区缓存中。 预读通常在文件上的顺序读取期间执行,Ext2fs 将其扩展到目录读取,包括显式读取(readdir(2) 调用)或隐式读取(namei 内核目录查找)。

Ext2fs 还包含许多分配优化。 块组用于将相关的 inode 和数据聚集在一起:内核代码始终尝试将文件的数据块分配到与其 inode 相同的组中。 这样做旨在减少内核读取 inode 及其数据块时产生的磁盘磁头寻道次数。

当向文件写入数据时,Ext2fs 在分配新块时会预先分配最多 8 个相邻块。 即使在非常满的文件系统上,预分配命中率也约为 75%。 这种预分配在重负载下实现了良好的写入性能。 它还允许将连续的块分配给文件,从而加快了未来的顺序读取速度。

这两种分配优化产生了非常好的局部性,体现在

6.3 第三代扩展文件系统 (Ext3 FS)

Ext3 支持与 Ext2 相同的功能,但还包括日志功能(Journaling)。 您可以从 ftp://ftp.uk.linux.org/pub/linux/sct/fs/jfs/ 下载预发布版本。

6.4 E2compr - Ext2fs 透明压缩

为 ext2 文件系统实现 `chattr +c' 功能。 软件包括一个 Linux 内核补丁,以及各种软件的修补版本(主要是 e2fsprogs,即 e2fsck 及其相关工具)。 虽然有些人已经依赖它多年,但此软件仍处于开发阶段,尚未准备好供终端用户使用。

6.5 从 DOS 访问 Ext2 (Ext2 tools)

一组 DOS 程序,允许您从 DOS 读取 Linux ext2 文件系统。

6.6 从 DOS、Windows 9x/NT 和其他 Unix 系统访问 Ext2 (LTools)

LTOOLS 在 DOS/Windows 3.x/Windows 9x/Windows NT 或非 Linux-UNIX 系统下使用,就像 MTOOLS 在 Linux 下使用一样。 当您运行其他操作系统之一时,您可以访问(读取、写入、修改)您的 Linux 文件。 LTOOLS 的核心是一组命令行程序。 此外,还提供一个 JAVA 程序作为独立的图形用户界面。 或者,您可以使用标准 Web 浏览器作为图形用户界面。 LTOOLS 不仅提供对您自己机器上的 Linux 文件的访问,还提供对其他机器上的文件的远程访问。

6.7 从 OS/2 访问 Ext2

EXT2-OS2 是一个软件包,允许 OS/2 无缝访问 Linux ext2 格式化的分区,就像它们是标准的 OS/2 驱动器盘符一样。 此软件包的最终目标是能够使用 ext2 文件系统来替代 FAT 或 HPFS。 目前,实现此目标的唯一缺少的功能是对 OS/2 扩展属性的支持。

6.8 从 Windows 95/98 访问 Ext2 (FSDEXT2)

6.9 从 Windows 95 访问 Ext2 (Explore2fs)

一个用户空间应用程序,可以读取和写入第二代扩展文件系统 ext2。 支持硬盘和可移动介质,包括 zip 和软盘。 使用类似 Windows 资源管理器的界面来显示文件和详细信息。 支持拖放、上下文菜单等。 为 Windows NT 编写,但对 Windows 95 有一些支持。 大磁盘可能会导致问题。

6.10 从 Windows NT 访问 Ext2 (ext2fsnt)

6.11 从 BeOS 访问 Ext2

这是一个驱动程序,允许 BeOS 挂载 Linux Ext2 文件系统。 当前发布的版本被作者认为非常稳定。 人们已经使用它很长时间了,没有错误报告。

作者现在在 Be Inc 工作,所以您不会看到他在网上更新更多的 ext2 和 NTFS 文件系统支持。 这些驱动程序将被拉入未来的 BeOS 版本中。

6.12 从 MacOS 访问 Ext2 (MountX)

MacOS 驱动程序,允许您在 Macintosh 上挂载 ext2 文件系统(Linux 和 MkLinux)。

6.13 从 MiNT 访问 Ext2

这是一个用于 FreeMiNT 的功能齐全的 Ext2 文件系统驱动程序。 它可以读取和写入 Linux 中实现的实际 ext2 版本。 分区大小不受限制,逻辑扇区大小可以是 1024、2048 或 4096 字节。 唯一的限制是物理扇区大小小于或等于逻辑扇区大小。 如果您使用 mke2fs 初始化分区,则可以配置块大小。

6.14 Ext2fs 碎片整理

为您的 ext2 文件系统进行碎片整理。 需要更新以支持 glib 库。

6.15 Ext2fs 调整大小

调整第二代扩展文件系统的大小。

6.16 Ext2end

LVM 一起使用。 包含 2 个实用程序。 ext2endable 重新组织一个空的 ext2 文件系统,使其可以扩展,而 ext2end 扩展一个未挂载的 ext2 文件系统。 如果在创建文件系统时未运行 ext2endable,则 ext2end 只能将其扩展到下一个 256MB 的倍数。

6.17 使用 E2fsprogs 修复/分析/创建 Ext2

ext2fsprogs 软件包包含必要的 ext2 文件系统实用程序,其中包括 e2fsck、mke2fs、debugfs、dumpe2fs、tune2fs 以及大多数其他核心 ext2 文件系统实用程序。

6.18 Ext2 文件系统编辑器 - Ext2ed

EXT2ED 是扩展第二代文件系统的磁盘编辑器。 它将以友好且直观的方式向您展示 ext2 文件系统结构,让您轻松地在它们之间“穿梭”并进行必要的修改。

6.19 Linux 文件系统编辑器 - lde

它允许您查看一些 Linux 文件系统,现在支持十六进制块和 inode 编辑,您可以使用它将擦除的文件转储到另一个分区,只需少量工作即可。 支持 ext2、minix 和 xiafs。 包括 LaTeX Minix 文件系统介绍。 由于内核中缺少 Xia 头文件,您必须修补源代码才能在 2.2.x 和 2.3.x 内核上编译。

6.20 Ext2 恢复删除实用程序

这是内核 2.0.30 的补丁,它使用 ext2fs 提供的 “undeletable” 属性添加了恢复删除功能。 此补丁包括 man 手册页、undelete 守护程序和实用程序。 请查看我们的网页以获取最新和最棒的版本。


7. Macintosh 分层文件系统 - HFS

除软盘外,所有 Macintosh 存储设备都分区为一个或多个卷。 卷可以包含四种类型的项目:文件、目录、目录线程和文件线程。 每个项目都由一个目录记录描述,该记录类似于 Unix inode。 目录记录在磁盘目录 B 树中组织。 目录内容来自搜索目录 B 树。 只有文件可以占用目录记录之外的空间。

一个 Macintosh “文件” 包含两个组件,或称为叉(fork)。 资源叉(resource fork)是一个索引文件,包含代码段、菜单项、对话框等。 数据叉(data fork)具有 Unix 文件内容的 “字节流” 语义。 每个叉由一个或多个区段(extent)或连续的块运行组成。 区段描述符将区段的起始块和长度编码为 32 位量。 每个叉的第一个区段记录(三个区段描述符)是文件目录记录的一部分。 任何进一步的区段记录都保存在区段溢出 B 树中。

除了文件和 B 树区段外,卷还包含两个引导块、一个卷信息块和一个可用空间位图。 磁盘数据结构中存在大量的冗余,这提高了崩溃恢复能力。 虽然严格来说不是文件系统的一部分,但应该注意的是,几个目录记录字段被 Finder 独占使用,Finder 是一个处理用户访问文件系统的程序,并自动维护应用程序和数据文件之间的关联。 因此,HFS 还必须维护此 Finder 信息。

HFS 卷上的每个文件和目录都有一个标识号,类似于 Unix 文件系统中的 inode 号。 但是,文件或目录是通过其父目录的标识号和文件或目录的文件名命名的,文件名是一个 32 个字符的字符串,可以包含空字符。 此组合是卷目录 B 树的搜索键。 目录 B 树与传统的 B 树结构不同,因为 B 树每一层的所有节点都链接在一起形成双向链表,并且所有记录都在叶节点中。 这些变体允许通过使用链表遍历叶节点来访问同一目录中的许多项目。 严格来说,HFS B 树是 B+ 树的变体,尽管 Apple 的技术文档称它们为 B* 树。

每个目录,包括根目录,都包含其目录线程,该线程具有空文件名。 目录线程记录包含目录的名称和目录父目录的 ID。 类似地,文件线程包含文件的名称和它们所在的目录的 ID。 虽然每个目录都必须包含一个目录线程,但文件线程非常罕见。 事实上,两者都是 HFS 冗余的例子 - 对于未损坏的树,线程不是绝对必要的。 文件和目录记录都包含 Finder 使用的 32 字节信息。 目录 B 树的头三个区段描述符保存在卷信息块中。 如果目录 B 树文件增长超过三个区段,则剩余的区段描述符保存在区段溢出中。

HFS 和 HFS+(也称为 Sequoia)文件系统都有很好的文档记录。 关于 HFS 的最佳技术信息来源可以在 Inside Macintosh 系列书籍中找到。 请查看 http://developer.apple.com/techpubs/mac/Files/Files-99.html。 HFS+ 文件系统在 Technote 1150 中进行了描述,可在线获取:http://developer.apple.com/technotes/tn/tn1150.html。 许多信息也可在其他技术说明中找到。 这些链接由 Paul H. Hargrove 收集

7.1 从 Linux 访问 HFS

7.2 从 OS/2 访问 HFS (HFS/2)

HFS/2 让 OS/2 用户可以无缝地读取和写入使用分层文件系统(Hierarchical File System)格式化的软盘上的文件,分层文件系统是 Macintosh 计算机使用的文件系统。 有了 HFS/2,Macintosh 软盘可以像普通软盘一样使用。

此程序不再开发,因为作者不使用 OS/2。如果您愿意维护该程序,请告知他。

7.3 从 Windows 95/98/NT 访问 HFS (HFV Explorer)

一个基于 hfsutils 的 Windows NT 和 Windows 9x 的 HFS 卷浏览器。 为所有在 Windows 上运行的主要 Macintosh 模拟器提供启动平台支持。

7.4 从 DOS 访问 HFS (MAC-ETTE)

Mac-ette 是一个 PC 实用程序,可以在配备 3.5 英寸高密度软盘驱动器的 PC 上读取、写入、格式化和复制 Macintosh HFS 格式的 1.4 兆字节软盘。

7.5 HFS 实用程序 (HFS utils)

hfsutils 软件包包含一组命令行实用程序,如 hformat、hmount、hdir、hcopy 等。 它们允许对 HFS 卷上的文件和目录进行读写访问。

7.6 MacFS:一个可移植的 Macintosh 文件系统库

这是一个 Macintosh 文件系统库,可以移植到各种操作系统和平台。 它提供了一个编程接口,足以创建用户级 API 以及对支持它们的操作系统的文件系统驱动程序。 作者实现并测试了这样一个用户级 API 和基于它的实用程序,以及一个实验性的 Unix 虚拟文件系统。 他们还描述了 Macintosh 分层文件系统及其实现,并指出该设计不太适合重入,并且其复杂的数据结构可能导致多程序环境中的实现速度缓慢。 性能测量表明,我们的实现在创建、删除、读取和写入小请求大小的文件时比本机 Macintosh 实现更快,但比 Berkeley Fast File System (FFS) 慢。 但是,本机 Macintosh 实现可以比我们的实现或 FFS 更快地执行大型读取和写入操作。


8. ISO 9660 - CD-ROM 文件系统

有用的 ISO-9660 链接

8.1 RockRidge 扩展

允许长文件名和 Unix 风格的符号链接的扩展。

有用的 RockRidge 链接

8.2 Joliet 扩展

Joliet 是 Microsoft 对 ISO 9660 文件系统的扩展,允许在文件名中使用 Unicode 字符。 这在处理国际化时很有用。 与 Rock Ridge 扩展一样,Joliet 也允许长文件名。

8.3 混合 CD-ROM

混合 CD 在一张光盘上包含三个文件系统 - ISO9660/RR、Joliet 和 HFS。 这种 CD-ROM 在 DOS、Unix、Macintosh 和 Windows 9x/NT 下均可访问。 所有三个文件系统都使用相同的数据,只有元数据在光盘上重复三次。

8.4 ISO9660 上的 Novell NetWare 索引

(待办)

8.5 从 Linux 访问 Joliet

8.6 从 BeOS 访问 Joliet

它是更新的 ISO9660 驱动程序,能够使用 Joliet ISO9660 扩展。

8.7 从 OS/2 访问 Joliet

Jcdfs.zip 压缩包包含用于 OS/2 的 CDFS.IFS 驱动程序,支持 Joliet level 3。

8.8 从 Linux 访问音频 CD 作为文件系统

此内核模块允许您将音频 CD 作为常规文件系统访问。

8.9 从 BeOS 访问音频 CD 作为文件系统

此文件系统附加组件将允许您(如果您的 CD 驱动器支持)将常规音频 CD 视为一组 WAV 文件。 您可以复制文件、将它们编码为 mp3、以较慢、较快的速度播放它们,甚至向后播放。

8.10 从 Linux 访问所有音轨 (CDfs)

CDfs 是一个用于 Linux 系统的文件系统,它将 CD 上的所有音轨和引导映像 “导出” 为普通文件。 然后可以挂载这些文件(例如,用于 ISO 和引导映像)、复制、播放(音轨)等。 开发此文件系统的主要目标是 “解锁” 旧 ISO 会话中的信息。 该文件系统还允许您访问有缺陷的多会话光盘上的数据,例如,具有多个单会话而不是多会话的光盘。

8.11 创建混合 CD-ROM (mkhybrid)

制作 ISO9660/HFS/JOLIET 共享混合 CD 卷


9. 其他文件系统

9.1 ADFS - Acorn 磁盘文件系统

Acorn 磁盘文件系统是 RiscOS 操作系统的标准文件系统,该操作系统在 Acorn 基于 ARM 的 Risc PC 系统和 Acorn Archimedes 系列机器上运行。

Linux 内核 2.1.x+ 支持此文件系统。 Linux 文件系统实现的作者是 Russell King < rmk@arm.uk.linux.org>。

9.2 AFFS - Amiga 快速文件系统

快速文件系统 (FFS) 是 Amiga(tm) 系统自 AmigaOS 版本 1.3 (34.20) 以来在硬盘上使用的通用文件系统。

Linux 内核 2.1.x+ 支持此文件系统。 Linux 文件系统实现的作者是 Ray Burr < ryb@nightmare.com>。

9.3 BeFS - BeOS 文件系统

BeFS 是 BeOS 中使用的日志文件系统。 有关 BeFS 的更多信息,请参阅 Practical File System Design with the Be File System 这本书或 BeFS linux 驱动程序源代码。

Linux BeFS 实现:

此驱动程序支持 x86 和 PowerPC Linux 平台。 此外,它仅支持在硬盘和软盘中读取。

9.4 BFS - UnixWare 启动文件系统

UnixWare BFS 文件系统类型是一种专用文件系统。 它专为加载和引导 UnixWare 内核而设计。 BFS 被设计为 连续文件系统。 BFS 仅支持一个(根)目录,您只能创建常规文件; 不能创建子目录或特殊文件,例如设备或套接字。

有关 BFS 的更多信息,请参阅 http://uw7doc.sco.com/FS_admin/_The_bfs_File_System_Type.html

您可以从 Linux 访问 BFS 文件系统:

自 2.3.25 版本以来,Linux 内核中包含对 BFS 的支持。 如果您使用的是早期内核,请检查 BFS 主页是否包含添加对此文件系统支持的补丁程序。 主页还包含尚未合并到官方内核中的错误修复/增强功能。

还有我的旧实现,现在已经过时了。 我的计划是将此代码移植到 FreeBSD

这是用于 Linux 的只读 UnixWare 启动文件系统支持。 您可以使用它以只读方式挂载您的 UnixWare /stand 分区或软盘。 我不计划开发读写版本,但如果您需要,请给我发邮件。 您可能还对 VxFS Linux 支持感兴趣。

9.5 CrosStor 文件系统

这是高吞吐量文件系统 (HTFS) 的新名称。 有关更多信息,请参阅 CrosStor 主页 http://www.crosstor.com

9.6 DTFS - 桌面文件系统

桌面文件系统设计的目标受到小型计算机系统环境印象的影响。 DTFS 压缩存储在常规文件中的数据,以减少磁盘空间需求(目录保持未压缩状态)。 压缩是以页为单位执行的,并且是 “即时”发生的。 DTFS 支持 LZW 和无压缩,但您可以添加自己的算法。 通过不预先分配 inode 来节省一些空间。 任何磁盘块都可以公平地分配为 inode。 每个 inode 都存储为 B+ 树。 有关更多信息,请参阅 DTFS USENIX 论文(您可以从 ftp://ftp.crosstor.com/pub/DTFS/papers/ 下载)。

可从 CrosStor 获得用于 UnixWare 和 SUN Solaris 的读/写商业驱动程序

9.7 EFS - 增强型文件系统 (Linux)

增强型文件系统项目旨在为 Linux 以及最终为其他操作系统创建一个新的文件系统,该系统将允许管理员在一组块设备(硬盘驱动器或分区)上定义可挂载的“文件系统”。其目的是允许在系统运行时从分区集中添加或删除文件系统,并且可以在系统运行时向集合添加分区(或者如果剩余分区有足够的空间来容纳所有数据,则可以删除分区)。两个主要目标是允许多个可挂载的文件系统共享相同的存储空间池(即用户主目录与新闻 Spool 位于同一驱动器上,但对其进行单独的核算),以及允许轻松添加更多硬盘驱动器以获得更多空间。

作者想要实现的其他功能包括 日志/journaling、尽可能多地支持操作系统(尽管所有工作最初都将在 Linux 上完成),以及文件系统中的配额,这样我们就无需在启动时浪费大量时间运行愚蠢的 quotacheck 程序 - 日志记录应该像避免 fsck 一样避免 quotacheck!他们希望能够启动一个系统,该系统在 4 个硬盘驱动器上分布着 10GB 的新闻,并具有完整的配额,在断电后,文件系统的挂载时间少于 20 秒!

增强型文件系统的主页位于 http://www.coker.com.au/~russell/enh/。联系 Russell Coker < russell@coker.com.au> 获取更多信息。

9.8 EFS - 区块文件系统 (IRIX)

区块文件系统 (efs) 是 Silicon Graphics 早期基于块设备的文件系统,广泛用于 IRIX 的 6.0 之前的版本。自 6.0 起,xfs 已与 IRIX 捆绑在一起,并鼓励用户迁移到 xfs 文件系统。在 6.5 以后的 IRIX 版本中,对 efs 的 IRIX 支持将为只读,但 efs 仍然广泛用于 SGI 软件分发 CD 中。

有两个用于 Linux 的内核模块可以访问 EFS 文件系统。

efs 内核模块是为 linux 2.2 内核实现的区块文件系统。efs 实现 (efsmod-0.6.tar.gz) 最初由 Christian Vogelgsang 为 1.x 内核编写。在此实现中,代码已进行了完全重写,并且也是字节序清洁的。要使用 efs 模块,您需要至少拥有 2.2 内核。要挂载 IRIX CD,您的 CD-ROM 需要能够处理 512 字节的块。此版本的 efs 包含对硬盘分区的支持,并且还包含一个内核补丁,允许您将 efs 代码安装到您的 Linux 内核树中。对大型文件的处理也得到了极大的改进。

原始 efsmod 也可用

Efs-mod 0.6 是用于 Linux 的原始 EFS 只读模块。0.6 版本已完成,但由于缺乏时间和实现写入部分的信息,项目已冻结。

从 Windows NT/95 访问 EFS

用于从 Windows 95 访问 EFS 的简单程序(使用 MS VC++ 编译)。

EFS 和 FFS 库,libfs

一个 C 库,用于从 WinNT x86、SunOS 和 IRIX 读取 EFS 和 FFS。易于使用(类似 Posix 的接口)并链接到现有代码 FTP 服务器,还具有 winefssh.exe 和 winufssh.exe,简单的 WinNT 二进制文件,用于交互式读取 UFS 和 EFS 文件系统。不是一个非常完善/文档齐全的软件包,但有些人可能会觉得它有用。

有用的链接

9.9 FFS - BSD 快速文件系统

这是大多数 BSD Unix(FreeBSD、NetBSD、OpenBSD、Sun Solaris 等)的本机文件系统。

另请参阅:SFS,安全文件系统UFS

从 MacOS 访问 FFS

您可以使用 OpenBSD 附带的 BSD Installer 实用程序将 .tar.gz 文件解压缩到 FFS 文件系统。它位于 ftp://ftp.openbsd.org/pub/OpenBSD/2.7/mac68k/utils/

9.10 GPFS - 通用并行文件系统

这是一种 UNIX(tm) 操作系统风格的文件系统,专为 RS/6000 SP(tm) 服务器设计。它允许多个节点上的应用程序共享文件数据。GPFS 支持非常大的文件系统,并将数据条带化到多个磁盘上以获得更高的性能。GPFS 基于共享磁盘模型,该模型为不直接连接到应用程序节点的磁盘提供较低的开销访问,并使用分布式锁定协议为来自任何节点的访问提供完整的数据一致性。它提供了许多标准的 AIX(tm) 文件系统接口,允许大多数应用程序无需修改或重新编译即可执行。这些功能在允许从 SP 系统的所有节点高速访问相同数据的同时,并为各个节点上发生的操作提供完整的数据一致性。GPFS 尝试在各种节点和组件故障中继续运行,前提是存在足够的资源来继续。

9.11 HFS - HP-UX 高性能文件系统

这是本 HOWTO 中出现的第二个 hfs。它用于较旧的 HP-UX 版本。

9.12 HTFS - 高吞吐量文件系统

有用的链接

可从 CrosStor 获得读/写商业驱动程序

9.13 JFS - 日志文件系统 (HP-UX, AIX, OS/2 5, Linux)

JFS 是 IBM 的日志文件系统技术,目前用于 IBM 企业服务器,专为高吞吐量服务器环境而设计。

9.14 LFS - Linux 日志结构文件系统

名为 d(t)fs 的 Linux 日志结构文件系统实现

d(t)fs 是一个用于 Linux 的日志结构文件系统项目。目前,该文件系统大部分都在运行,但尚未编写清理器。

还将有一个 dtfs 邮件列表,将在主页上公布。有关更多信息,您可以查看: http://www.xss.co.at/mailman/listinfo.cgi/dtfs

9.15 MFS - Macintosh 文件系统

MFS 是原始的 Macintosh 文件系统。它已被 HFS / HFS+ 取代。如果您可以提供更多信息,请发送邮件至

9.16 Minix 文件系统

这是 Minix 本机文件系统。它也用于 Linux 的早期版本中。

9.17 NWFS - Novell NetWare 文件系统

NWFS 是 Novell NetWare OS 中的本机文件系统。它是修改后的基于 FAT 的文件系统。存在此文件系统的两种变体。16 位 NWFS 286 用于 NetWare 2.x。NetWare 3.x、4.x 和 5 使用 32 位 NWFS 386。

NetWare 文件系统 / 286

(待办)

NetWare 文件系统 / 386

(待办)

从 Linux 访问 NWFS-386

此驱动程序允许您在 Linux 上挂载 NWFS-386 文件系统。

9.18 NSS - Novell 存储服务

这是一个新的 64 位 日志文件系统,使用 平衡树 算法。它用于 Novell NetWare 5 中。

9.19 ODS - 磁盘结构文件系统

这是 OpenVMS 和 VMS 本机文件系统。

9.20 QNX 文件系统

此文件系统用于 QNX 中。存在两个主要的文件系统版本,版本 2 用于 QNX 2,版本 4 用于 QNX 4。QNX 4 不支持版本 2,反之亦然。

QNX4 文件系统现在可以从 Linux 2.1.x+ 访问。对“QNX 文件系统支持”选择“Y”;

QNX 4 文件系统的驱动程序。

9.21 Reiser 文件系统

Reiserfs 是一个文件系统,它使用经典平衡树算法的变体。与在同一操作系统下运行并采用相同缓冲代码的 ext2fs 传统块分配文件系统相比,结果表明这些算法对于大型文件和大小接近节点大小的小文件在时间性能方面更有效,随着文件大小接近节点大小,时间性能降低,空间性能显着提高,并且随着文件大小大幅减小到节点大小 (4k) 以下,在空间和时间方面都变得更加有效,对于 100 字节的文件大小,优势达到了数量级。小文件空间和时间性能的改进表明,我们现在可以重新审视一个常见的操作系统设计假设,即应该使用文件系统层之上的层来聚合小对象。

有用的链接

9.22 RFS (CD-ROM 文件系统)

索尼的增量数据包写入文件系统。

9.23 RomFS - Rom 文件系统

Linux RomFS 实现的作者是 Janos Farkas < chexum@shadow.banki.hu> 有关更多信息,请参阅 /usr/src/linux/Documentation/filesystems/romfs.txt 文件。

9.24 SFS - 安全文件系统

sfs 文件系统类型是 FFS 文件系统类型的变体。sfs 文件系统类型的引导块、超级块、存储块和空闲块在管理级别上与 FFS 的相同。但是,inode 与 FFS inode 不同。每个奇数编号的 inode 都保留用于安全信息。该信息包含访问控制列表信息。我不确定 SFS 是否还有其他能力。

SFS 链接

9.25 Spiralog 文件系统 (OpenVMS)

Spiralog 是 OpenVMS 的 64 位高性能文件系统。Spiralog 结合了 日志结构 技术和更传统的 B 树 技术,以提供通用的抽象。B 树映射机制使用预写日志来提供稳定性和可恢复性保证。

Digital 上的 Spiralog 相关链接

9.26 System V 和派生的文件系统

System V Linux 项目的主页位于 http://www.knm.org.pl/prezes/sysv.html。该项目的维护者是 <kgb@manjak.knm.pl.org>。

AFS - Acer 快速文件系统

Acer 快速文件系统用于 SCO Open Server 上。它类似于 System V Release 4 文件系统,但它使用位图而不是块的链式空闲列表。

EAFS - 扩展的 Acer 快速文件系统

AFS 文件系统可以“扩展”以处理最多 255 个字符的文件名,但目录条目仍然具有 14 个字符的名称。此文件系统类型用于 SCO Open Server 上。

Coherent 文件系统

S5

此文件系统用于 UnixWare 中。它可能与 SystemV 兼容,但我尚未验证。有关更多信息,请参阅 http://uw7doc.sco.com/FS_admin/_The_s5_File_System_Type.html

S51K - SystemV 1K

Version 7 文件系统

此文件系统类型用于 PDP-11 机器的 Version 7 Unix 上。

Xenix 文件系统

9.27 Text - (Philips' CD-ROM 文件系统)

飞利浦的音频 CD 上编码光盘和音轨数据的标准。

9.28 UDF - 通用磁盘格式 (DVD-ROM 文件系统)

有一个 Linux UDF 文件系统驱动程序:

9.29 UFS

注意:人们经常错误地将 BSD 快速文件系统 称为 UFS。FFS 和 UFS 是*不同的*文件系统。所有现代 Unix 都使用 FFS 文件系统,而不是 UFS!UFS 用于早期的 BSD 版本。您可以从 http://minnie.cs.adfa.edu.au/TUHS/ 下载源代码。

有用的链接

另请参阅:BSD FFS

9.30 V7 文件系统

V7 文件系统用于 UNIX Time Sharing system 的第七版(大约 1980 年)。有关更多信息,请参阅第 7 版源代码,该源代码可从 Unix Archive 获取:http://minnie.cs.adfa.edu.au/TUHS/

9.31 VxFS - Veritas 文件系统 (HP-UX, SCO UnixWare, Solaris)

这是由 Veritas Inc. 开发的商业文件系统。您可以在 HP-UX、SCO UnixWare、Solaris 以及可能的其他系统中看到它。它具有非常有趣的功能:基于区段的分配、日志记录、访问控制列表 (ACL)、高达 2 TB 的大文件支持、在线备份(快照文件系统)、BSD 风格的配额等等。

VxFS 提供三个 VxFS 版本

版本 1: 这是原始 VxFS,不常用。

版本 2: 支持文件集和动态 inode 分配。

版本 4: 最新版本,支持大文件和配额。

请注意,HP-UX、Solaris 和 UnixWare 版本使用略有不同的结构,因此当您将其连接到不同的系统时,您可能无法读取 VxFS。

VxFS 相关链接

另请参阅:VxVM (Veritas 卷管理器)日志文件系统

VxTools

用于访问 VxFS 版本 2 和 4 的 Unix 命令行实用程序在 GNU GPL 下可用

Vxtools 是一组命令行实用程序,允许您从 Linux(以及可能的其他 Unix 系统)访问您的 VxFS 文件系统。当前版本可以读取 VxFS 版本 2 和 4。

我 (mhi) 也计划开发 VxFS Linux 内核驱动程序。

据我所知,Rodney Ramdas < rodney@quicknet.nl> 正在为 FreeBSD 开发 VxFS 驱动程序。我不知道他当前项目的状态,因此如果您想要更多信息,请直接与他联系。

9.32 XFS - 扩展文件系统 (IRIX)

XFS(tm) 是 Silicon Graphics[TM] 系统的下一代文件系统,从桌面工作站到超级计算机。XFS 提供完整的 64 位文件功能,可以轻松扩展以处理极大的文件和扩展到 1 TB 的文件系统。XFS 文件系统集成了卷管理、保证速率 I/O 和 日志技术,可实现快速、可靠的恢复。文件系统可以在仍在使用时进行备份,从而显着减少管理开销。

XFS 专为极高性能而设计;在 CHALLENGE 系统上已演示了超过 300MB/秒的持续吞吐量。XFS 文件系统的性能可以扩展以匹配 CHALLENGE MP 架构。传统文件、目录和文件系统随着大小的增长,性能会降低。使用 XFS 文件系统,不会有性能损失。例如,XFS 目录已在单个目录中测试了多达 3200 万个文件。

XFS 是一个日志文件系统。它在更新原始条目之前,将对 inode、目录和位图的更改记录到磁盘。如果系统在更新完成之前崩溃,则可以使用日志重新创建这些更改并按预期进行更新。

XFS 使用空间管理器为文件系统分配磁盘空间并控制 inode。它使用命名空间管理器来控制目录文件的分配。这些管理器使用 B 树索引来存储文件位置信息,从而显着减少检索文件信息所需的访问时间。

Inode 是根据需要创建的,并且不限于磁盘分区上的特定区域。XFS 尝试将 inode 定位在它们引用的文件和目录附近。非常小的文件(例如符号链接和某些目录)作为 inode 的一部分存储,以提高性能并节省空间。大型目录在目录文件中使用 B 树索引来加快目录搜索、添加和删除速度。

有用的 XFS 链接

SGI Inc. 提供的 GNU 通用公共许可证涵盖的 XFS Linux 端口:

9.33 Xia FS

此文件系统是为了取代 Linux 中旧的 Minix 文件系统而开发的。此文件系统的作者是 Franx Xia < qx@math.columbia.edu>


10. 原始分区

10.1 11. 附录

11.1 网络文件系统

本 HOWTO 不是关于网络文件系统的,但我应该提及它们。

以下是我所知道的一些简短列表

AFS - Andrew 文件系统

CODA

Coda 是一个分布式文件系统,具有新颖的功能,例如断开连接操作和服务器复制。

NFS - 网络文件系统 (Unix)

NCP - NetWare 核心协议 (Novell NetWare)

SMB - 会话消息块 (Windows 3.x/9x/NT)

此协议在 Windows 世界中使用。

Intermezzo

Intermezzo 是一个用于 Linux 的分布式文件系统。它的灵感来自 coda,但使用磁盘文件系统作为持久缓存。Intermezzo 支持断开连接的操作,但尚未实现身份识别系统。

11.2 加密文件系统

CFS

CFS 将加密服务推送到 Unix(tm) 文件系统中。它通过标准的 Unix 文件系统接口为加密文件提供系统级别的安全存储。用户将加密密钥与他们希望保护的目录关联起来。这些目录中的文件(以及它们的路径名组件)使用指定的密钥透明地加密和解密,而无需用户进一步干预;明文永远不会存储在磁盘上或发送到远程文件服务器。CFS 采用 DES 流密码和密码本密码模式的新颖组合,以便在现代工作站上以良好的性能提供高安全性。CFS 可以使用任何可用的文件系统作为其底层存储而无需修改,包括 NFS 等远程文件服务器。系统管理功能(如文件备份)以正常方式工作,并且无需知道密钥。

TCFS

TCFS 和 CFS 之间的主要区别在于 TCFS 获得的对用户的透明性。事实上,CFS 在用户空间中工作,而 TCFS 在内核空间中工作,从而提高了性能和安全性。TCFS 的动态加密模块功能允许用户指定他/她选择的加密引擎供 TCFS 使用。TCFS 目前仅适用于 Linux,很快也将发布用于 NetBSD,并且在不久的将来还将支持 NFS 以外的其他 FS。

SFS

(待办事项: http://www.cs.auckland.ac.nz/~pgut001/sfs/index.html )

VS3FS:用于 Linux 的隐写文件系统

fspatch 是一个内核补丁,它引入了对隐写文件系统(以前称为 vs3fs,一种实验性文件系统,它不仅加密磁盘上的所有信息,而且还尝试以无法证明该信息甚至存在于磁盘上的方式隐藏该信息。这使您可以将敏感信息保存在磁盘上,同时不容易被迫泄露该信息。即使在极端情况下,也可以将虚假文档存储在磁盘的其他部分,可以泄露其密码。应该不可能找出磁盘上是否存储了任何其他信息。

11.3 文件系统基准测试实用程序

IOzone

IOzone 是一个文件系统基准测试工具。该基准测试生成并测量各种文件操作。Iozone 已移植到许多机器,并在许多操作系统下运行。

11.4 编写您自己的文件系统驱动程序

DOS

我还没有在网上看到任何关于编写 DOS 文件系统驱动程序(网络重定向器)的优秀页面。最好的来源是 Ralf Brown 的中断列表和 iHPFS 源代码。

OS/2

Windows NT

Microsoft IFS 套件页面 ( http://www.microsoft.com/ddk/IFSkit/) 将很有用,因为它是进入 NT 文件系统开发的最佳途径(即使它花费 1000 美元)。

有关编写 Windows NT 的 FS 驱动程序的更多信息,请参阅 < bosse@acc.umu.se> 的 http://www.ing.umu.se/~bosse/

11.5 相关文档