※从网上摘录一些自己比较关心的区别。
●更大的文件系统和更大的文件
ext3:16TB文件系统和最大2TB文件,ext4:1EB文件系统和最大16TB文件。
●无限数量的子目录
ext3:32,000个子目录,ext4:无限数量的子目录。
●Extents
ext3采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在ext3中要建立25,600个数据块(每个数据块大小为 4KB)的映射表。而ext4引入了extents概念,每个extent 为一组连续的数据块,上述文件则表示为“该文件数据保存在接下来的25,600个数据块中”,提高了不少效率。
●多块分配
ext3的数据块分配器每次只能分配一个4KB 的块,写一个 100MB 文件就要调用 25,600 次数据块分配器,而 ext4的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。
●延迟分配
ext3的数据块分配策略是尽快分配,而 ext4是尽可能地延迟分配,直到文件在 cache 中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。
●inode 相关特性
ext3:128byte,ext4:256byte。
●持久预分配(Persistent preallocation)
P2P 软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件。ext4在文件系统层面实现了持久预分配并提供相应的API(libc 中的 posix_fallocate())。
●默认启用 barrier
ext4默认启用barrier,只有当barrier之前的数据全部写入磁盘,才能写 barrier之后的数据。
●更大的文件系统和更大的文件
ext3:16TB文件系统和最大2TB文件,ext4:1EB文件系统和最大16TB文件。
●无限数量的子目录
ext3:32,000个子目录,ext4:无限数量的子目录。
●Extents
ext3采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在ext3中要建立25,600个数据块(每个数据块大小为 4KB)的映射表。而ext4引入了extents概念,每个extent 为一组连续的数据块,上述文件则表示为“该文件数据保存在接下来的25,600个数据块中”,提高了不少效率。
●多块分配
ext3的数据块分配器每次只能分配一个4KB 的块,写一个 100MB 文件就要调用 25,600 次数据块分配器,而 ext4的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。
●延迟分配
ext3的数据块分配策略是尽快分配,而 ext4是尽可能地延迟分配,直到文件在 cache 中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。
●inode 相关特性
ext3:128byte,ext4:256byte。
●持久预分配(Persistent preallocation)
P2P 软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件。ext4在文件系统层面实现了持久预分配并提供相应的API(libc 中的 posix_fallocate())。
●默认启用 barrier
ext4默认启用barrier,只有当barrier之前的数据全部写入磁盘,才能写 barrier之后的数据。