💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
本人主要分享计算机核心技术:系统维护、数据库、网络安全、自动化运维、容器技术、云计算、人工智能、运维开发、算法结构、物联网、JAVA 、Python、PHP、C、C++等。
不同类型针对性训练,提升逻辑思维,剑指大厂,非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。
运维技术之文件系统
早期的Windows可能还需要在Fat32及NTFS之间选择,但现在Windows 和 Mac OS X 用户对于文件系统,只有一种选择,那就是 NTFS 和 APFS。相反,对于 Linux 系统而言,有很多种文件系统可以选择,现在默认的是广泛采用的 ext4。也有用户会尝试新的btrfs 文件系统。那btrfs有什么优点,它与其它文件系统又有什么相同点及区别呢?
首先让我们对文件系统有一个简单的认识,然后我们再对Linux下几个常用的文件系统做一个详细的比较。
一、什么是文件系统
文件系统是一种用于存储和组织计算机数据的系统,它使得数据的访问和查找变得容易。 文件系统使用文件和树形目录的抽象逻辑概念,代替了硬盘和光盘等物理设备使用数据块的概念。用户使用文件系统保存数据时,不需要关心数据实际保存在硬盘的哪个数据块上,只需要记住文件的所属目录和文件名。文件系统自动管理存储空间,包括分配和释放空间,用户只需要记住数据被写入到了哪个文件中。
我们使用硬盘,并不是直接读写物理硬盘设备,而是通过文件系统来管理和访问硬盘上的文件。
文件系统主要用于控制所有程序在不使用数据时如何存储数据、如何访问数据以及有什么其它信息(元数据)和数据本身相关,等等。听起来要编程实现并不是轻而易举的事情,实际上也确实如此。文件系统一直在改进,包括了更多的功能、更高效地完成它需要做的事情。总而言之,它是所有计算机的基本需求、但并不像听起来那么简单。
文件系统(File System或fs),定义并实现了数据在存储介质(如硬盘等)上的存储方式和结构,以及其是如何被访问的,如索引、读取等。操作系统里,硬盘中的数据被抽象为文件的形式,并对其进行管理,比如为一块或多块数据关联一个文件名等,这些用于管理文件的数据结构(以及其对应的规则)为文件系统,Unix中更是讲一切皆文件,可见文件系统的地位非常之高。随着技术的发展,现代的文件系统特性也越来越多,如Btrfs等文件系统,支持快照、子卷、校验和自检、软RAID甚至透明压缩等。
二、文件分区
由于每个操作系统都能创建或者删除分区,很多人对分区都有模糊的认识。Linux 操作系统即便使用标准安装过程,在同一块磁盘上仍使用多个分区,这看起来很奇怪,因此需要一些解释。拥有不同分区的一个主要目的就是为了在灾难发生时能获得更好的数据安全性。
通过将硬盘划分为分区,数据会被分隔以及重组。当事故发生的时候,只有存储在被损坏分区上的数据会被破坏,很大可能上其它分区的数据能得以保留。这个原因可以追溯到 Linux 操作系统还没有日志文件系统、任何电力故障都有可能导致灾难发生的时候。
使用分区也考虑到了安全和健壮性原因,因此操作系统部分损坏并不意味着整个计算机就有风险或者会受到破坏。这也是当前采用分区的一个最重要因素。举个例子,用户创建了一些会填满磁盘的脚本、程序或者 web 应用,如果该磁盘只有一个大的分区,如果磁盘满了那么整个系统就不能工作。如果用户把数据保存在不同的分区,那么就只有那个分区会受到影响,而系统分区或者其它数据分区仍能正常运行。
记住,拥有一个日志文件系统只能在掉电或者和存储设备意外断开连接时提供数据安全性,并不能在文件系统出现坏块或者发生逻辑错误时保护数据。对于这种情况,用户可以采用廉价磁盘冗余阵列RAID:Redundant Array of Inexpensive Disks的方案。
三、一些术语
这些术语可能适应ZFS 或Btrfs
写时拷贝
写时拷贝(Copy-on-write)是另一个有趣并且很酷的特性。在大多数文件系统上,当数据被重写时,它将永久丢失。而在 ZFS 中,新数据会写到不同的块。写完成之后,更新文件系统元数据信息,使之指向新的数据块(LCTT 译注:更新之后,原数据块成为磁盘上的垃圾,需要有对应的垃圾回收机制)。这确保了如果在写新数据的时候系统崩溃(或者发生其它事,比如突然断电),那么原数据将会保存下来。这也意味着,在系统发生崩溃之后,不需要运行 fsck 来检查和修复文件系统。
快照
写时拷贝使得 ZFS 有了另一个特性:快照(snapshots)。ZFS 使用快照来跟踪文件系统中的更改。快照包含文件系统的原始版本(文件系统的一个只读版本),实时文件系统则包含了自从快照创建之后的任何更改。没有使用额外的空间。因为新数据将会写到实时文件系统新分配的块上。如果一个文件被删除了,那么它在快照中的索引也会被删除。所以,快照主要是用来跟踪文件的更改,而不是文件的增加和创建。
快照可以挂载成只读的,以用来恢复一个文件的过去版本。实时文件系统也可以回滚到之前的快照。回滚之后,自从快照创建之后的所有更改将会丢失。
数据完整性验证和自动修复
当向 ZFS 写入新数据时,会创建该数据的校验和。在读取数据的时候,使用校验和进行验证。如果前后校验和不匹配,那么就说明检测到了错误,然后,ZFS 会尝试自动修正错误。
RAID-Z
ZFS 不需要任何额外软件或硬件就可以处理 RAID(磁盘阵列)。毫不奇怪,因为 ZFS 有自己的 RAID 实现:RAID-Z 。RAID-Z 是 RAID-5 的一个变种,不过它克服了 RAID-5 的写漏洞:意外重启之后,数据和校验信息会变得不同步(LCTT 译注:RAID-5 的条带在正写入数据时,如果这时候电源中断,那么奇偶校验数据将跟该部分数据不同步,因此前边的写无效;RAID-Z 用了 “可变宽的 RAID 条带” 技术,因此所有的写都是全条带写入)。为了使用基本级别的 RAID-Z(RAID-Z1),你需要至少三块磁盘,其中两块用来存储数据,另外一块用来存储奇偶校验信息。而 RAID-Z2 需要至少两块磁盘存储数据以及两块磁盘存储校验信息。RAID-Z3 需要至少两块磁盘存储数据以及三块磁盘存储校验信息。另外,只能向 RAID-Z 池中加入偶数倍的磁盘,而不能是奇数倍的。
四、为什么要选择文件系统
文件系统的选择,其重要性不言而喻,可能仅次于Linux发行版的选择。其实,各个文件系统在功能及性能方面是有不小的差异的。我们主要讨论Linux中主流的三个文件系统:Ext4、XFS以及Btrfs的功能特点
ext4 文件系统由 ext3 文件系统改进而来,而后者又是从 ext2 文件系统改进而来。虽然 ext4 文件系统已经非常稳定,是过去几年中绝大部分发行版的默认选择,但它是基于陈旧的代码开发而来。另外, Linux 操作系统用户也需要很多 ext4 文件系统本身不提供的新功能。虽然通过某些软件能满足这种需求,但性能会受到影响,在文件系统层次做到这些能获得更好的性能。
而Btrfs提供了更多新的功能,也扩大了容量,也可作为新的选择。但因为它是一种新的文件系统,有可能会有些Bug或稳定性的问题。所以选择文件系统需要考虑多方面的因素,综合考虑。
五、Linux下几种常用的文件系统
Ext4、XFS、Btrfs都是实现在Kernel代码中的fs目录下。文件系统需要实现操作系统所定义的对象和接口,如inode、dentry等。
Linux下常用的文件系统有:Ext4、XFS、ZFS、Btrfs
1、Ext4 文件系统
Ext4(ext4日志文件系统、第四代扩展文件系统)文件系统是Linux用途最广泛的日志文件系统。Ext4稳定版本发布于2008年,即Linux 2.6.28版本。但它的历史最早可以追溯到1992年的Ext2文件系统,那是Linux最早使用的文件系统,而后2001年出现的Ext3在Ext2基础上增加了日志功能,并最终由Ext4替代,而且Ext4可向前兼容Ext2/Ext3。Ext4是很多发行版如Debian、Ubuntu等的默认文件系统。什么是日志(Journaling)文件系统?就是在数据更改正式提交至硬盘之前,先在日志区域(也是存在文件系统上的)记录变更日志,这样可以在系统崩溃或掉电后能快速恢复。
Ext4在Ext3的基础上,增加了新特性。
1)大文件支持
最大卷 1EiB ,最大文件 16TiB (对于4KiB块)。Ext4中实现了基于extent的数据管理。extents可以简单理解为连续的块,有了它管理大文件就更方便,大大降低了用于索引大文件的元数据量——原来用间接块索引(Indirect Block)的方法是非常浪费的——自然访问也性能也提升。而且,Ext4的inode比Ext3大一倍,达到256字节。
2)增加并优化了日志校验和(journal check summing)功能,fsck过程更快
这两个特性XFS和Btrfs也都支持。
3)无日志模式
4)多块分配、延迟分配
5)在线去除碎片(defragmentation)
ext4的限制:最大文件大小是 16 tebibytes(大概是 17.6 terabytes),但这比我们当前能买到的硬盘都要大,所以这个限制暂时并不是太大的问题。使用 ext4 能创建的最大卷/分区是 1 exbibyte(大概是 1,152,921.5 terabytes)
ext4 比 ext3 有很大的速度提升。另它是一个日志文件系统,意味着它会对文件在磁盘中的位置以及任何其它对磁盘的更改都会做记录。不过它还不支持透明压缩、重复数据删除或者透明加密。技术上支持了快照,但该功能还处于实验性阶段。
2、XFS 文件系统
XFS 文件系统是扩展文件系统extent file system的一个扩展。XFS 是 64 位高性能日志文件系统。对 XFS 的支持大概在 2002 年合并到了 Linux 内核,到了 2009 年,红帽企业版 Linux 5.4 也支持了 XFS 文件系统。对于 64 位文件系统,XFS 支持最大文件系统大小为 8 exbibytes。
目前RHEL 7.0 文件系统默认使用 XFS。XFS是1993年由SiliconGraphic Inc(SGI) 公司创建的高性能的64位文件系统。2001年进入Linux内核,如今已被大多数Linux发行版支持。最支持的要数红帽公司,其下主打的操作系统RHEL(Red Hat Enterprise Linux)7和8——即最近两个稳定版——都选XFS为默认的文件系统,红帽的很多工程师也深度参与了XFS的开发和维护。
XFS的文件系统结构如上,不同于Ext4,它通过B+树来索引inode和数据块。用树结构的文件系统通常相比Ext4用表结构,如链表、直接/间接Block以及extent,能更好地支持大文件,如视频/数据库文件等。另外其元数据规模少,使得硬盘可用空间更多,实测XFS、Btrfs多平均至少1.5%以上的可用空间。
XFS能支持单卷可达 8EiB ,最大文件也到 8EiB ,相比Ext4的16TiB可高了几个数量级。而且是其实动态分配inode的实现机制,只要有空间,就不会耗尽inode。通过df命令看出,其inode初始值就是ext4的10倍左右。
另外,XFS可以更高效支持并行IO操作,RAID上的扩展性更好,多线程并行读写时相比Ext4有优势。
XFS 文件系统有一些缺陷,例如它不能压缩,删除大量文件时性能低下。
3、ZFS
ZFS 在创建之初,就被设计为最后一代文件系统。在大多数文件系统都是 64 位的时候,ZFS 创建者决定直接跳到 128 位。这意味着 ZFS “提供了 32 位或 64 位系统容量的 160 亿倍”。
当谈到 ZFS 功能和安装时,其实说的是 OpenZFS。自从 Oracle 停止对 OpenSolaris 更新代码之后[1],ZFS(由 Oracle 开发)和 OpenZFS 遵循了不同的路径
ZFS 是一个先进的文件系统。因此,它有一些有趣的特性。比如:
-
存储池
-
写时拷贝
-
快照
-
数据完整性验证和自动修复
-
RAID-Z
-
最大单个文件大小为 16 EB(1 EB = 1024 PB)
-
最大 256 千万亿(256*1015 )的 ZB(1 ZB = 1024 EB)的存储
如果想开箱即用地使用 ZFS,则需要安装 FreeBSD或使用 illumos 内核的操作系统。illumos是 OpenSolaris 内核的一个分支。事实上,对 ZFS 的支持是一些有经验的 Linux 用户选择 BSD的主要原因之一。
如果想在 Linux 上试用 ZFS,可以将其用作存储文件系统。最近,Ubuntu 19.10 引入了在根目录上开箱即用安装 ZFS 的功能
以下是ZFS支持者认为ZFS具备的十大最佳功能特性:
1、元数据校验和确保数据完整性
数据完整性在ZFS中具有非常高的重要性,也是很多ZFS功能的前决条件。
ZFS文件系统采用了256位校验和,当向磁盘写入数据的时候,校验和就会被作为元数据与它相关的数据分开保存。与普通的磁盘块校验和不同的是,这种校验和可以检测出错位写、误读取和误写入、DMA奇偶错误、驱动器bug、意外过量写入以及常见的物理存储的衰减(bit rot)。
2、写时才拷贝
ZFS文件系统是使用多项技术来确保数据在磁盘上的连续性,其中就包括写时才拷贝(Copy on Write),也就是当数据发生变更的时候它并不会过量写入----它总是在指针指向变更数据之前被写入到一个新块和校验和中。旧的数据可能被保存下来,在发生变更的过程中创建文件系统的快照。利用ZFS的文件写入是交易型的操作----要么将所有数据写入到磁盘,要么什么都不写入。
3、利用Time Slider的数据快照
OpenSolaris的最新版本展示了ZFS利用TimeSlider小型图形应用所实现的强大快照功能。可以通过配置设定对ZFS文件系统进行常规的快照操作----每15分钟,或者每小时等等。这种快照占用容量很小,而且很高效,因为它只保存与之前快照的变量。
TimeSlider提供了对文件系统(或者一个家庭文件夹)的查看功能,而且有一个可以沿着时间线返回到更早快照时间的滑块。当这些完成之后就会呈现特定快照时间的文件系统或者文件夹内容。如果想要恢复一份被错误过量写入的文件,或者在升级失败之后还原系统的话,你只需要将滑块滚回合适的快照时间就可以了。
4、数据存储池
ZFS利用可用的存储驱动器将他们聚合成为一个被称为zpool的资源池。这个资源池可以使用脚本、镜像或者某种RAID针对容量、I/O性能或者冗余性进行优化。如果需要更多存储的话,只需要向zpool中添加更多存储就行了----ZFS检测到新添加的容量并开始自动使用、均衡I/O和最大限度提高吞吐量。
5、RAIDZ和RAIDZ2
众所周知,RAID 5有一个重大缺陷----RAID5 Write Hole。RAID 5在写数据的时候,是分为两步的,首先将数据写到磁盘阵列上,然后将该stripe上数据的校验码记录到阵列上,如果在刚写完数据的时候,系统断电,那么该数据对应的校验码就没有机会再恢复了。如果接下来磁盘发生故障,RAID重建流程就会出现错误数据。唯一的解决方案就是,如果整个stripe发生过量写入,那么就会生成一个正确的奇偶块。
RAIDZ通过使用一个不同宽度的条带来解决这个问题,这样每次写入实际上是一个完全的条带写入。再加上ZFS的写入时才拷贝特性,这些就完全消除了RAID 5的Write Hole缺陷。RAIDZ2也是同理,但是可以使用双奇偶允许阵列中丢失两个磁盘。
安装一个RAIDZ(或者RAIDZ2)阵列非常简单,只需要发布一条命令。
6、固态盘混合存储池
存储池中可以通过添加高性能固态盘变成一个混合存储池。当这些固态盘被作为高性能缓存磁盘的时候,ZFS就会用其保留频繁访问数据以提高性能。另外ZFS还采用了L2 ARC技术来写入那些不需要立即保存的数据,在时间和资源允许的情况下,这些数据会被慢慢迁移到传统的更永久性的硬盘驱动器中。
7、容量
ZFS是128位的文件系统,也就是说理论上它可以保存256千万亿ZB(1ZB=10亿TB)。实际中,它的容量远远超过所需范围,至少就可预见的未来来说。
8、数据清理
ZFS可以清理一个存储池中的所有数据,根据相应的校验和检查每个数据来验证其完整性,检测任何潜在的数据损毁,修复可能存在的任何错误。
当数据被冗余保存起来的时候----保存在镜像或者RAID型阵列中----它可以修复检测出任何潜在的损坏数据,而且无需管理员的干预。因为数据损坏是被记录下来的,所以ZFS可以通过导致数据不恰当保存在硬盘中的内存模块(或者其他硬件)检测出来。
数据清理的I/O优先级是很低的,因为这个流程对系统性能的影响非常小。
9、简单且有效的管理
使用ZFS命令,就相当于你使用了一种简短而有效的命令来管理系统。例如,一个5磁盘RAIDZ阵列可以设置采用单命令:
zpool create poolname raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 c5t0d0
ZFS更侧重于存储池的管理,在ZFS里面叫做zpool。ZFS会将若干存储设备的存储空间集中在一个池内,然后再分出相应的虚拟设备对上层的操作系统显示为磁盘或者卷。
其它优点可在考威联通的这篇回答:什么是ZFS文件系统?
国内用Zfs比较知名的是:有开发能力的是极道科技 规模比较大的是华大基因.......
4、Btrfs 文件系统
Btrfs,是B-Tree File System的缩写,可以读作“butter fs”或“b-tree fs”,是一个支持copy-on-write (COW)的文件系统,由Oracle公司于2007年设计并使用,2013年进入Linux内核稳定发布。目前除了Oracle外,SUSE Linux Enterprise Server将其用作默认文件系统,而在工作站领域中,Fedora 33也将其作为默认文件系统,Facebook公司也大量应用了Btrfs文件系统。
btrfs是一个几乎完全从头开发的文件系统。btrfs 出现的原因是它的开发者起初希望扩展文件系统的功能使得它包括快照、池化pooling、校验以及其它一些功能。虽然和 ext4 无关,它也希望能保留 ext4 中能使消费者和企业受益的功能(小辣椒高效Office),并整合额外的能使每个人,尤其是企业受益的功能。对于使用大型软件以及大规模数据库的企业,让多种不同的硬盘看起来一致的文件系统能使他们受益并且使数据整合变得更加简单。删除重复数据能降低数据实际使用的空间,当需要镜像一个单一而巨大的文件系统时使用 btrfs 也能使数据镜像变得简单。
用户当然可以继续选择创建多个分区从而无需镜像任何东西。考虑到这种情况,btrfs 能横跨多种硬盘,和 ext4 相比,它能支持 16 倍以上的磁盘空间。btrfs 文件系统一个分区最大是 16 exbibytes,最大的文件大小也是 16 exbibytes。
Btrfs的强大之处,在于实现了很多先进特性的同时,还保持了很高的容错能力、可扩展性以及可靠性。其最早的COW B-tree的数据结构也是2007年才提出的,Btrfs比Ext4、XFS小了近20年,是一个现代文件系统。
Btrfs支持大文件,16EiB最大卷和文件大小;集成了卷管理功能,可以以卷的方式动态地增减设备,实现硬盘资源池化;高效的数据完整性check,如基于cow的自恢复(self-healing)、基于checksum的数据清理(data scrubbing);高性能的读写/只读快照,得益于cow,增量快照和备份非常直接、灵活且低成本;软raid支持,数据和元数据的stripe和mirror生产环境级别支持;透明的压缩,支持lzo和zlib;在线去碎片(online defragmentation);数据去重(data deduplication)。
这方面,与其说是更好的文件系统,倒不如说它把传统的逻辑卷管理(如LVM)、软RAID(如mdadm)等工具做的工作集成在了文件系统层面上,方便了系统管理员,确实是一大进步。
BTRFS 相对其它文件系统提供以下更多的功能
1)支持大文件
Btrfs 文件系统最多可以支持 2个 64 字节,相当于16EiB或exbibytes!现在这是一个巨大的存储空间!
2)高效的文件存储
Btrfs 提供基于范围的文件存储。这被描述为为文件存储保留的连续区域。文件元数据的开销大大减少,小元数据直接有助于提高存储效率和性能。
Btrfs 仍然是高效的文件存储,它通过将较小的文件打包为元数据来为它们提供高效的存储。
3)内置 RAD 支持
Btrfs 文件系统包括对 RAID 0(数据剥离)、1(数据镜像)和 RAID 10(数据剥离和镜像)的支持
4)在线碎片整理和调整大小
使用 Btrfs,即使文件系统处于联机状态,也可以执行碎片整理和调整大小。
5)动态inode分配
Btrfs 提供 inode 的动态分配。它会在需要时将 inode 分配给文件,这有助于防止在文件系统上有很多小文件的情况下 inode 耗尽。
6)可写和只读快照
Btrfs 提供的另一个出色功能是对快照的支持。您可以轻松地创建文件系统的快照,并在数据意外删除或损坏时利用它来恢复其他地方的数据。
你会发现像群晖Nas也提供Btrfs文件系统并提供创建快照的功能,这个在防范病毒木马攻击及数据恢复非常有用。
7)支持校验和
另一个重要特性是对校验和的支持。校验和是小块数据,可以避免静默文件或数据损坏的可能性,这是其他文件系统不提供的。校验和存储在文件系统中,并持续关注文件系统错误和数据损坏的迹象。
8)优化对 SSD 驱动器的支持
SSD(固态硬盘)驱动器确实在 PC 中提供了相当程度的速度、可靠性和稳定性。Btrfs 文件系统通过优化它们的读写性能进一步提高了它们的性能,从而提高了 SSD 的寿命。
六、Ext4 和 Btrfs 文件系统的比较
在各种关键特性上对Ext4 和 Btrfs文件系统进行比较。
1.日志和写时复制支持
这是两个文件系统之间出现的第一个主要区别。Ext4 文件系统是一个日志文件系统,而 Btrfs 是一个 Copy-on-Write (CoW) 文件系统。
2.多设备支持
将单个文件系统分布在多个设备上提供了某些优势,例如容量增加和可靠性更高。Btrfs 具有内置的 RAID 支持,可以轻松地在文件系统级别管理多个设备。
Ext4 文件系统没有对多设备的内置支持。您将不得不使用LVM 2之类的第 3 方逻辑卷管理器将文件系统跨越多个设备和磁盘。
3.文件系统级重复数据删除:
重复数据删除是一种自动从文件系统中删除重复数据副本以节省磁盘空间的功能。Btrfs 文件系统通过将文件系统中的相同块替换为指向该块的单个副本的逻辑链接来支持重复数据删除。此功能可节省大量磁盘空间。
Ext4 文件系统不支持重复数据删除。
4.文件系统级压缩
Btrfs 使用压缩算法来支持文件系统级别的数据压缩。这意味着数据将在写入文件系统时自动压缩。
Ext4 文件系统没有内置的压缩支持。
5.最大分区和文件大小
使用 ext4 可以创建的最大分区是 1 exbibyte——相当于大约 1,152,921.5 TB。最大文件大小为 16 TiB,比普通消费者目前可以购买的任何硬盘都要大得多。
Btrfs 支持的最大分区和文件大小高达 16Eib。
Ext4 允许您创建最多 232 个(= 4,294,967,296 ~= 40 亿)文件。Btrfs 允许您创建最多 264 个(= 18,446,744,073,709,551,616 ~= 18 quintillion)文件。
6.校验和/ECC支持
Btrfs 文件系统使用 CRC32C 校验和来确保数据完整性并避免数据损坏。Ext4 文件系统不保证数据的完整性。
7.快照支持
Btrfs 文件系统支持文件的只读和可写快照。快照是一个子卷,它使用 COW 功能与另一个子卷共享其数据和元数据。
Ext4 文件系统不支持创建文件系统的快照。
8.块子分配和尾打包
块子分配是一种功能,将大文件存储在块中,同时有效利用最后一个块末尾的尾部空间。块子分配是一种将另一个文件块的一部分存储到尾块并节省磁盘空间的方法。
Btrfs 旨在利用此可用空间,并可以将多个块的尾部与其他文件打包在一起。这提高了文件系统性能并提高了存储效率。
Ext4 不支持尾部打包。
9.碎片整理
Btrfs 文件系统的最大缺点是大文件容易碎片化,因此需要定期进行碎片整理。
Ext4与Btrfs特性比较:
我们将根据给定的特性比较文件系统:
-
类型:可以是日记,也可以是写下来的。
-
重复数据删除:文件系统通过删除某些数据的重复副本来提高存储效率的一种方法。
-
文件系统压缩:数据写入文件系统时自动压缩的方法。
-
校验和:确保数据完整性,避免用户数据的损坏。
-
快照:它是一个子卷,与另一个子卷共享所有数据以及与特定数据(元数据)相关的信息。
-
存储效率:在块子分配和尾部打包方法的帮助下,一个大文件被存储在块中,在最后一个块的尾部空间中存储另一个文件块的一部分。它还有助于提高系统的性能。
-
最大文件数:我们可以存储在各自文件系统中的文件数。
-
最大文件大小和分区大小:我们可以在各自的文件系统中创建的最大文件和分区大小,
Ext4与Btrfs对比表
功能 | Ext4 | Btrfs |
---|---|---|
类型的文件系统 | 日志记录 | 写入时拷贝(COW) |
重复数据删除 | 不支持 | 支持 |
文件系统的压缩 | 不支持 | 支持 |
数据完整性 | 不保证 | 通过CRC32C校验和确保 |
快照 | 不支持 | 支持 |
存储效率 | 并不比Btrfs好 | 比Ext4更好 |
最大文件数 | ~ 40亿(2 ^ 32) | ~18万亿 (2^64) |
最大分区大小和文件大小 | 文件大小:16 tib ;分区大小:1 exbibyte | 文件大小:16 eib ;分区大小:16 eib |
Ext4与Btrfs相比的优点:
-
Ext4是一种可靠而稳定的文件系统,可以在大多数不希望发生的事件(如电源丢失)中保证数据的安全。
-
它已经使用了很长一段时间,因此测试和bug修复已经大大改进了它。
-
Ext4传输文件的速度比Btrfs快,因此它是用户的好选择。
Btrfs相对于Ext4的优点:
-
Btrfs使用校验和来确保数据不会被破坏,另一方面,Ext4不能确保数据的完整性。
-
Btrfs提供了文件系统中存在的压缩算法,允许在将数据写入系统时在文件系统级进行压缩. Ext4中没有这种内置的压缩支持。
-
Btrfs直接从磁盘删除重复数据,而Ext4不能这样做,
-
Btrfs支持CoW功能,用户可以创建文件的可写快照和只读快照。Ext4缺乏此特性。
-
Btrfs可以处理比Ext4更多的数据。
七、结论
Ext4在于它的易用性以及广泛性。对于桌面或者工作站, ext4 仍然是一个很好的文件系统。由于它是默认提供的文件系统,用户可以在上面安装操作系统。同时, ext4 支持最大 1 exabytes 的卷和 16 terabytes 的文件,在多数情况下也够用了 。
Ext4 文件系统是扩展文件系统的最新版本。Ext4 已经存在了很长时间,并且被证明是可靠和稳定的。建议日常使用。万一停电,ext4 很有可能会确保您保存的数据安全。
另一方面,Btrfs 是一个现代文件系统,可以处理多达 16 倍于 Ext4 的数据以及更好的容错。这种改进特别重要,因为 Linux 现在在企业实体中使用。Btrfs 有很多上面提到的很好的特性,例如 Copy-on-Write、快照、校验和和复制。Btrfs 正在快速增长,但仍被认为不稳定。它感觉更像是一个附加的文件系统。
有网友进行过一些测试(数据不一定准确,与不同的环境 不同的硬件均有关系)仅供参考:
格式化
Btrfs > XFS > Ext4
顺序读
读吞吐量:XFS、Btrfs差不多,相比Ext4稍有优势。
顺序写
写吞吐量:线程少的时候,总体差不多,Ext4略快一些。
4K随机读
4K随机读,XFS > Btrfs > Ext4。