• 超级码客 超级码客
  • 首页
  • 题库
    • 数据结构与算法面试题 ( 2619 + )
    • Java工程师面试题 ( 6548 + )
    • 前端工程师面试题 ( 6918 + )
    • Python工程师面试题 ( 4195 + )
    • C++工程师面试题 ( 4458 + )
    • Android工程师面试题 ( 3217 + )
    • IOS工程师面试题 ( 2330 + )
    • PHP工程师面试题 ( 3790 + )
    • C#工程师面试题 ( 3411 + )
    • Golang工程师面试题 ( 3522 + )
    • 分布式微服务面试题(中高级) ★ ( 2847 + )
    • 运维+DevOPS工程师面试题 ( 3463 + )
    • 大数据工程师面试题 ( 3093 + )
    • 数据库工程师面试题 ( 3246 + )
    • 软件测试工程师面试题 ( 2402 + )
    • 网络通讯工程师面试题 ( 1768 + )
  • 笔试
    • 算法数据结构笔试  ( 1200 + )
    • Java 笔试题  ( 1000 + )
    • 前端笔试题  ( 800 + )
    • PHP 笔试题  ( 150 + )
    • Python 笔试题  ( 150 + )
    • C++ 笔试题  ( 1200 + )
    • C# 笔试题  ( 180 + )
    • Golang 笔试题  ( 150 + )
    • 数据库笔试题  ( 800 + )
    • 运维笔试题  ( 260 + )
    • 网络通讯笔试题  ( 900 + )
    • 分布式笔试题  ( 80 + )
    • Android 笔试题  ( 120 + )
    • IOS 笔试题  ( 120 + )
    • 大数据 笔试题  ( 160 + )
    • 软件测试笔试题  ( 100 + )
  • 宝典
  • 专栏
  • 大厂题
    • 互联网大厂面试真题资料下载 (历年真题) ( 1000 + )
    • 互联网企业模拟真题卷 (面试题)  ( 1700 + )
    • 互联网企业模拟真题卷 (笔试题)  ( 1300 + )
  • 框架
  • 模拟
  • 组卷
  • 下载
  • 码客
    • Java 编程 ( 1297 篇 )
    • PHP 编程 ( 3397 篇 )
    • Python 编程 ( 1330 篇 )
    • 前端开发 ( 9328 篇 )
    • C / C++ ( 1375 篇 )
    • C# 编程 ( 904 篇 )
    • Golang 编程 ( 1144 篇 )
    • 数据库开发 ( 4549 篇 )
    • Linux 运维 ( 2346 篇 )
    • Docker容器 ( 1489 篇 )
    • 网络安全 ( 789 篇 )
    • Git代码协同 ( 1498 篇 )
    • 更多分类
  • 资源
    • IT图谱资料下载
    • Java资料下载
    • PHP资料下载
    • Python资料下载
    • 前端技术资料下载
    • IOS资料下载
    • DevOps资料下载
    • 公有云资料下载
    • C++专区资料下载
    • 数据库资料下载
    • 大数据资料下载
    • 架构设计资料下载
    • 职业发展资料下载
    • 更多分类
  • 职场
    • 校园专区
    • IT 职场
    • 发展之路
    • 挨踢人生
    • 面试经验
    • 资格考证
  • 图书
  • 简历
  • 🎁VIP
       Linux下常见文件系统的对比
    2025-04-25 20:55:24  [ 作者:小码客 ]  阅读数:3351

        

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

    内容来自于网上找的资料以及自己的一些经验,能力有限,错误在所难免,仅供参考

    历史

    文件系统创建者创建时间最开始支持的平台
    ext2Rémy Card1993Linux,Hurd
    XFSSGI1994IRIX, Linux, FreeBSD
    ext3Dr. Stephen C. Tweedie1999Linux
    ZFSSun2004Solaris
    ext4众多开发者2006Linux
    BtrfsOracle2007Linux

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

    大小限制

    文件系统最大文件名长度最大文件大小最大分区大小
    ext2255 bytes2 TB16 TB
    ext3255 bytes2 TB16 TB
    ext4255 bytes16 TB1 EB
    XFS255 bytes8 EB8 EB
    Btrfs255 bytes16 EB16 EB

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

    代码规模

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

    文件系统源文件(.c)头文件(.h)
    ext283631016
    ext3164961567
    ext4446504522
    XFS8960515091
    Btrfs1052547933
    • 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 <10747906>' /dev/sda1 Inode: 10747906   Type: regular    Mode:  0644   Flags: 0x80000 Links: 1   Blockcount: 8 ctime: 0x5546dc54:6e6bc80c -- Sun May  3 22:41:24 2015  atime: 0x55d1b014:8bcf7b44 -- Mon Aug 17 05:57:40 2015  mtime: 0x5546dc54:6e6bc80c -- Sun May  3 22:41:24 2015 crtime: 0x5546dc54:6e6bc80c -- Sun May  3 22:41:24 2015 Size of extra inode fields: 28 EXTENTS: (0):46712815  

    Extents: 在最开始的ext2文件系统中,数据块都是一个一个单独管理的,inode中存有指向数据块的指针,文件占用了多少个数据块,inode里面就有多少个指针(多级),想象一下一个1G的文件,4K的块大小,那么需要(1024 * 1024)/4=262144个数据块,即需要262144个指针,创建文件的时候需要初始化这些指针,删除文件的时候需要回收这些指针,影响性能。现代的文件系统都支持Extents的功能,简单点说,Extent就是数据块的集合,以前一次分配一个数据块,现在可以一次分配一个Extent,里面包含很多数据块,同时inode里面只需要分配指向Extent的指针就可以了,从而大大减少了指针的数量和层级,提高了大文件操作的性能。

    inode数量固定: 在ext2/3/4系列的文件系统中,inode的数量都是固定的,坏处是如果存很多小文件的话,有可能造成inode被用光,但磁盘还有很多剩余空间无法被使用的情况,不过它也有一个好处,就是一旦磁盘损坏,恢复起来要相对简单些,因为数据在磁盘上布局相对要固定简单。

    xfs

    和ext4相比,xfs不支持下面这些功能

    • 不支持日志(Journal)校验码

    • 不支持无日志(No Journaling)模式

    • 不支持文件创建时间

    • 不支持数据日志(data journal),只有元数据日志(metadata journal)

    但xfs有下面这些特性

    • 支持的最大文件和分区都达到了8EB

    • inode动态分配,从而不受inode数量的限制,再也不用担心存储大量小文件导致inode不够用的问题了。

    • 更大的xattr(extended attributes)空间,ext2/3/4及btrfs都限制xattr的长度不能超过一个块(一般是4K),而xfs可以达到64K

    • 内部采用Allocation groups机制,各个group之间没有依赖,支持并发操作,在多核环境的某些场景下性能表现不错

    • 提供了原生的dump和restore工具,并且支持在线dump

    btrfs

    btrfs是一个和ZFS类似的文件系统,支持的功能非常多,据说将来会替换ext4成为Linux下的默认文件系统。这里列举一些重要的功能

    • 支持的最大文件和分区达到了16EB

    • 支持COW(copy on write)

    • 针对小文件和SSD做了优化

    • inode动态分配

    • 支持子分区(Subvolumes),子分区可以单独挂载

    • 支持元数据和数据的校验(crc32)

    • 支持压缩,去重

    • 支持多个磁盘和分区,可动态扩展

    • 支持LVM,RAID的功能(有了btrfs,就不再需要lvm和软raid了)

    • 增量备份和恢复

    • 支持快照

    • 将ext2/3/4转换成btrfs(反过来不行)

    btrfs最大的缺点就是由于其COW的实现方式,导致碎片化问题比较严重,不太适合频繁写的场景,比如数据库、虚拟机的磁盘文件等。不过大部分场合不需要担心,btrfs有在线的碎片整理工具。

    如何选择

    下表仅供参考

    文件系统适用场景原因
    ext2U盘U盘一般不

    .........................................................
    请您注册登录超级码客,加载全部码客文章内容...
  • IT 码客文摘
  • 查看所有
    • ▪ Linux配置NFS步骤及心得
    • ▪ Glusterfs全局统一命名空间
    • ▪ 分布式文件系统MFS(moosefs)实现存储共享
    • ▪ 基于CentOS7部署Ceph集群(版本10.2.2)(转载)
    • ▪ linux下MFS(moosefs)安装使用
    • ▪ NFS是什么?详细介绍
    • ▪ 在 CentOS 7.1 上安装分布式存储系统 Ceph
    • ▪ Linux NFS服务器的安装与配置
    热门相关面试题
    • 1. 编写Java代码实现堆排序 ?
      推荐等级: ★★★  难度: 高难
    • 2. 列举Django的内置组件?
      推荐等级: ★★★★  难度: 初级
    • 3. 简述描述RIP和OSPF,它们的区别、特点 ?
      推荐等级: ★★★★  难度: 高难
    • 4. 简述一个1:n联系可以转换为一个独立的关系模式,关系
      推荐等级: ★★★  难度: 初级
    • 5. 使用C/C++代码实现在字符串中删除特定的字符 ?
      推荐等级: ★★★★  难度: 中级
    • 6. 如何把2023-9-2 10:30:25变成unix
      推荐等级: ★★★  难度: 初级
    • 7. 请你简述对Hibernate OR映射的理解?
      推荐等级: ★★★★  难度: 中级
    • 8. 简述关于下面这段Java程序,哪些描述是正确的:(
      推荐等级: ★★★★★  难度: 中级
    • 9. 在使用super和this关键字时,以下描述正确的是
      推荐等级: ★★★  难度: 中级
    • 10. 在Asp.net中所有的自定义用户控件都必须继承自
      推荐等级: ★★★★★  难度: 初级
    IT 软件大厂热门真题( 现场卷 )
  • 查看更多
    •    华为智能校园招聘电子科大上机题目
          企业名称:华为集团   [ 图文版 ]
         360公司大概率的网络安全面试题(含答案)
          企业名称:奇虎360   [ PDF 资源 ]
         地平线Java开发面试题及参考答案
          企业名称:地平线   [ 图文版 ]
         阿里巴巴的Oracle DBA笔试题及参考答
          企业名称:阿里巴巴   [ 图文版 ]
         度小满前端面试题及参考答案 2024
          企业名称:百度在线   [ 图文版 ]
         科大讯飞前端面试题及参考答案( 上)
          企业名称:科大讯飞   [ PDF 资源 ]
    
    ICP备案号:沪ICP备17025979号-8 上海勤革软件版权所有 @2021-2025

    关于我们   商务合作   用户协议   隐私协议   微信小程序   APP 下载   职业咨询

    超级码客(含 APP)成立于2021年是一款针对IT程序员,软件工程师,运维,数据库,测试,软件PM等IT技术工作者打造的面试题库平台,IT岗位技术线覆盖Java,PHP,Python,Android,IOS,Linux,分布式,大数据,云计算等20大各主流技术栈,超级码客提供超过53898道优质的面试题库,技术学习文档等为用户提供全面的IT方面面试辅助以及技术指导
    APP 备案号: ICP备案号:沪ICP备17025979号-10A , 版本号:4.6 开发者:上海勤革信息技术有限公司
    超级码客