文件系统 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 下载。
您可以通过 martin@hinner.info 与我联系。我欢迎任何建议和更正,但在您提出问题之前,请先尝试在互联网上搜索。您还应该查看我的主页 (http://martin.hinner.info/) 以获取任何更新或其他信息。请注意,我非常忙于我的其他项目(例如 汽车诊断,基于 ARM 的微处理器开发工具),并且我有一份全职工作(我在 SECONS Ltd. 和 Fintera Ltd. 工作),所以我有非常有限的时间回复电子邮件。
如果您想为本 HOWTO 做出贡献或接管维护工作,请查看作者的网站 (http://martin.hinner.info/) 并与他联系。
我还将尝试建立一个 wiki 风格的网站,用于文件系统相关信息,以便任何人都可以贡献,并且该网站稍后将与此 HOWTO 合并。所有这些活动都取决于我的空闲时间。
文件系统 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。
您可能想加入文件系统邮件列表。它旨在成为最终用户和开发人员的良好信息来源。因此,如果您有任何与文件系统相关的事情,请加入 ;-) 要订阅,请发送电子邮件至 < majordomo@penguin.cz> 并在电子邮件消息的正文(不是主题)中放入(不带引号):“subscribe fs-l”。
要加入 Linux 内核文件系统邮件列表 linux-fsdev@vger.rutgers.edu,请发送电子邮件至 listserv@vger.rutgers.edu。在邮件正文中放入 "subscribe linux-fsdev"
。
要加入技术性 FreeBSD 文件系统邮件列表 freebsd-fs@FreeBSD.org,请发送电子邮件至 majordomo@FreeBSD.org。在邮件正文中放入 "subscribe freebsd-fs"
。
文件系统集合是一个 FTP/WWW 站点,提供有关文件系统和文件系统相关程序和驱动程序的有用信息。它位于 http://metalab.unc.edu/filesystems/,或者仅 FTP 位于 ftp://metalab.unc.edu/pub/docs/filesystems/。
最初的“文件系统访问 HOWTO”由 Georgatos Photis 编写(请参阅他的主页 http://students.ceid.upatras.gr/~gef/)。本 HOWTO 包含了他网页上的许多信息。谢谢你,Gef。
FUJIWARA Teruyoshi <fujiwara@linux.or.jp> 将此 HOWTO 翻译成日语。
其他为本 HOWTO 做出贡献或帮助我(直接或间接)的人员(按字母顺序排列)
这是文件系统可访问性“地图”,按操作系统字母顺序排列。您可能会发现此列表有点混乱。这是因为 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
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
一些连续文件系统:BFS,ISO9660 和扩展。
(待办)
一些 FAT 文件系统:FAT12/16/32,VFAT 和 NetWare 文件系统。
(待办)
(待办)
(待办)
一些使用 B+ 树的文件系统:HFS,NSS,Reiser FS 和 Spiralog 文件系统。
文件系统通过同步写入来更新其结构信息(称为元数据)。每个元数据更新可能需要多次单独写入,如果系统在写入序列期间崩溃,元数据可能处于不一致状态。
在下次启动时,文件系统检查实用程序(称为 fsck)必须遍历元数据结构,检查和修复它们。在大型文件系统上,此操作需要非常非常长的时间。并且磁盘可能不包含足够的信息来纠正结构。这会导致文件错位或删除。
Journaling 文件系统使用一个单独的区域,称为日志或 journal。在实际执行元数据更改之前,它们会被记录到这个单独的区域。然后执行操作。如果系统在操作期间崩溃,则日志中有足够的信息来“重放”日志记录并完成操作。
这种方法不需要对文件系统进行全面扫描,从而在大型文件系统上产生非常快速的文件系统检查时间,通常对于多千兆字节的文件系统只需几秒钟。此外,由于保存了待处理操作的所有信息,因此无需删除或丢失和查找移动。Journaling 文件系统的缺点是它们比其他文件系统慢。
一些 Journaling 文件系统:BeFS,HTFS,JFS,NSS,Spiralog 文件系统,VxFS 和 XFS。
这对于为新操作系统创建空间、重新组织磁盘使用、在硬盘之间复制数据以及“磁盘映像” - 在多台计算机上复制安装非常有用。
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,您可能无法增长分区。
因为我只使用 Intel x86 机器,所以非常欢迎任何贡献(或非 x86 机器捐赠 ;-) )。如果您可以提供任何有用的信息,请随时发送邮件给 我。
(待办)
(待办)
UnixWare VTOC(卷表目录)将磁盘分区划分为 16 个逻辑分区。Linux 内核支持 UnixWare VTOC,您必须选中“UnixWare 切片支持 (EXPERIMENTAL)”并重新编译您的内核。读取 UnixWare 磁盘标签的另一种方法是使用 prtvtoc(1) 命令的 GPL 端口,它在 vxtools 包中。
(待办)
(待办)
Linux 实现可在此处获得
有关 Veritas 卷管理器的更多信息,请参见 http://www.veritas.com/。
另请参见:VxFS (Veritas Journaling 文件系统)。
逻辑卷管理器在 OS/2 WarpServer 5 中可用。它允许您在多个磁盘/分区上创建线性卷。有人说它与 IBM AIX 逻辑卷管理器兼容。
StackVM 是 CrosStor 的卷管理器。使用 StackVM,管理员可以将多个物理磁盘切片组合成一个称为 vdisk 的单个逻辑设备。Vdisk 是虚拟磁盘的缩写。物理磁盘可以组合形成串联、RAID 0(条带化)、RAID 1(镜像)、RAID 4 或 RAID 5。此外,单个磁盘分区可以细分为多个简单 vdisk。有关更多信息,请参见 CrosStor 主页 http://www.crosstor.com/。
NetWare 卷用于 NWFS-386 文件系统。
Windows 95/98 和 Windows NT/2000 将长文件名存储在 FAT 的特殊目录项中,这些目录项设置了 ReadOnly、Hidden、System 和 Volume 属性,因此如果您从 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 可以修复此问题。
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> 维护。
OS/2 Warp 版本 3、4 和 5 将长文件名和扩展属性存储在 FAT 卷上的文件“\ea data. sf”和“\wp root. sf”中(这两个文件都在文件系统的根目录中)。据我所知,没有任何其他操作系统已知实现 OS/2 EA。如果您可以提供有关 EA 结构的任何信息,请随时邮寄至 我。
Star LFN 是一个模拟器,允许在 DOS 4.0 或更高版本下运行的程序使用 Windows 95 DOS 窗口中存在的长文件名功能。目前,它只能从系统+隐藏文件中读取和写入长文件名,这意味着您既不能读取也不能写入真正的 Windows 95 长文件名。有关更多信息,请参阅 http://sta.c64.org/starlfn.html。
有些人说 Microsoft 发布了一个名为 LFNDOS 的驱动程序,它在 DOS 下提供了 Microsoft 长文件名 API。如果您知道可以在哪里下载此驱动程序,请给我发送电子邮件。
在 Windows 95 下,DOS 程序可以通过调用 Windows 提供的一组中断函数来使用长文件名。例如,COMMAND.COM 在从 Windows 作为 DOS 提示符运行时将允许长文件名,但如果您在 MS-DOS 模式下重新启动则不允许。诸如 EDIT.COM 和所有 DJGPP 程序之类的其他程序在可用时会使用长文件名。
作者可能不会发布更多版本的 fsresize,因为他正在开发 parted - Partition Magic 的克隆。它将能够调整大小、复制、创建和检查文件系统/分区。
良好的 HPFS 链接
iHPFS 使 OS/2 用户在启动纯 DOS 时可以使用他们的 HPFS 分区。HPFS 分区被分配一个驱动器盘符,并且可以像任何 DOS 驱动器一样访问。iHPFS 仅限于只读访问。
此程序不再开发,因为作者不使用 OS/2。如果您愿意维护该程序,请告知他。
如果您的内核支持 HPFS,请在“文件系统”子菜单中对“OS/2 HPFS 文件系统支持”说“是”(“Y”es)。然后使用“make dep bzImage”重新编译内核,重新启动并尝试挂载您的 HPFS 分区(例如 mount /dev/hda2 /mnt -t hpfs)。
参考资料
NTPwd 包含用于访问 NTFS 分区的命令行工具,它是 Linux 使用的驱动程序的 Dos 端口。它还包含一个用于更改 NT 密码的小实用程序。
作者现在为 Be Inc 工作,因此您不会在网络上看到他的 NTFS 和 ext2 文件系统支持得到更多更新。驱动程序将被拉入未来的 BeOS 版本中。
扩展文件系统 (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 上设计和实现
这是早期 Linux 系统中使用的旧文件系统。
第二扩展文件系统可能是 Linux 社区中使用最广泛的文件系统。它提供标准的 Unix 文件语义和高级功能。此外,由于内核代码中包含的优化,它非常强大并提供出色的性能。
由于 Ext2fs 在设计时就考虑到了发展,因此它包含可用于添加新功能的钩子。有些人正在研究当前文件系统的扩展:符合 Posix 语义的访问控制列表、取消删除和即时文件压缩。
Ext2fs 最初是在 Linux 内核中开发和集成的,现在正积极移植到其他操作系统。已经在 GNU Hurd 之上实现了运行在 Ext2fs 服务器。人们还在 Mach 微内核之上的 LITES 服务器和 VSTa 操作系统中进行 Ext2fs 端口的开发。最后但并非最不重要的一点是,Ext2fs 是 Masix 操作系统的重要组成部分,目前正在由作者之一开发。
第二扩展文件系统的设计和实现是为了解决第一个扩展文件系统中存在的一些问题。我们的目标是提供一个强大的文件系统,该文件系统实现 Unix 文件语义并提供高级功能。
当然,我们希望 Ext2fs 具有出色的性能。我们还希望提供一个非常强大的文件系统,以减少在密集使用中数据丢失的风险。最后但并非最不重要的一点是,Ext2fs 必须包含扩展条款,以允许用户在无需重新格式化文件系统的情况下从新功能中受益。
Ext2fs 支持标准的 Unix 文件类型:常规文件、目录、设备特殊文件和符号链接。
Ext2fs 能够管理在非常大的分区上创建的文件系统。虽然原始内核代码将最大文件系统大小限制为 2 GB,但 VFS 层中的最新工作已将此限制提高到 4 TB。因此,现在可以使用大磁盘,而无需创建多个分区。
Ext2fs 提供长文件名。它使用可变长度的目录项。最大文件名大小为 255 个字符。如果需要,此限制可以扩展到 1012。
Ext2fs 为超级用户 (root
) 保留了一些块。通常,保留 5% 的块。这允许管理员轻松地从用户进程填满文件系统的情况中恢复。
除了标准的 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%。 这种预分配在重负载下实现了良好的写入性能。 它还允许将连续的块分配给文件,从而加快了未来的顺序读取速度。
这两种分配优化产生了非常好的局部性,体现在
Ext3 支持与 Ext2 相同的功能,但还包括日志功能(Journaling)。 您可以从 ftp://ftp.uk.linux.org/pub/linux/sct/fs/jfs/ 下载预发布版本。
作者现在在 Be Inc 工作,所以您不会看到他在网上更新更多的 ext2 和 NTFS 文件系统支持。 这些驱动程序将被拉入未来的 BeOS 版本中。
除软盘外,所有 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 收集
HFS/2 让 OS/2 用户可以无缝地读取和写入使用分层文件系统(Hierarchical File System)格式化的软盘上的文件,分层文件系统是 Macintosh 计算机使用的文件系统。 有了 HFS/2,Macintosh 软盘可以像普通软盘一样使用。
此程序不再开发,因为作者不使用 OS/2。如果您愿意维护该程序,请告知他。
hfsutils 软件包包含一组命令行实用程序,如 hformat、hmount、hdir、hcopy 等。 它们允许对 HFS 卷上的文件和目录进行读写访问。
有用的 ISO-9660 链接
允许长文件名和 Unix 风格的符号链接的扩展。
有用的 RockRidge 链接
Joliet 是 Microsoft 对 ISO 9660 文件系统的扩展,允许在文件名中使用 Unicode 字符。 这在处理国际化时很有用。 与 Rock Ridge 扩展一样,Joliet 也允许长文件名。
混合 CD 在一张光盘上包含三个文件系统 - ISO9660/RR、Joliet 和 HFS。 这种 CD-ROM 在 DOS、Unix、Macintosh 和 Windows 9x/NT 下均可访问。 所有三个文件系统都使用相同的数据,只有元数据在光盘上重复三次。
(待办)
Acorn 磁盘文件系统是 RiscOS 操作系统的标准文件系统,该操作系统在 Acorn 基于 ARM 的 Risc PC 系统和 Acorn Archimedes 系列机器上运行。
Linux 内核 2.1.x+ 支持此文件系统。 Linux 文件系统实现的作者是 Russell King < rmk@arm.uk.linux.org>。
快速文件系统 (FFS) 是 Amiga(tm) 系统自 AmigaOS 版本 1.3 (34.20) 以来在硬盘上使用的通用文件系统。
Linux 内核 2.1.x+ 支持此文件系统。 Linux 文件系统实现的作者是 Ray Burr < ryb@nightmare.com>。
BeFS 是 BeOS 中使用的日志文件系统。 有关 BeFS 的更多信息,请参阅 Practical File System Design with the Be File System 这本书或 BeFS linux 驱动程序源代码。
UnixWare BFS 文件系统类型是一种专用文件系统。 它专为加载和引导 UnixWare 内核而设计。 BFS 被设计为 连续文件系统。 BFS 仅支持一个(根)目录,您只能创建常规文件; 不能创建子目录或特殊文件,例如设备或套接字。
有关 BFS 的更多信息,请参阅 http://uw7doc.sco.com/FS_admin/_The_bfs_File_System_Type.html。
还有我的旧实现,现在已经过时了。 我的计划是将此代码移植到 FreeBSD
这是高吞吐量文件系统 (HTFS) 的新名称。 有关更多信息,请参阅 CrosStor 主页 http://www.crosstor.com。
桌面文件系统设计的目标受到小型计算机系统环境印象的影响。 DTFS 压缩存储在常规文件中的数据,以减少磁盘空间需求(目录保持未压缩状态)。 压缩是以页为单位执行的,并且是 “即时”发生的。 DTFS 支持 LZW 和无压缩,但您可以添加自己的算法。 通过不预先分配 inode 来节省一些空间。 任何磁盘块都可以公平地分配为 inode。 每个 inode 都存储为 B+ 树。 有关更多信息,请参阅 DTFS USENIX 论文(您可以从 ftp://ftp.crosstor.com/pub/DTFS/papers/ 下载)。
可从 CrosStor 获得用于 UnixWare 和 SUN Solaris 的读/写商业驱动程序
增强型文件系统项目旨在为 Linux 以及最终为其他操作系统创建一个新的文件系统,该系统将允许管理员在一组块设备(硬盘驱动器或分区)上定义可挂载的“文件系统”。其目的是允许在系统运行时从分区集中添加或删除文件系统,并且可以在系统运行时向集合添加分区(或者如果剩余分区有足够的空间来容纳所有数据,则可以删除分区)。两个主要目标是允许多个可挂载的文件系统共享相同的存储空间池(即用户主目录与新闻 Spool 位于同一驱动器上,但对其进行单独的核算),以及允许轻松添加更多硬盘驱动器以获得更多空间。
作者想要实现的其他功能包括 日志/journaling、尽可能多地支持操作系统(尽管所有工作最初都将在 Linux 上完成),以及文件系统中的配额,这样我们就无需在启动时浪费大量时间运行愚蠢的 quotacheck 程序 - 日志记录应该像避免 fsck 一样避免 quotacheck!他们希望能够启动一个系统,该系统在 4 个硬盘驱动器上分布着 10GB 的新闻,并具有完整的配额,在断电后,文件系统的挂载时间少于 20 秒!
增强型文件系统的主页位于 http://www.coker.com.au/~russell/enh/。联系 Russell Coker < russell@coker.com.au> 获取更多信息。
区块文件系统 (efs) 是 Silicon Graphics 早期基于块设备的文件系统,广泛用于 IRIX 的 6.0 之前的版本。自 6.0 起,xfs 已与 IRIX 捆绑在一起,并鼓励用户迁移到 xfs 文件系统。在 6.5 以后的 IRIX 版本中,对 efs 的 IRIX 支持将为只读,但 efs 仍然广泛用于 SGI 软件分发 CD 中。
有两个用于 Linux 的内核模块可以访问 EFS 文件系统。
原始 efsmod 也可用
有用的链接
这是大多数 BSD Unix(FreeBSD、NetBSD、OpenBSD、Sun Solaris 等)的本机文件系统。
另请参阅:SFS,安全文件系统,UFS。
您可以使用 OpenBSD 附带的 BSD Installer 实用程序将 .tar.gz 文件解压缩到 FFS 文件系统。它位于 ftp://ftp.openbsd.org/pub/OpenBSD/2.7/mac68k/utils/。
这是一种 UNIX(tm) 操作系统风格的文件系统,专为 RS/6000 SP(tm) 服务器设计。它允许多个节点上的应用程序共享文件数据。GPFS 支持非常大的文件系统,并将数据条带化到多个磁盘上以获得更高的性能。GPFS 基于共享磁盘模型,该模型为不直接连接到应用程序节点的磁盘提供较低的开销访问,并使用分布式锁定协议为来自任何节点的访问提供完整的数据一致性。它提供了许多标准的 AIX(tm) 文件系统接口,允许大多数应用程序无需修改或重新编译即可执行。这些功能在允许从 SP 系统的所有节点高速访问相同数据的同时,并为各个节点上发生的操作提供完整的数据一致性。GPFS 尝试在各种节点和组件故障中继续运行,前提是存在足够的资源来继续。
这是本 HOWTO 中出现的第二个 hfs。它用于较旧的 HP-UX 版本。
有用的链接
可从 CrosStor 获得读/写商业驱动程序
名为 d(t)fs 的 Linux 日志结构文件系统实现
还将有一个 dtfs 邮件列表,将在主页上公布。有关更多信息,您可以查看: http://www.xss.co.at/mailman/listinfo.cgi/dtfs
MFS 是原始的 Macintosh 文件系统。它已被 HFS / HFS+ 取代。如果您可以提供更多信息,请发送邮件至 我。
这是 Minix 本机文件系统。它也用于 Linux 的早期版本中。
NWFS 是 Novell NetWare OS 中的本机文件系统。它是修改后的基于 FAT 的文件系统。存在此文件系统的两种变体。16 位 NWFS 286 用于 NetWare 2.x。NetWare 3.x、4.x 和 5 使用 32 位 NWFS 386。
(待办)
(待办)
这是一个新的 64 位 日志文件系统,使用 平衡树 算法。它用于 Novell NetWare 5 中。
这是 OpenVMS 和 VMS 本机文件系统。
此文件系统用于 QNX 中。存在两个主要的文件系统版本,版本 2 用于 QNX 2,版本 4 用于 QNX 4。QNX 4 不支持版本 2,反之亦然。
QNX4 文件系统现在可以从 Linux 2.1.x+ 访问。对“QNX 文件系统支持”选择“Y”;
Reiserfs 是一个文件系统,它使用经典平衡树算法的变体。与在同一操作系统下运行并采用相同缓冲代码的 ext2fs 传统块分配文件系统相比,结果表明这些算法对于大型文件和大小接近节点大小的小文件在时间性能方面更有效,随着文件大小接近节点大小,时间性能降低,空间性能显着提高,并且随着文件大小大幅减小到节点大小 (4k) 以下,在空间和时间方面都变得更加有效,对于 100 字节的文件大小,优势达到了数量级。小文件空间和时间性能的改进表明,我们现在可以重新审视一个常见的操作系统设计假设,即应该使用文件系统层之上的层来聚合小对象。
有用的链接
索尼的增量数据包写入文件系统。
Linux RomFS 实现的作者是 Janos Farkas < chexum@shadow.banki.hu> 有关更多信息,请参阅 /usr/src/linux/Documentation/filesystems/romfs.txt 文件。
sfs 文件系统类型是 FFS 文件系统类型的变体。sfs 文件系统类型的引导块、超级块、存储块和空闲块在管理级别上与 FFS 的相同。但是,inode 与 FFS inode 不同。每个奇数编号的 inode 都保留用于安全信息。该信息包含访问控制列表信息。我不确定 SFS 是否还有其他能力。
SFS 链接
Spiralog 是 OpenVMS 的 64 位高性能文件系统。Spiralog 结合了 日志结构 技术和更传统的 B 树 技术,以提供通用的抽象。B 树映射机制使用预写日志来提供稳定性和可恢复性保证。
Digital 上的 Spiralog 相关链接
System V Linux 项目的主页位于 http://www.knm.org.pl/prezes/sysv.html。该项目的维护者是 <kgb@manjak.knm.pl.org>。
Acer 快速文件系统用于 SCO Open Server 上。它类似于 System V Release 4 文件系统,但它使用位图而不是块的链式空闲列表。
AFS 文件系统可以“扩展”以处理最多 255 个字符的文件名,但目录条目仍然具有 14 个字符的名称。此文件系统类型用于 SCO Open Server 上。
此文件系统用于 UnixWare 中。它可能与 SystemV 兼容,但我尚未验证。有关更多信息,请参阅 http://uw7doc.sco.com/FS_admin/_The_s5_File_System_Type.html。
此文件系统类型用于 PDP-11 机器的 Version 7 Unix 上。
飞利浦的音频 CD 上编码光盘和音轨数据的标准。
注意:人们经常错误地将 BSD 快速文件系统 称为 UFS。FFS 和 UFS 是*不同的*文件系统。所有现代 Unix 都使用 FFS 文件系统,而不是 UFS!UFS 用于早期的 BSD 版本。您可以从 http://minnie.cs.adfa.edu.au/TUHS/ 下载源代码。
有用的链接
另请参阅:BSD FFS
V7 文件系统用于 UNIX Time Sharing system 的第七版(大约 1980 年)。有关更多信息,请参阅第 7 版源代码,该源代码可从 Unix Archive 获取:http://minnie.cs.adfa.edu.au/TUHS/。
这是由 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 卷管理器) 和 日志文件系统。
用于访问 VxFS 版本 2 和 4 的 Unix 命令行实用程序在 GNU GPL 下可用
我 (mhi) 也计划开发 VxFS Linux 内核驱动程序。
据我所知,Rodney Ramdas < rodney@quicknet.nl> 正在为 FreeBSD 开发 VxFS 驱动程序。我不知道他当前项目的状态,因此如果您想要更多信息,请直接与他联系。
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 端口:
此文件系统是为了取代 Linux 中旧的 Minix 文件系统而开发的。此文件系统的作者是 Franx Xia < qx@math.columbia.edu>
本 HOWTO 不是关于网络文件系统的,但我应该提及它们。
以下是我所知道的一些简短列表
此协议在 Windows 世界中使用。
(待办事项: http://www.cs.auckland.ac.nz/~pgut001/sfs/index.html )
我还没有在网上看到任何关于编写 DOS 文件系统驱动程序(网络重定向器)的优秀页面。最好的来源是 Ralf Brown 的中断列表和 iHPFS 源代码。
Microsoft IFS 套件页面 ( http://www.microsoft.com/ddk/IFSkit/) 将很有用,因为它是进入 NT 文件系统开发的最佳途径(即使它花费 1000 美元)。
有关编写 Windows NT 的 FS 驱动程序的更多信息,请参阅 < bosse@acc.umu.se> 的 http://www.ing.umu.se/~bosse/。