最近在整存储,发现好几家厂商的存储,包括分布式存储系统使用的都是btrfs文件系统,找了2篇介绍btrfs做了解。

其中有一台是存储照片的,搞了个脚本据说无损压缩,压缩后存储占用是原先的20%多左右,属实有点大。

#当前目录机台CCD产生的bmp位图批量转换为jpg

for i in *.bmp

do  

convert $i `basename $i .bmp`.jpg

done

#所有目录下的jpg 压缩一下

find ./ -name "*.jpg" | ./jpegoptim *.jpg  --strip-all --all-progressive -o -f --max=50%

应该是这样一个布局,EDS(高性能文件存储、数据库、HCI之类的200TB)+NAS(一般性文件存储、非结构化数据100TB/台)+硬盘柜(超过1年的统统备份进来,96TB/台,每半年统一离线备份一次),乞丐版存储架构。

Btrfs(B-tree 文件系统)是Linux系统中较为新型和现代化的文件系统之一。它最初由Oracle开发,旨在替代EXT4和XFS等传统文件系统,成为下一代文件存储的首选。Btrfs以其强大的数据管理、灵活的卷管理、以及先进的数据保护机制而广受关注,尤其是在企业和高端存储系统中。本文将详细讲解Btrfs的主要特性、优势以及其应用场景。

1. Btrfs的设计目标

Btrfs 的核心设计目标包括以下几点:

- 增强数据完整性:提供自动校验和机制来防止数据损坏。

- 高效的存储管理:通过写时复制(CoW)机制、子卷管理、快照等功能来优化存储空间利用率。

- 易扩展性:支持动态扩展存储空间,允许文件系统在线扩展或缩减,而无需中断服务。

- 简化系统管理:提供内置的卷管理功能,取代传统的逻辑卷管理器(LVM)。

2. 主要特性

a. 写时复制(Copy-on-Write, CoW

Btrfs 是典型的写时复制文件系统,这意味着当修改文件时,不会立即覆盖原始数据,而是将修改的数据写入新位置,并在操作完成后更新指针指向新的数据块。这样可以在系统崩溃或断电时防止数据损坏。CoW 还允许Btrfs轻松实现快照和备份功能。

b. 快照与子卷管理

Btrfs 原生支持快照和子卷管理,极大简化了备份和恢复操作。快照可以瞬时创建,且不会对系统性能产生明显影响。用户可以通过快照快速恢复系统到之前的状态。子卷则允许用户将存储空间划分为独立的逻辑卷,每个子卷都有独立的文件系统属性。

- 快照: 快照是Btrfs的亮点功能之一,它通过创建文件系统的只读或可写副本,允许用户回滚到以前的状态。它在备份、恢复和系统升级前的防护措施中非常有用。

- 子卷: 子卷类似于逻辑分区,可以被独立挂载和管理,方便在同一个文件系统中进行灵活的存储划分和管理。

c. 内置卷管理

传统文件系统通常需要通过LVM来管理多个磁盘和分区,但Btrfs内置了卷管理功能。它支持将多个物理设备合并为一个逻辑存储池,并提供自动均衡和动态分配的能力。这种卷管理方式使Btrfs在扩展存储容量时更加简便。

d. 数据校验和修复

Btrfs 提供强大的数据完整性保障功能,它对每个数据块和元数据块计算校验和,并定期检查这些数据。通过校验和,Btrfs可以检测并修复磁盘上的数据损坏问题,尤其是在磁盘老化或存储硬件故障时。

e. 数据压缩与去重

Btrfs 支持透明的文件压缩功能,用户可以选择使用 `zlib`、`LZO` 或 `ZSTD` 等压缩算法来减少磁盘空间使用。此外,Btrfs 支持数据去重功能,可以在数据冗余时有效节省存储空间。

f. 精简配置与动态扩展

Btrfs 支持精简配置(thin provisioning),可以动态调整存储空间,而不需要提前分配所有的物理存储资源。这对于虚拟化和云环境下的动态存储需求非常有帮助。

3. Btrfs的优势

相比传统文件系统如EXT4、XFS,Btrfs在以下方面展现出显著优势:

- 高效的备份与恢复:得益于CoW机制,Btrfs可以快速创建和恢复快照,且不占用额外的存储空间。这对于需要频繁备份和恢复的系统(如数据库、虚拟机)非常有用。

- 存储空间的优化利用:Btrfs 的压缩和去重功能有效减少了存储占用,在大规模存储和云环境中尤其有用。

- 高级卷管理功能:无需使用外部逻辑卷管理工具,Btrfs 自带的卷管理器简化了存储管理,并允许轻松扩展或缩减存储空间。

- 增强的数据安全性:自动校验和修复功能提高了系统数据的可靠性,防止硬件故障导致的数据损坏。

4. 使用场景与限制

a. 适用场景

- 服务器和数据库:Btrfs的快照和子卷功能使其成为备份和数据库恢复的理想选择。

- 虚拟化和容器化环境:Btrfs的动态分配和精简配置能够有效管理虚拟机和容器的存储资源。

- 大规模存储系统:数据去重和压缩可以大大减少存储需求,适合用于云存储、大数据分析等领域。

b. 限制与挑战

尽管Btrfs功能强大,但它并不是没有挑战:

- 性能开销:在某些高负载写入场景下,Btrfs的写时复制可能导致较高的性能开销,尤其是随机写入操作。

- 稳定性问题:虽然Btrfs的功能已经非常丰富,但在某些极端情况下仍可能存在稳定性问题,特别是在复杂的多磁盘环境中。

- 企业应用的慎重性:虽然Btrfs逐渐成熟,但某些企业环境可能仍然偏好使用更稳定的EXT4或XFS等文件系统,特别是在对文件系统稳定性有极高要求的生产环境中。

5. 未来发展

随着社区和企业的不断支持,Btrfs 的功能和稳定性正在不断提高。其强大的数据管理功能使得它在未来存储需求日益复杂的环境中具有广阔的发展前景。尤其在数据完整性、动态扩展和存储优化等方面,Btrfs展示了下一代文件系统应具备的核心特性。

Btrfs 是一个功能强大的现代化文件系统,尤其在数据完整性、快照和子卷管理方面有显著优势。它为企业提供了高效的存储管理方式,并在虚拟化和大数据存储领域表现出色。尽管目前在某些高负载写入场景下可能存在性能问题,但随着技术的不断改进,Btrfs 有望成为未来主流的文件系统之一。

文件系统控制从存储设备存储和检索数据的位置、方式和时间。日常系统进程需要一个高效的文件系统。Linux 内核支持多种文件系统。最常用的是 Ext4、Btrfs、XFS 和 ZFS,这是 2018 年发布的最新文件系统。这些文件系统中的每一个都有自己的数据组织方式、优点和缺点。


在本教程中,我们将对照Ext4文件系统检查Btrfs,并试图了解它们的功能、优势和劣势。


Ext4 文件系统

Ext4是许多 Linux 发行版的默认文件系统。它于 2008 年 10 月发布,带有 Linux 内核 2.6.28。Ext4 是扩展文件系统的第四个版本,是 Ext3 的继承者。  


Ext4 是一个健壮的文件系统,已经使用了很长时间。它是一个日志文件系统,这意味着它会保留文件在磁盘上的位置的“日志”,并跟踪对磁盘的任何其他更改。


Btrfs 文件系统

Btrfs或B-Tree文件系统是一种更新的、现代的、开源的文件系统。它是为 Linux 系统量身定制的写时复制 (CoW) 文件系统,其名称来源于使用 B-trees 存储内部文件结构。在 CoW 文件系统设置中,当数据被修改时,文件系统会复制修改后的数据,并将数据写回文件系统上的可用位置。


由于数据被复制和修改到文件系统上的不同位置,这消除了断电时数据损坏的风险,仅举一个例子。需要指出的是,在修改过程中,原始数据被保留并保持不变。


Btrfs 文件系统的最大缺点是大文件容易碎片化,因此需要定期进行碎片整理。


Btrfs 的开发早在 2007 年就在甲骨文开始,但包括 SUSE、Facebook、Redhat 在内的其他主要公司也在为其开发做出贡献。Btrfs 的存在是因为开发人员希望扩展文件系统的功能以包含快照、校验和等功能。


BTRFS 功能


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 提供的另一个出色功能是对快照的支持。您可以轻松地创建文件系统的快照,并在数据意外删除或损坏时利用它来恢复其他地方的数据。

7) 支持校验和

另一个重要特性是对校验和的支持。校验和是小块数据,可以避免静默文件或数据损坏的可能性,这是其他文件系统不提供的。校验和存储在文件系统中,并持续关注文件系统错误和数据损坏的迹象。

8) 优化对 SSD 驱动器的支持

SSD(固态硬盘)驱动器确实在 PC 中提供了相当程度的速度、可靠性和稳定性。Btrfs 文件系统通过优化它们的读写性能进一步提高了它们的性能,从而提高了 SSD 的寿命。

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 不支持尾部打包。

结论

Ext4 文件系统是扩展文件系统的最新版本。Ext4 已经存在了很长时间,并且被证明是可靠和稳定的。建议日常使用。万一停电,ext4 很有可能会确保您保存的数据安全。

Ext4 专注于高性能和可扩展性。这是一个坚如磐石的选择,因为它已经存在很长时间了,它带来了多年来的系统测试和错误修复。不管其所有功能如何,它都不支持重复数据删除、压缩或加密。

另一方面,Btrfs 是一个现代文件系统,可以处理多达 16 倍于 Ext4 的数据。这种改进特别重要,因为 Linux 现在在企业实体中使用。Btrfs 有很多上面提到的很好的特性,例如 Copy-on-Write、快照、校验和和复制。Btrfs 正在快速增长,但仍被认为不稳定。

到目前为止,ext4 似乎是桌面系统上更好的选择,因为它是默认文件系统,并且在传输文件时比 btrfs 更快。