说实话,很多系统运维人员想到的最后一件事就是查看PC上面正在使用的文件系统。Windows用户和Mac OS X用户基本上是没有理由去查看的,因为他们的操作系统实际上只有NTFS和HFS+两种文件系统。
不过,Linux操作系统有很多不同的文件系统选项,当前默认被广泛使用Ext4。但是,还有另外一些文件系统格式,例如XFS、Btrfs等。那么,这些文件系统之前的性能区别都有哪些,选用哪个好?
在回答这问题问题之前,首先来大致了解一下文件系统以及它们的实际作用,然后再对这些常见的文件系统进行简单的比较。
文件系统是做什么的?
文件系统的真正作用总结起来其实很简单。文件系统主要用于控制在任何程序不再使用数据后如何存储数据、如何控制对数据的访问、数据本身附加了哪些其它信息(元数据)等。
虽然这听起来像是一件容易去做的事情,但并不是如此。文件系统仍在不断地进行修改,以包含更多功能,同时在它只需要做的事情上变得更加高效。因此,它是所有计算机的基本需求,它并不像听起来那样简单。
为什么要系统分区?
由于每个操作系统都有创建或删除分区的能力,因此许多人对分区是什么一无所知。Linux 操作系统在同一个磁盘上使用多个分区似乎很奇怪,即使在使用标准安装过程时也是如此,因此很少对它们进行解释。拥有不同分区的主要目标之一是在系统灾难情况下实现更高的数据安全性。
通过将硬盘划分为多个分区,可以对数据进行分组,也可以将其分开。当事故发生时,只有被击中的分区中存储的数据才会被损坏,而其他分区中的数据最有可能存活下来。这些原则可以追溯到Linux操作系统没有日志文件系统并且任何电源故障都可能导致灾难的出现。
出于安全性和稳健性的原因,将保留分区的使用,那么操作系统的某一部分的漏洞并不自动意味着整个计算机处于风险或危险之中。这是目前分区过程中最重要的因素。例如,用户创建开始填满磁盘的脚本、程序或Web应用程序。如果该磁盘仅包含1个大分区,如果该磁盘已满,整个系统可能会停止运行。如果用户将数据存储在单独的分区上,那么只有该数据分区会受到影响,而系统分区和可能的其他数据分区将继续运行。
需要注意的是,拥有日志文件系统只会在出现电源故障以及存储设备突然断开连接的情况下提供数据安全性。这样不会保护数据免受文件系统中的坏块和逻辑错误的影响。在这种情况下,用户应使用廉价磁盘冗余阵列 (RAID) 解决方案。
为什么要对文件系统择优选择?
Ext4文件系统是对Ext3文件系统的改进,也是对Ext2文件系统的改进。虽然Ext4是一个非常可靠的文件系统,在过去几年中几乎是所有Linux发行版的默认选择,但它是由陈旧的代码库构成的。
此外,Linux操作系统用户正在寻求Ext4无法自行处理的文件系统中的许多新功能。有软件可以满足一些此类需求,但在性能方面,能够在文件系统级别执行此类操作可能会更快。所以,很多用户正在着力选用适合自己的其它类型文件系统,以提升系统整理的运行能力。、
Ext4文件系统
Ext4是由Theodore Ts’o领导的团队开发的日志文件系统,它是Ext3文件系统的继承者。2008年,Ext4稳定版正式公布,成为Linux官方推荐的默认文件系统。
Ext4最大文件大小为16 TB(大约 17.6 TB),比普通消费者目前可以购买的任何硬盘大得多。同时,可以使用Ext4制作的最大卷/分区是 1exbibyte(大约为 1,152,921.5TB)。
众所周知,Ext4通过使用多种不同的技术来提高Ext3的速度。与最现代的文件系统一样,它是一个日志文件系统,这意味着它将记录文件主要位于磁盘上的位置以及磁盘上发生的任何其他更改。不管它的所有功能,它都不支持透明压缩、重复数据删除或透明加密。快照在技术上是受支持的,但这样的功能充其量只是实验性的。
XFS文件系统
XFS是一种高性能日志文件系统,最初由Silicon Graphics于1993 年为IRIX操作系统开发。它是IRIX5.3 版的默认文件系统,后来被移植到Linux内核。
XFS文件系统是扩展文件系统的扩展。XFS是一个高性能的64位日志文件系统。XFS的支持在2002年左右被合并到Linux内核中,并且在2009年Red Hat Enterprise Linux 5.4 版使用了XFS文件系统。
XFS支持64位文件系统的最大文件系统大小为8 exbibytes。比较不同的是,XFS文件系统不能被收缩,而且在删除大量文件方面性能表现较差。现在,RHEL 7.0使用XFS作为默认文件系统。
Btrfs文件系统
Btrfs(B-tree文件系统,通常读作Butter FS、BetterFS或B-tree FS),是一种支持写时复制(COW)的 Linux 文件系统。稳定版于2014年发布,其目标是替换Linux当前的Ext3文件系统。
Btrfs是一个完全从头开始制作的文件系统,它的存在是因为其开发人员首先想要扩展文件系统功能,以便包括快照、池以及校验和等。虽然Btrfs独立于EXT4,但它还希望构建EXT4中存在的对消费者和企业都非常有用的想法,并结合那些将使所有人受益的附加功能,尤其是企业。对于使用非常大的程序和非常大的数据库的企业来说,他们在多个硬盘驱动器上拥有一个看似连续的文件系统可能是非常有益的,因为这将使数据的整合更加容易。
很多用户当然仍然可以选择创建多个分区,这样就不需要镜像所有内容。考虑到Btrfs将能够跨越多个硬盘驱动器,它可以支持比EXT4多16倍的驱动器空间是一件非常好的事情。Btrfs文件系统的最大分区大小为16 exbibytes,最大文件大小也是16exbibytes。
XFS与Ext4性能比较
Ext4文件系统是Ext3的继承者,是Linux下的主流文件系统。经过多年的发展,它是目前最稳定的文件系统之一。但是,老实说,与其他Linux文件系统相比,它并不是最好的Linux文件系统。
在XFS vs Ext4方面,XFS在以下几个方面优于Ext4:
- 更大的分区大小和文件大小: Ext4支持高达1 EiB的分区大小和高达16 TiB的文件大小,而XFS支持高达8 EiB的分区大小和文件大小。请注意,XFS是一个 64位文件系统。当主机操作系统为32位时,XFS仅支持最大16 TiB的分区大小和文件大小。
- 动态分配的索引节点: XFS就使用了这种技术。索引节点保存数据的属性和位置,用于索引文件。但是,当索引节点用完时,即使硬盘未满,也无法创建新文件。不过,动态分配索引节点技术消除了对索引数量的限制,用户可以充分利用磁盘空间。
- 更多的Xattr(Extended Attributes)空间: Ext4限制xattr的长度不超过一个块(通常是4K),而XFS可以达到64K。扩展文件属性是文件系统功能,使用户能够将计算机文件与文件系统未解释的元数据相关联。
- 分配组: XFS文件系统在内部划分为分配组,分别管理索引和空闲空间,提供可扩展性和并行性,因此多个线程和进程可以同时在同一个文件系统上执行 I/O操作。这种架构有助于优化具有多个处理器和/或内核的系统上的并行I/O性能。
- 内置转储和恢复工具: XFS具有xfsdump和xfsrestore实用程序,可以备份和恢复内容。
当然,相比Ext4,XFS也有一些缺点,比如:
- XFS不支持用于检查数据正确性的日志校验和。
- XFS不能禁用日志,缺点是闪存盘的寿命会缩短。
- XFS中的元数据操作较慢。因此,删除大量文件会导致性能下降。
- XFS文件系统的卷不能直接收缩。它只能通过“备份>补充>恢复”间接缩小。
Btrfs与Ext4性能比较
Ext4文件系统是一个非常古老的文件系统,它在 Linux 操作系统上使用了很长时间。正因为如此,Ext4 文件系统非常稳定。
但是,也必须承认,Btrfs有很多Ext4所没有的优势,例如:
- 分区大小: Ext4支持高达1 EiB的分区大小,而Btrfs支持高达16EiB的分区大小。
- 文件大小: Ext4支持最大16 TiB的文件大小,而Btrfs支持最大16 EiB的文件大小。
- 校验和: Ext4不保留数据的校验和,而Btrfs保留数据的crc32c校验和。因此,如果发生任何数据损坏,Btrfs文件系统可以检测到它并恢复损坏的文件。
- 快照: Btrfs可以快照文件系统。如果你在尝试任何有风险的事情之前进行快照,当出现任何差错是,可以回到早期正常状态。
- 重复数据删除: Btrfs支持文件系统级别的重复数据删除。使用这项技术,可以通过从文件系统中消除/删除重复的数据副本并在文件系统上仅保留一份数据(唯一数据)来节省磁盘空间。
- 多设备支持: Btrfs支持多个设备,并具有内置的逻辑卷管理器 (LVM) 和RAID 支持。因此,单个Btrfs文件系统可以跨越多个磁盘和分区。
- 文件系统压缩: Btrfs具有内置的文件系统级压缩支持,它可以压缩单个目录或单个文件或整个文件系统以节省磁盘空间。
- 块子分配:当文件系统存储文件时,文件被分成块进行存储。但是,文件的最后一个块(称为尾块)并不占据整个块。为了节省空间,使用块子分配,使文件系统将另一个文件块的部分存储到尾块。Btrfs 支持这项技术。
总结
那么,哪个更好用?到目前为止,尽管这三者之前性能没有太大差异,但Ext4仍将是赢家。为什么?因为它非常便利和普遍。Ext4仍然是系统桌面、工作站、服务器使用的优秀文件系统。它是默认提供的,因此用户可以在其上安装操作系统。此外,Ext4支持高达1 Exabyte的卷和高达16 TB的文件大小,因此在空间方面仍有很大的提升空间。
Btrfs可能会提供高达16 Exabyte的更大容量并提高容错能力,但到目前为止,它更像是一种附加文件系统,而不是集成到Linux操作系统中的一种。例如,在使用Btrfs格式化驱动器之前,必须存在btrfs-tools,这意味着在Linux操作系统安装期间,Btrfs不是一个选项,尽管这可能因发行版而异。
尽管传输速率如此重要,但对于一个公正的文件系统来说,不仅仅是文件传输的速度。Btrfs具有许多有用的功能,例如Copy-on-Write (CoW)、广泛的校验和、快照、清理、自我修复数据、重复数据删除,以及许多确保数据完整性的良好改进。但Btrfs缺少ZFS的RAID-Z 功能,因此RAID与Btrfs一起仍处于实验状态。然而,对于纯数据存储,Btrfs可能要比EXT4好,但需要时间去证明。
到目前为止,EXT4似乎是桌面系统上更好的选择,因为它作为默认文件系统呈现,并且在传输文件时比Btrfs更快。Btrfs绝对值得研究,但要完全切换替换桌面 Linux桌面上的EXT4可能需要几年后。
对于XFS文件系统来说也是如此,虽然在某些方面要胜于EXT4,但就目前来说,要想整体性能赢得EXT4,估计很难实现。至于以后能否超越EXT4,那就让时间去证明吧!
(Linux社区用户投票结果,仅供参考)
总之,以上就是关于Ext4、XFS、Btrfs系统文件性能区别的简单分析。其实,它们都有各自的优缺点。小编倒是觉得,最好是根据自己的需要选择。另外,如果某一个程序设置了它的默认文件系统,推荐使用默认文件系统。