转载自Linux学习 来自:Linux程序员 - SegmentFault 作者:wuyangchun 链接:https://segmentfault.com/a/1190000008481493 本文将对Linux下常见的几种文件系统进行对比,包括ext2、ext3、ext4、XFS和Btrfs,希望能帮助大家更好的选择合适的文件系统。 历史
从创建时间可以看出他们所处的不同时代,因为Btrfs的实现借鉴自ZFS,所以这里也将ZFS列出来作为参考。 大小**
最大文件和分区大小受格式化分区时所采用的块大小(block size)所影响,块越大,所支持的最大文件和分区越大,也越可能浪费磁盘空间,上表列出的数据基于4K的块大小。 代码规模从代码规模可以看出文件系统的功能丰富程度以及复杂度,下面列出的数据来自于kernel-4.1-rc8,只是简单的用wc -l来统计,没有过滤空行、注释等。
Btrfs还在快速的开发过程中,代码行数可能还有比较大的变化 XFS和Btrfs都使用了B-tree ext2ext的优点是比较简单,文件比较少时性能较好,比较适合文件少的场景,主要缺点如下 inode的数量是固定不变的,在格式化分区的时候可以指定inode和数据块所占空间的比例,但一旦格式化好,后续就没法再改变了 当块大小为4K时,单个文件大小不能超过2TB,分区大小不能超过16TB(目前硬盘大小一般都只有几TB,所以也不是什么大问题,) 一个目录下最多只能有32000个子目录 由于目录里面存储的文件和子目录都是以线性方式来组织的,所以遍历目录效率不高,尤其当目录下文件个数达到10K以上规模的时候,速度会明显的变慢 当底层的磁盘分区空间变大时(使用LVM时很常见),ext2没法动态的扩展来使用增加的空间 没有日志(Journal)功能,所以数据的安全性不高 ext3ext3在ext2的基础上实现了下面几个功能,其它的都保持不变,即ext2的缺点ext3也有 支持日志(Journal)功能,数据的安全性较ext2有很大的提高 当底层的分区空间变大时,ext3可以自动扩展来使用增加的空间 使用HTree来组织目录里面的文件和子目录,使目录下的文件和子目录数不再受性能**(数量超过10K也不会有性能问题) ext4ext4借鉴了当前成熟的一些文件系统技术,在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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|