附录 B: EXT2 / EXT3 文件系统


第二延伸文件系统 (EXT2)


全文出处: http://www.freeos.com/articles/3912/

第二延伸文件系统(ext2)介绍

自从我们开始使用计算机后,大多数的使用者都曾经使用过文件,而我们总是对关于硬盘如何正确地储存文件感到好奇, 它看起来似乎非常抽象,所以今天让我们看一看 Linux 操作系统中较新的文件系统版本『第二延伸系统( ext2 )』 ,并了解它各方面之用途。

这个文件系统是主要来自于 Andrew Tanenbaum 所写的 Minix 文件系统,它也是唯一可用在免费操作系统的文件系统,称之为 Minix。它后来修正为 Linux 所惯用的文件系统并称为延伸文件系统,到现在 Linux 的文件系统称为 ext2 (第二延伸文件系统),它是延伸文件系统中较新的版本并支持访问控制列(ACL)。

但是在着手研究 ext2 文件系统之前,让我们先了解文件系统中之专有名词的关联。
  • Block (区块): 文件在磁盘中被储存在整数固定大小的区块中, 那区块的大小通常是2的次方。在默认中,ext2文件系统的区块大小是4K。研究颢示, 4K字节对于一磁盘区块而言是最理想的大小,假如一个文件的大小无法达成4K字节的倍数时, 那最后的磁盘区块部分就会被浪费。在最不好的例子中几乎在完整的区块中就有一字节被浪费掉。

    对于这情况有一点技巧,假如我们选择了一个较大的区块,则对于小的文件而言会有一些磁盘空间被浪费掉。 另外一方面,假如我们使用一个非常小的区块,则磁盘区块数量会成指数的添加, 因此对于文件而言需有更多的搜寻时间。所以,选择区块大小必须三思而后行。

    当一个文件被加载到内存时,那磁盘区块会被放在主存储器中之缓冲缓存区,假如它们已经变更了, 区块在缓冲区中会被标记为’Dirty’, 其意指的是这些区块必须先写到磁盘中来维持磁盘上的区块及在主存储器中的区块之一致性.

  • Superblock:superblock 是在每个文件系统开始的位置, 其储存信息像是文件系统的大小,空的和填满的区块,它们各自的总数和其他诸如此类的数据。 要从一个文件系统中存取任何文件皆须经过文件系统中之superblock。如果superblock损坏了, 它可能无法从磁盘中去取得数据。

  • Inode: 对于文件系统而言一个inode是在inode表格中的一个项目。 Inode包含了所有文件有关的信息例如名称、大小、连接的数量、数据创建之日期,修改及存取的时间。 它也包含了磁盘区块的文件指向(pointer)。pointer是用来记录文件被储存在何处。

Ext2fs公用程序

现在让我们来看看一些标准Linux版本之ext2fsprogs公用程序:
  • e2fsck
    这个程序允许我们在ext2文件系统上去运行文件系统检查,它像是Windows中之 Scandisk一样,但却是一种更有效的系统检查方式。在此,我们可以加上一个文件名来检查上面之损坏区块。

    警告:绝对不要在任何已挂载的文件系统上运行 e2fsck/fsck。假如我们想要去运行 fsck,我们应该卸下文件系统后再去运行 fsck(亦即需要 umount 该扇区啰)。如果不这样做,可能会让文件系统毁损。

  • tune2fs
    这允许我们去调整文件系统的参数配置。在此,我们可以配置在两个文件系统检查间之最大挂载总数、 容量标记、错误行为、变更保留的信息和许多其他参数。

  • dumpe2fs
    这个程序将ext2文件系统状态输出到标准的设备上。它对于分析问题以及存取一般关于文件系统用法的信息是有帮助的。

  • mke2fs
    这个程序允许我们在先前尚未格式化的磁盘中,去创建一个ext2的文件系统。 它提供了许多的选项包含区块的大小、段落的大小、每一个inode的字节到多种磁盘阵列的选项。 mke2fs通常在第一次安装的期间运行,并创建完成新的 root 及其他的文件系统。(就相当于 DOS 底下的 format 程序啦!)

  • badblocks
    这个程序去搜寻磁盘并检查区块是否已经损坏,它通常会在新的文件系统安装程序前运行, 但请不要在挂载好的文件系统上运行。
在Linux文件系统中最新的版本被称为ext3,并已有 Journaling 之支持。Journaling 文件系统对于所有已完成的步骤,持有记录以及检查点,所以假使系统死机时,它可以从最后的检查点来还原文件系统。

为何选择 EXT3 呢


全文出处: http://www.linuxplanet.com/linuxplanet/reports/3726/1/

Red Hat Linux 7.2 为何决定采用ext3文件系统?

Red Hat决定在7.2版中使用 ext3 的格式来作为默认的文件系统在,引起相当多熟悉 Linux 使用者的关注,但 ext3 并不是唯一的,也不是众多日志式 (journaling)文件系统中最佳的。

传统的 Linux 文件系统 ext2,对于在相当小容量的硬盘上之小文件而言是相当的理想。随着硬盘的容量及文件大小大幅添加, 整体性能会下滑。有些原因是来自读取未有效利用的磁盘空间,有些原因是来自不正常关机或是电源中断文件系统的恢复时间。 文件系统经由 e2fsck 在一个 1GB 的硬盘做检查是毫不费力的,但相同的测试在 40GB 的硬盘上可能会相当的秏费时间。 所以就有日志式文件系统的诞生。

这些记录硬盘状态的文件称为日志。 所以在不正确关机之后重新启动需要参考到日志文件来重新回复文件系统的状态, 而非将整个硬盘做扫描。 同时, 日志式文件系统可以有更高的硬盘空间使用效率及使数据在各种不同之文件大小中能够快速的读取及写入。

Linux并不是只有一个日志式的文件系统,它有四个,或是说成三又二分之一个:
  • Reiser文件系统: 依照 Hans Reiser 的名字而取。Reiser 是众所皆知的一种新式快速记录硬盘内容的文件系统,它曾经被广泛的使用超过一年, 且这个文件系统被推荐安装在 SuSE7.1版及7.2版上。

  • JFS文件系统:经由 IBM 所开发的,其设计的理念在于提供一高速的处理能力。 IBM 从 2000 年 2 月间开始经过一系列的测试版本,它的 1.0 版本已在六月底公开发表。

  • XFS 文件系统:XFS 是 SGI 公司在 Linux 上所开发的日志式文件系统, 它也提供了所有以完整发展为特色的日志式文件系统。

  • ext3 文件系统:ext3 是之前所提及的二分之一日志式文件系统。 为何只有一半呢?原因是 ext3 是一种迭在传统 ext2 文件系统上面并保有磁盘活动纪录的日志式文件系统。 所以当不正确关机时,文件的恢复速度会比 ext2 文件系统来的快。但是,因为它是被结合在 ext2 中,它会遭受到一些老旧系统的限制并因此不能利用所有日志式文件系统的完整功能。 这样并非是完全不好,因为 ext3 分割区并没有不同于 ext2 文件系统,因此如 ext3 损毁要回到 ext2文件系统却是非常的简单。
Red Hat 是第一个采用 ext3 的公司,它尝试性的将 Linux 文件系统推向日志式文件系统。当公司计划在 7.2 版的第二个测试版本采用 ext3 时,公司中首席核心开发者Michael K. Johnson便迅速的提供一个原理的阐述:

”为什么你想要从 ext2 转换到 ext3 呢?有四个主要的理由: 可利用性、数据完整性、速度及易于转换”。可利用性,他指出,这意味着从系统中止到快速重新复原而不是持续的让 e2fsc k运行长时间的修复。ext3 的日志式条件可以避免数据毁损的可能。他也指出”除了写入若干数据超过一次时, ext3 往往会较快于 ext2,因为 ext3 的日志使硬盘读取头的移动能更有效的进行“。 然而或许决定的因素还是在Johnson先生的第四个理由中:

“它是可以轻易的从 ext2 变更到 ext3 来获得一个强而有力的日志式文件系统而不需要重新做格式化” 他说道。”那是正确的,为了体验一下 ext3 的好处是不需要去做一种长时间的, 冗长乏味的且易于产生错误的备份工作及重新格式化的动作”。