您应该使用哪个 Linux 文件系统?
文件系统是操作系统中的一种实现,每个人都在使用,但大多数人并不知道它是如何工作的。
想想过去办公室将记录和文件保存在文件夹中,将它们捆成一堆,然后将它们放在各自的架子上的时代。您可以根据文件夹的注册日期对文件夹进行分组,也可以根据它们所指的区域对它们进行分组。保存文件的方法有很多,但每种方法都有一个目的,即通过以结构化的方式保存并易于找到来简化我们的工作。
文件系统是一种定义文件存储和检索方式的体系结构。它定义了一种格式和逻辑——如果新创建的文件将被保存,它将如何保存,它将与哪些额外数据一起保存,它将保存在哪里,以及如何从保存的位置访问它。
文件系统是根据它们的使用位置来定义的。有为操作系统、网络、数据库和其他专用文件系统定义的文件系统。当谈到操作系统时,文件系统可能被定义为硬盘、闪存、RAM 或光盘。
在本文中,我们将重点介绍Linux 操作系统上硬盘的文件系统,并讨论适合哪种类型的文件系统。在此之前,让我们先熟悉一下与文件系统相关的各种特性。
文件系统的架构:
一个文件系统主要由3层组成。从上到下:
- 逻辑文件系统: 在 API 的帮助下与用户应用程序交互以提供打开、读取、关闭等操作,并将请求传递给下面的层。
- 虚拟文件系统: 允许物理文件系统的多个实例同时运行。
- 物理文件系统: 处理磁盘的物理方面,同时管理和存储正在读取和写入的物理内存块。
文件系统的特征
- 空间管理:数据如何存储在存储设备上。与其中应用的内存块和碎片实践有关。
- 文件名:文件系统可能对文件名有一定的限制,例如名称长度、特殊字符的使用和区分大小写。
- 目录:目录/文件夹可以以线性或分层方式存储文件,同时维护包含在该目录或子目录中的所有文件的索引表。
- 元数据:对于存储的每个文件,文件系统存储有关该文件存在的各种信息,例如其数据长度、访问权限、设备类型、修改日期时间和其他属性。这称为元数据。
- 实用程序:文件系统提供初始化、删除、重命名、移动、复制、备份、恢复和控制文件和文件夹访问的功能。
- 设计:由于它们的实现,文件系统对它们可以存储的数据量有限制。
一些重要术语:
日记:
日志文件系统保存一个称为日志的日志,它跟踪对文件所做的更改但尚未永久提交到磁盘,以便在系统故障的情况下可以恢复丢失的更改。
版本控制:
版本控制文件系统存储文件的先前保存的版本,即文件的副本基于先前对磁盘的提交以每分钟或每小时的方式存储以创建备份。
节点:
索引节点是基于参数的任何文件或目录的表示——文件和目录的大小、权限、所有权和位置。
现在,我们将讨论 Linux 中用于磁盘存储设备的文件系统的各种实现。
Linux 文件系统:
注意:为简单起见,将不包括集群和分布式文件系统。
ext(扩展文件系统) :
它于 1992 年实施,是第一个专为 Linux 设计的文件系统。它是 ext 文件系统家族的第一个成员。
分机2 :
第二个 ext 是在 1993 年开发的。它是一种非日志文件系统,首选与闪存驱动器和 SSD 一起使用。解决了访问、inode修改和数据修改的时间戳分开的问题。由于没有被记录,所以在启动时加载很慢。
夏夫斯:
该文件系统也是 1993 年开发的,其功能和功能不如 ext2,并且不再在任何地方使用。
分机3 :
1999 年开发的第三个 ext 是日志文件系统。它是可靠的,并且与 ext2 不同,如果文件系统在不正常关机后处于不一致状态,它可以防止系统启动时出现长时间延迟。其他使它比 ext2 更好和不同的因素是在线文件系统增长和大目录的 HTree 索引。
JFS(日志文件系统) :
最初由 IBM 于 1990 年创建,最初的 JFS 于 1999 年被开源用于 Linux。JFS 在不同类型的负载下表现良好,但由于 2006 年发布的 ext4 提供了更好的性能,因此不再常用。
ReiserFS :
它是 2001 年开发的日志文件系统。尽管存在早期问题,但它采用尾部打包作为减少内部碎片的方案。它使用 B+ 树,在目录查找和更新中给出的时间少于线性。在 6.4 版本之前,它是 SUSE Linux 中的默认文件系统,直到 2006 年版本 10.2 切换到 ext3。
XFS :
XFS 是一个 64 位日志文件系统,并于 2001 年移植到 Linux。它现在作为许多 Linux 发行版的默认文件系统。它提供快照、在线碎片整理、稀疏文件、可变块大小和出色的容量等功能。它还擅长并行 I/O 操作。
壁球FS :
该文件系统于 2002 年开发,是只读的,仅用于需要低开销的嵌入式系统。
Reiser4 :
它是 ReiserFS 的增量模型。它是在 2004 年开发的。但是,它没有被许多 Linux 发行版广泛采用或支持。
分机4 :
2006 年开发的第四个 ext 是日志文件系统。它具有与 ext3 和 ext2 的向后兼容性,并提供了一些其他功能,其中一些是持久预分配、无限数量的子目录、元数据校验和和大文件大小。 ext4 是许多 Linux 发行版的默认文件系统,并且还与 Windows 和 Macintosh 兼容。
btrfs(更好/黄油/B-tree FS) :
它是在 2007 年开发的。它提供了许多功能,例如快照、驱动器池、数据清理、自我修复和在线碎片整理。它是 Fedora Workstation 的默认文件系统。
bcachefs:
这是一个写时复制文件系统,于 2015 年首次发布,其目标是性能优于 btrfs 和 ext4。它的功能包括完整的文件系统加密、本机压缩、快照和 64 位校验和。
其他:Linux 也支持 NTFS 和 exFAT 等操作系统的文件系统,但不支持标准的 Unix 权限设置。它们主要用于与其他操作系统的互操作性。
下表列出了可以比较文件系统的标准:
请注意,标准比表中列出的要多。这张表应该让您了解文件系统是如何发展的。 Max. filename length (bytes) 4032 255 characters Allowable characters in directory entries (Any byte) Any Unicode except NUL Metadata only journaling Yes (experimental)Parameters File Systems ext ext2 Xiafs ext3 JFS ReiserFS XFS Reiser4 ext4 btrfs 255 255 248 255 255 255 3976 255 255 except NUL except NUL, / except NUL except NUL or / except NUL or / except NUL except NUL, / except NUL, / except NUL, / Max. pathname length Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Max. file size 2 GB 16GB – 2TB 64MB 16GB – 2TB 4PB 8TB 8EB 8TB (on x86) 16GB – 16TB 16EB Max. volume size 2 GB 2TB – 32TB 2GB 2TB – 32TB 32PB 16TB 8EB – 1EB 16EB Max. no. of files – – – – – – – – 2^32 2^64 No No No Yes Yes Yes Yes No Yes No Compression No No No No No No No Yes No Yes Block sub-allocation No No No No Yes Yes No Yes No Yes Online grow No No – Yes No Yes Yes Yes Yes Yes Encryption No No No No No No No Yes No Checksum No No No No No No Partial No Partial Yes
观察
我们看到 XFS、ext4 和 btrfs 在所有其他文件系统中表现最好。事实上,btrfs 看起来几乎是最好的。尽管如此,ext 系列文件系统长期以来一直是大多数 Linux 发行版的默认设置。那么是什么让开发人员选择 ext4 作为默认设置而不是 btrfs 或 XFS?由于 ext4 对本次讨论非常重要,让我们对其进行更多描述。
分机4:
Ext4 旨在向后兼容 ext3 和 ext2,即其前几代。它在以下方面优于前几代:
- 它提供了一个如上表所述的大型文件系统。
- 利用可提高大文件的性能,并减少碎片程度。
- 提供持久的预分配,保证空间分配和连续内存。
- 延迟分配通过一次有效地分配大量数据来提高性能并减少碎片。
- 它使用 HTree 索引来允许无限数量的子目录。
- 执行日志校验和,允许文件系统在崩溃后意识到其某些条目无效或乱序。
- 支持创建时间时间戳和改进的时间戳以引入粒度。
- 透明加密。
- 允许在后台清理 inode 表,从而加速初始化。该过程称为延迟初始化。
- 默认情况下启用写屏障。这可确保文件系统元数据在磁盘上正确写入和排序,即使在写入缓存断电时也是如此。
在开发过程中仍有一些功能,如元数据校验和、一流的配额支持和大分配块。
但是,ext4 有一些限制。 Ext4 不保证您数据的完整性,如果数据在磁盘上已损坏,则它无法检测或修复此类损坏。 ext4 文件系统不能安全删除文件,应该是删除时文件被覆盖。它导致敏感数据最终出现在文件系统日志中。
XFS在大型文件系统和高并发度方面表现非常出色。所以 XFS 是稳定的,但没有一个明确的界限让您选择它而不是 ext4,因为两者的工作方式大致相同。除非,你想要一个直接解决 ext4 问题的文件系统,比如容量 > 50TiB。
另一方面, Btrfs尽管提供了多设备管理、每块校验和、异步复制和内联压缩等功能,但与 ext4 和 XFS 相比,它在许多常见用例中的表现并不是最好的。它的一些功能可能有问题,并导致性能下降和数据丢失。
结论
ext4 被用作许多 Linux 发行版的默认文件系统,除非您想练习其他类型的文件系统,否则 ext4 应该是您的首选。在性能更好的地方采用其他文件系统。例如,XFS 是 Red Hat Enterprise 7 的默认设置,仍然被 NASA 和美国能源部等机构使用,而 btrfs 在 Synology 的存储设备中用作单磁盘文件系统。