Linux文件系统ext3与ext4主要区别手记


很长一段时间以来,ext3是很多linux发行版默认的文件系统,现在ext4已经发布,并且已经有发行版开始使用ext4作为默认的文件系统了(其实最初的时候ext4是作为ext3的扩展,但是为了保证ext3的稳定性等原因,很多人反对直接对ext3进行扩展,所以单独作为了ext4项目)

ext3还是使用15个inode来查找数据块,前12个为直接数据块,直接指向存储数据的数据块,接下来分别为一级间接块,二级间接块,三级间接块,如下图:

其中point本来也是数据块,现在拿来做数据块的索引用,其中ext3的头文件定义为:__u32 i_block[EXT3_N_BLOCKS];/* Pointers to blocks */,所以可以计算ext3文件系统的极限:

最大分区:
    因为定义的是无符号32位数,所以可能定位的block范围为2^32,也就是4G,如果一个block大小为4KB,所以为4G * 4KB = 16TB

最大文件:
    前面直接指向12个数据块,一级间接块最大为block size / 4,block size就是数据块的大小,因为一个索引是4个字节,所以除以4,这样计算下来,最大的文件可以使用的总块数为:12 + (block size/4) + (block size/4)^2 + (block size/4)^3,如果block size大小为4K,则为(12 + 2^10 + 2^20 + 2^30) * 2^12 约等于4T。

为了突破ext3这个大小限制,ext4使用了48位的数据块索引空间,同时使用了如下结构代替inode索引的方式:
struct ext3_extent {
__u32 ee_block; /* first logical block extent covers */
__u16 ee_len;   /* number of blocks covered by extent */
__u16 ee_start_hi; /* high 16 bits of physical block */
__u32 ee_start; /* low 32 bigs of physical block */
};


这样查找数据块的时候就不是每个块建立一个索引,而且使用连续的数据块,也就是分别指示起始位置,以及连续的块数,这样在大文件的时候,磁盘io效率以及查找数据块效率上都有很大的提高,所以ext4的文件系统也比ext3出色。因为使用了48位的索引空间,所以在4KB块大小的情况下,文件系统的极限是2^48 * 4KB = 1EB,不过,目前由于工具的限制,只能使用16TB的分区。

EXT3与EXT4的主要区别

Linux kernel自2.6.28开始正式支持新的文件系统 Ext4。 Ext4是Ext3的改进版,修改了Ext3中部分重要的数据结构,而不仅仅像Ext3对Ext2那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能:

1.与Ext3兼容。执行若干条命令,就能从Ext3在线迁移到Ext4,而无须重新格式化磁盘或重新安装系统。原有Ext3数据结构照样保留,Ext4作用于新数据,当然,整个文件系统因此也就获得了Ext4所支持的更大容量。

2.更大的文件系统和更大的文件。较之Ext3目前所支持的最大16TB文件系统和最大2TB文件,Ext4分别支持1EB(1,048,576TB,1EB=1024PB,1PB=1024TB)的文件系统,以及16TB 的文件。

3.无限数量的子目录。Ext3目前只支持32,000个子目录,而Ext4支持无限数量的子目录。

4.Extents。Ext3采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在Ext3中要建立25,600个数据块(每个数据块大小为 4KB)的映射表。而Ext4引入了现代文件系统中流行的extents概念,每个 extent 为一组连续的数据块,上述文件则表示为“该文件数据保存在接下来的25,600个数据块中”,提高了不少效率。

  • 1
  • 2
  • 下一页

相关内容