首页 存档 技术 查看内容

Linux下常见文件系统对比

2018-3-30 13:00 |来自: 互联网 393 0

摘要: 转载自Linux学习 来自:Linux程序员 - SegmentFault 作者:wuyangchun 链接:https://segmentfault.com/a/1190000008481493 本文将对Linux下常见的几种文件系统进行对比,包括ext2、ext3、ext4、XFS和Btrfs,希望能 ...

转载自Linux学习

来自:Linux程序员 - SegmentFault

作者:wuyangchun

链接:https://segmentfault.com/a/1190000008481493


本文将对Linux下常见的几种文件系统进行对比,包括ext2、ext3、ext4、XFS和Btrfs,希望能帮助大家更好的选择合适的文件系统。



历史


文件系统 创建者 创建时间 最开始支持的平台
ext2 Rémy Card 1993 Linux,Hurd
XFS SGI 1994 IRIX, Linux, FreeBSD
ext3 Dr. Stephen C. Tweedie 1999 Linux
ZFS Sun 2004 Solaris
ext4 众多开发者 2006 Linux
Btrfs Oracle 2007 Linux


从创建时间可以看出他们所处的不同时代,因为Btrfs的实现借鉴自ZFS,所以这里也将ZFS列出来作为参考。


大小**


文件系统 最大文件名长度 最大文件大小 最大分区大小
ext2 255 bytes 2 TB 16 TB
ext3 255 bytes 2 TB 16 TB
ext4 255 bytes 16 TB 1 EB
XFS 255 bytes 8 EB 8 EB
Btrfs 255 bytes 16 EB 16 EB


最大文件和分区大小受格式化分区时所采用的块大小(block size)所影响,块越大,所支持的最大文件和分区越大,也越可能浪费磁盘空间,上表列出的数据基于4K的块大小。


代码规模


从代码规模可以看出文件系统的功能丰富程度以及复杂度,下面列出的数据来自于kernel-4.1-rc8,只是简单的用wc -l来统计,没有过滤空行、注释等。


文件系统 源文件(.c) 头文件(.h)
ext2 8363 1016
ext3 16496 1567
ext4 44650 4522
XFS 89605 15091
Btrfs 105254 7933


Btrfs还在快速的开发过程中,代码行数可能还有比较大的变化

XFS和Btrfs都使用了B-tree


ext2


ext的优点是比较简单,文件比较少时性能较好,比较适合文件少的场景,主要缺点如下


inode的数量是固定不变的,在格式化分区的时候可以指定inode和数据块所占空间的比例,但一旦格式化好,后续就没法再改变了

当块大小为4K时,单个文件大小不能超过2TB,分区大小不能超过16TB(目前硬盘大小一般都只有几TB,所以也不是什么大问题,)


一个目录下最多只能有32000个子目录

由于目录里面存储的文件和子目录都是以线性方式来组织的,所以遍历目录效率不高,尤其当目录下文件个数达到10K以上规模的时候,速度会明显的变慢

当底层的磁盘分区空间变大时(使用LVM时很常见),ext2没法动态的扩展来使用增加的空间

没有日志(Journal)功能,所以数据的安全性不高


ext3


ext3在ext2的基础上实现了下面几个功能,其它的都保持不变,即ext2的缺点ext3也有


支持日志(Journal)功能,数据的安全性较ext2有很大的提高

当底层的分区空间变大时,ext3可以自动扩展来使用增加的空间

使用HTree来组织目录里面的文件和子目录,使目录下的文件和子目录数不再受性能**(数量超过10K也不会有性能问题)


ext4


ext4借鉴了当前成熟的一些文件系统技术,在ext3上增加了一些功能,并且对性能做了一些改进,主要变化如下


当块大小为4K时,支持的最大文件和最大分区大小分别达到了16TB和1EB

不再受32000个子目录数的**,支持不限数量的子目录个数

支持Extents,提高了大文件的操作性能

内部实现上支持一次分配多个数据块,较ext3的性能有所提高


支持延时分配(即支持fallocate函数)(fallocate是libc的函数,在不支持该功能的文件系统上,libc会创建一个占用磁盘空间文件)

支持在线快速扫描

支持在线碎片整理(单个文件或者整个分区)

日志(Journal)支持校验码(checksum),数据的安全性进一步提高

支持无日志(No Journaling)模式(ext3不支持该功能),这样就和ext2一样,消除了写日志对性能的影响

支持纳秒级的时间戳

记录了文件的创建时间,由于相关的应用层工具还不支持,所以只能通过debug的方式看到文件的创建时间


这里是一个查看文件/etc/fstab创建时间的例子(文件存在/dev/sda1分区上):

dev@ubuntu:~$ ls -i /etc/fstab  
10747906 /etc/fstab  
dev@ubuntu:~$ sudo debugfs -R 'stat
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部