我们知道不同的操作系统所使用的文件系统是不一样的。举例来说,Windows 98 以前所使用的是文件系统是 FAT,Windows 2000 以后的版本有所谓的 NTFS 文件系统。至于 Linux 的正规文件系统则为 Ext2(Linux second extended file system,Ext2fs)。之后又出现了改进版的 Ext3 和 Ext4 ,总体上变化不大。 文件系统的对比我们经常听说 Windows 需要磁盘碎片整理,而 Linux 却不需要。这是为什么呢? 我们可以先看看 FAT 文件系统的数据访问方式,如下图所示。
那 Windows 的文件系统是怎样的呢? 我们以 FAT 为例说明。
在往 FAT 文件系统中存入一个文件时,系统会尽量存放在靠近磁盘开始的地方。当你存入第二个文件时,它会紧挨着第一个文件。当进行频繁的删除修改后,block 就会分散的特别厉害。FAT 文件系统没有 inode 的存在,所以不能一下子将文件的所有 block 在一开始就读取出来。每个 block 号码都记录在前一个 block 当中,形成一个 block 链。当我们需要读取文件的时候,就必须一个一个地将 block 读出,例如上图的读出顺序为 1、6、3、12 。这就会导致磁头无法在磁盘转一圈就获得所有数据,有时候需要来回转好几圈才能读取到这个文件,导致文件读取性能极差。这就是 Windows 经常需要碎片整理的原因——使离散的数据汇合在一起 而 NTFS 文件系统虽然智能了一点,在文件周围分配了一些“缓冲”的空间,但经过一段时间的使用后, NTFS 文件系统还是会形成碎片。由于 ext 是索引式文件系统,所以基本上不太需要经常进行磁盘碎片整理。 ext2/ext3 文件系统我们知道文件数据除了文件的实际内容外,通常还包括非常多的属性,例如 Linux 中的文件权限(rwx)和文件属性(拥有者、用户组、时间、大小等)。ext 文件系统将这两部分存放在不同的块,权限和属性存放在 inode 中,至于文件的实际数据则存放在 block 块中。另外还有一个超级块(super block)会记录整个文件系统的整体系统。每个 inode 和 block 都有自己的编号。 ext 文件系统在格式化的时候基本上是区分为多个块组(block group)的,每个块组都有独立的 inode/block/super block 系统。其整体展示图如下所示:
其中各个块的含义如下:
总结本节主要讲述了 ext2/ext3 与其他文件系统的区别,以及不用磁盘碎片整理的原理。然后对 ext 文件系统的体系结构进行了剖析,说明了各个数据块的意义。重点是了解 inode 和 block 在 Linux 中所扮演的不同角色以及重要意义。 Linux 是一个文件王国,一切都以文件的形式存在。了解Linux的文件系统,是深入了解操作系Linux原理的重要一步。 (责任编辑:IT) |