下一页 上一页 目录

5. 文件系统

随着时间的推移,对文件系统的需求不断增加,对大型结构、大型文件、长文件名和更多功能的需求促使文件系统不断发展,文件系统是访问和组织海量存储设备上数据的系统。今天,有大量的文件系统可供选择,本节将详细描述这些文件系统。

重点是 Linux,但如果能获得更多投入,我将很乐意为更广泛的受众添加信息。

5.1 通用文件系统

大多数操作系统通常都有一个通用文件系统,用于日常使用,适用于大多数类型的文件,反映了操作系统中的可用功能,例如权限标志、保护和恢复。

minix

这是 Linux 最初的文件系统,在 Linux 托管在 minix 机器上的时代。它很简单,但功能有限,现在除了在一些救援磁盘中使用外,几乎不再使用,因为它相当紧凑。

xiafsextfs

这些也是旧的文件系统,已经不再使用,不再推荐使用。

ext2fs

这是 Linux 世界中公认的通用标准。它快速、高效且成熟,并且正在持续开发中,诸如 ACL 和透明压缩等功能即将出现。

有关更多信息,请查看 ext2fs 主页。

ext3fs

这是 ext2fs 即将到来的继任者的名称,由于即将进入稳定的内核而得名。ext2fs 添加了许多功能,但为了避免在如此彻底的升级后对名称造成混淆,名称也将更改。您可能已经听说过它,但源代码现在处于 beta 发布阶段。

补丁可在 Linux.org 获取。

ufs

这是 BSD 及其变体使用的文件系统。它很成熟,但也为已知几何形状的旧式磁盘驱动器开发。该文件系统使用许多技巧来优化性能,但由于磁盘几何形状以多种方式进行转换,因此最终效果不再那么理想。

efs

扩展文件系统 (efs) 是 Silicon Graphics 早期开发的文件系统,在 6.0 版本之前的 IRIX 上广泛使用,之后 xfs 取代了它。虽然鼓励迁移到 xfs,但 efs 仍然受到支持,并在 CD 上广泛使用。

Linux 驱动程序在早期 beta 阶段可用,可在 Linux 扩展文件系统 主页获取。

XFS

Silicon Graphics Inc (sgi) 已开始将其大型机级文件系统移植到 Linux。源代码尚未发布,因为他们正忙于清理法律障碍,但一旦完成,他们将根据 GPL 提供源代码。

更多信息已在 SGI 的 XFS 项目页面 上提供。

reiserfs

截至 1997 年 7 月 23 日,Hans Reiser reiser (at) RICOCHET.NET 已将其基于树的 reiserfs 源代码发布到网上。虽然他的文件系统有一些非常有趣的功能,并且比 ext2fs 快得多,并且已被许多人使用。希望它能为内核 2.4.0 做好准备,该内核可能会在年底准备就绪。

enh-fs

增强文件系统项目现在已经停止。

Tux2 fs

这是 ext2fs 的一个变体,它增加了在发生意外中断(如电源故障)时的鲁棒性。在这种事件发生后,Tux2 fs 将重新启动,文件系统处于一致的、最近记录的状态,而无需 fsck 或其他恢复操作。为了实现这一点,Tux2 fs 使用了一种新设计的算法,称为 Phase Tree。

更多信息可以在 项目主页 上找到。

5.2 Microsoft 文件系统

这家公司对很多事情负责,包括许多文件系统,这些文件系统至少造成了混乱。

fat

实际上,那里有 2 个 fatfat12fat16,具体取决于使用的分区大小,但幸运的是,差异很小,以至于整个问题都是透明的。

从好的方面来说,它们快速且简单,大多数操作系统都理解它,并且可以读取和写入此文件系统。仅此而已。

缺点是安全性有限、权限标志严重受限以及可伸缩性差。例如,使用 fat,您不能拥有大于 2 GB 的分区。

fat32

大约 10 年后,微软意识到 fat 大约落后于时代 10 年,并创建了这个文件系统,该文件系统具有相当好的可伸缩性。

权限标志仍然有限。NT 4.0 无法读取此文件系统,但 Linux 可以。

vfat

在微软推出 fat32 的同时,他们还增加了对长文件名的支持,称为 vfat

Linux 通过以类型 vfat 挂载来读取 vfatfat32 分区。

ntfs

这是 Win-NT 的原生文件系统,但由于没有完整的可用信息,因此对其他操作系统的支持有限。

5.3 日志和日志文件系统

这些系统采用了一种完全不同的文件更新方法,通过将文件修改记录在日志中,然后在某个时间点检查日志。

读取速度与始终直接更新文件的传统文件系统大致相同。写入速度快得多,因为只有更新被追加到日志中。这一切对用户来说都是透明的。这些文件系统的真正优势在于可靠性,尤其是在检查文件系统完整性方面。由于已知上次检查点之前的数据是良好的,因此只需要检查日志,这比传统文件系统快得多。

请注意,虽然日志文件系统跟踪对数据和 inode 所做的更改,但日志文件系统仅跟踪 inode 更改。

Linux 在此类文件系统中有相当多的选择,但没有一个达到生产质量。有些也处于搁置状态。

请注意,ext3fsXFSreiserfs 也具有日志或日志功能。

5.4 只读文件系统

只读介质也未能幸免于更通用文件系统中日益增长的复杂性,因此再次有大量选择可供选择,同时也为令人兴奋的错误提供了机会。

请注意,ext2fs 在 CD-ROM 上运行良好,并且似乎可以节省空间,同时提供正常的文件系统功能,例如长文件名和权限,这些功能在跨媒体复制文件时可以保留。在 CD-ROM 上拥有 /dev 也是可能的。

其中大多数与 CD-ROM 介质一起使用,但也可以使用新的 DVD,您甚至可以通过硬盘文件上的环回设备使用它来验证映像,然后再刻录 ROM。

Linux 有一个只读 romfs,但由于它与磁盘无关,因此这里不再赘述。

High Sierra

这是 CD-ROM 格式的最早标准之一,据说是以最终协议达成地点的酒店命名的。

High Sierra 的功能非常有限,以至于新的扩展不得不出现,虽然新格式层出不穷,但最初的 High Sierra 仍然是常见的先驱,因此仍然得到广泛支持。

iso9660

国际标准化组织制定了他们的扩展,并将该标准正式化为我们所知的 iso9660 标准。

Linux iso9660 文件系统同时支持 High Sierra 和 Rock Ridge 扩展。

Rock Ridge

并非所有人都接受短文件名和缺少权限等限制,因此很快就出现了 Rock Ridge 扩展来纠正这些缺点。

Joliet

微软不甘示弱,在标准扩展游戏中,决定应该使用一些国际化功能来扩展 CD-ROM 格式,并将其称为 Joliet

Linux 在内核 2.0.34 或更高版本中支持此标准。您需要启用 NLS 才能使用它。

琐事

Joliet 是芝加哥郊外的一个城市;以电影《布鲁斯兄弟》中杰克被关押的监狱所在地而闻名。Rock Ridge(ISO 9660 的 UNIX 扩展)以电影《神枪小子》中的(虚构)城镇命名。

UDF

随着 DVD 的到来,其存储容量高达约 17 GB,世界似乎需要另一种格式,这次雄心勃勃地命名为通用磁盘格式 (UDF)。它旨在取代 iso9660,并且 DVD 将需要它。

目前,这不在标准 Linux 内核中,但正在进行一个项目,以制作一个 http://trylinux.com/projects/udf/index.html name="UDF driver"> 用于 Linux 的 UDF 驱动程序。补丁和文档可用。

更多信息也可在 Linux 和 DVD 页面上找到。

5.5 网络文件系统

有大量的网络技术可用,可让您在本地甚至全球网络中分发磁盘。这在某种程度上与本 HOWTO 的主题无关,但由于它可以与本地磁盘一起使用,我将简要介绍一下。如果有人(其他人)将其纳入单独的 HOWTO 中,那就最好了...

NFS

这是最早的系统之一,允许将一台机器上的文件空间挂载到另一台机器上。NFS 存在许多问题,从性能到安全性不等,但它仍然变得根深蒂固。

AFS

这是一个允许跨大型网络高效共享文件的系统。最初是一个学术项目,现在由 Transarc 出售,其主页为您提供更多详细信息。

来自 MIT 的 Derek Atkins 将 AFS 移植到 Linux,并为此设置了 Linux AFS 邮件列表(linux-afs@mit.edu),该列表向公众开放。加入列表的请求应发送至 linux-afs-request@mit.edu,最后错误报告应发送至 linux-afs-bugs@mit.edu

重要提示:由于 AFS 使用加密,因此它是受限软件,无法轻易从美国出口。

拥有 Transarc 的 IBM 已宣布最新版本的客户端和服务器均可用于 Linux。

Arla 是 AFS 的免费实现,请查看 Arla 主页 以获取更多信息以及文档。

Coda

类似于 AFS 的网络文件系统正在开发中,称为 Coda。它旨在比 AFS 更强大且容错性更高,并支持移动、断开连接的操作。目前,它的可伸缩性不是很好,并且没有真正合适的管理工具,而 AFS 具有,ARLA 也开始具有。

nbd

网络块设备 (nbd) 在 Linux 内核 2.2 及更高版本中可用,据报道性能出色。这里有趣的是,它可以与 RAID(参见下文)结合使用。

enbd

http://www.it.uc3m.es/~ptb/nbd name="增强型网络块设备"> (enbd) 是一个项目,旨在增强 nbd 的功能,例如块日志多通道通信、内部故障转移以及通道之间的自动平衡等等。

其预期用途是在网络上进行 RAID。

GFS

全局文件系统 是一种新的文件系统,旨在跨广域网进行存储。它目前处于早期阶段,更多信息将在稍后发布。

5.6 特殊文件系统

除了通用文件系统之外,还有许多更具体的文件系统,通常是为了提供更高的性能或其他功能,通常会在其他方面做出权衡。

tmpfsswapfs

对于短期快速文件存储,SunOS 提供 tmpfs,它与 NeXT 上的 swapfs 大致相同。这通过缓存文件数据并将控制信息保存在内存中来克服 ufs 固有的缓慢问题。这意味着此类文件系统上的数据将在重新启动时丢失,因此主要适用于 /tmp 区域,但不适用于 /var/tmp,后者是放置必须在重新启动后仍然存在的临时数据的位置。

SunOS 为 tmpfs 提供的调优非常有限,文件数量甚至受到机器物理内存总量的限制。

自内核版本 2.4 以来,Linux 现在具有 tmpfs,并且通过启用虚拟内存文件系统支持(以前的 shm fs)来启用。在某些情况下,tmpfs 可能会在早期的内核版本中锁定系统,请确保您使用 2.4.6 或更高版本。

userfs

用户文件系统 (userfs) 允许对传统文件系统使用进行许多扩展,例如基于 FTP 的文件系统、压缩 (arcfs) 和快速原型制作以及许多其他功能。docfs 基于此文件系统。查看 userfs 主页 以获取更多信息。

devfs

当添加、删除磁盘或磁盘发生故障时,剩余磁盘的磁盘设备名称很可能会更改。例如,如果 sdb 发生故障,则旧的 sdc 变为 sdb,旧的 sdc 变为 sdb,依此类推。请注意,在这种情况下,hdahdb 等将保持不变。同样,如果添加新驱动器,则可能会发生相反的情况。

不能保证 SCSI ID 0 变为 sda,并且以递增的 ID 顺序添加磁盘只会添加新的设备名称,而不会重命名以前的条目,因为某些 SCSI 驱动程序从 ID 0 开始分配,而另一些则反转扫描顺序。同样,添加 SCSI 主机适配器也可能导致重命名。

通常,设备名称按照找到它们的顺序分配。

问题的根源在于用于描述设备本身的设备文件中的主次编号可用位数有限。您可以在 /dev 目录中查看这些信息,有关编号和分配的信息可以在 man MAKEDEV 中找到。目前,针对此问题有两种解决方案,处于不同的开发阶段

scsidev

通过创建驱动器数据库及其所属位置来工作,查看 man scsifsscsidev 主页 以获取更多信息

devfs

是一个更长期的项目,旨在通过使 /dev 目录成为内核文件系统,以类似于 /proc 的方式来绕过设备编号的整个业务。随着信息的可用,将出现更多信息。

smugfs

由于多种原因,目前很难拥有大于 2 GB 的文件。一种试图克服此限制的文件系统是 smugfs,它非常快速但也很简单。例如,没有目录,并且块分配很简单。

它以 压缩 tar 源代码 的形式提供,虽然它适用于内核版本 2.1.85,但很可能需要进行一些工作才能使其适应更新的内核。此外,低版本号 (0.0) 表明需要格外小心。

5.7 文件系统建议

有很多选择,但通常建议使用您的发行版附带的通用文件系统。如果您使用 ufs 并且有某种 tmpfs 可用,您应该首先从通用文件系统开始,以了解空间需求,并在必要时购买更多 RAM 以支持您需要的 tmpfs 的大小。否则,您最终会遇到莫名其妙的崩溃并浪费时间。

如果您使用双启动并且需要在两个操作系统之间传输数据,最简单的方法之一是使用适当大小的分区,格式化为 fat,因为大多数系统都可以可靠地读取和写入此分区。请记住 fat 分区的 2 GB 限制。

有关文件系统互连的更多信息,您可以查看 文件系统 页面,该页面已被 文件系统 和文章 Kragen 的惊人文件系统列表 所取代。

该指南正在被一个正在编写的 HOWTO 所取代,当它准备就绪时,将添加一个链接。

为了避免在驱动器发生故障时设备重命名造成的完全混乱,请检查系统的扫描顺序,并尝试将根系统保留在 hdasda 上,并将 ZIP 驱动器等可移动介质放在扫描顺序的末尾。


下一页 上一页 目录