1. 前言
本文主要介绍Linux根分区文件系统可选的类型及应该如何选择合适的文件系统。
2. Linux根分区文件系统选择之Brtfs简介
Btrfs(B-tree文件系统,通常念成Butter FS,Better FS或B-tree FS),一种支持写入时复制(COW)的文件系统,运行在Linux操作系统,采用GPL授权。Oracle于2007年对外宣布这项计划,并发布源代码,在2014年8月发布稳定版。目标是取代Linux当前的ext3文件系统,改善ext3的限制,特别是单个文件的大小,总文件系统大小或文件检查和加入ext3未支持的功能,像是可写快照(writable snapshots)、快照的快照(snapshots of snapshots)、内建磁盘阵列(RAID),以及子卷(subvolumes)。Btrfs也宣称专注在“容错、修复及易于管理”。
Btrfs 提供容错、修复和易于管理的功能,比如:
Btrfs,2007年前,已实现
- 联机碎片整理
- 联机卷生长和收缩
- 联机块设备增加和删除
- 联机负载均衡(块设备间的对象移动以达到平衡)
- 文件系统级的镜像(类RAID-1)、条带(类RAID-0)
- 子卷(一个或多个单独可挂载基于每个物流分区)
- 透明压缩(当前支持zlib、LZO和ZSTD (从 4.14 开始支持))
- 快照(只读和可写,写复制,子卷复制)
- 文件克隆
- 数据和元数据的校验和(当前是CRC-32C)
- 就地转换(带回滚)ext3/4
- 文件系统种子
- 用户定义的事务
- 块丢弃支持
3. Linux根分区文件系统选择之XFS简介
XFS 是一个鲁棒、高度弹性单一主机 64 位日志文件系统。它完全基于扩展,因此可支持超大文件和文件系统。XFS 系统可拥有的文件数量只受该文件系统中可用空间的限制。
XFS 支持元数据日志,这样可从崩溃中迅速恢复。XFS 文件系统还可以最挂载和激活时去除并放大碎片。另外,红帽企业版 Linux 6 支持专门用于 XFS 到备份和恢复工具。
XFS 使用基于扩展到分配,并有大量分配方案可用,比如延迟分配和直接预分配。基于扩展到分配可提供更多简洁、有效到方法跟踪文件系统中使用到空间,并通过减少碎片化和元数据使用到空间提高大文件性能。延迟分配可提高将文件写入连续块组到机会,减少碎片化,提高性能。预分配可用于在程序事先知道它需要写入的数据量到情况下完全防止碎片化。
XFS 提供卓越的 I/O 灵活性,方法是使用 b-tree 检索所有用户数据和元数据。检索中所有操作的对象计数增长都继承基础 b-tree 的对数伸缩特性。有些 XFS 调节选项提供 mkfs 时的各种 b-tree 宽度,这样就可以改变不同子系统的伸缩特性。
XFS 到基本调节
通常默认的 XFS 格式和挂载选项对大多数负载都是最佳选择。红帽建议使用默认值除非具体配置更改可以对文件系统负载有帮助。如果使用软件 RAID,mkfs.xfs 命令可自动使用正确到条单位和宽度自行配置以便与硬件对应。如果使用硬件 RAID 就需要手动进行配置。
在大容量(多 TB)文件系统中建议使用 inode64 挂载选项,除非是使用 NFS 和传统 32 位 NFS 客户端导出到文件系统需要对该文件系统到访问。
建议在经常修改或者迅速增长的文件系统中使用 logbsize 选项。默认值为 MAX(32 KB,日志条单位),同时最大值为 256 KB。建议最有大量修改的文件系统中使用 256 KB。
3.1 通过使用分配组实现高伸缩性
在创建 XFS 文件系统时,文件系统底层的块设备被分成 8 个或 8 个以上相同大小的线性区域。这些线性区域被称为分配组。每个分配组管理自己的 inode 和可用空间。实际上,可以将分配组看作文件系统中的文件系统。因为分配组相互独立,所以内核可同时对多个分配组进行寻址。此功能是 XFS 优异的可伸缩性关键之所在。独立分配组的概念自然适合多处理器系统的需要。
3.2 通过有效管理磁盘空间获得高性能
可用空间和 inode 是由分配组内的 B+ 树处理的。使用 B+ 树将大大增强 XFS 的性能和可伸缩性。XFS 使用延迟分配,它可以通过将进程分为两部分而处理分配。将挂起事务储存在 RAM 中并保留适当数量的空间。XFS 仍不决定应储存数据的准确位置(即不指出文件系统块)。此决定将被延迟到最后的时刻。某些生存期很短的临时数据可能永远不会被储存到磁盘上,这是因为在 XFS 决定保存它们的实际位置时,这些数据可能已经过时了。以这种方式,XFS 增强了写性能并减少了文件系统分段。因为延迟分配引起写事件的频率比其他文件系统引起写事件的频率要低,所以如果写操作期间发生系统崩溃,则数据丢失可能会更加严重。
3.3 进行预分配以避免文件系统碎片
在将数据写入文件系统前,XFS 保留(预分配)文件所需的可用空间。这样会大大减少文件系统碎片的数目。因为文件的内容不会分散在整个文件系统中,所以性能得以提高。
4. Linux文件系统之Ext2简介
Ext2 的原身可以追溯到 Linux 历史的早期。其前身是“扩展文件系统”,于 1992 年 4 月实施,集成在 Linux 0.96c 中。扩展文件系统经历了多次修改,后来才称为 Ext2,曾经是多年来最受欢迎的 Linux 文件系统。但随着日记文件系统的创建以及其恢复时间的缩短,Ext2 的重要性逐渐降低。
简要总结 Ext2 的优点有助于您了解为什么它以前是(在某些领域现在仍是)许多 Linux 用户最喜欢使用的 Linux 文件系统。
4.1 可靠性和速度
Ext2 确实是一个老古董,它经历了许多改进和频繁的测试。这可能是人们经常将其称之为坚如磐石的文件系统的原因。在系统中断后,如果无法彻底卸装文件系统,则 e2fsck 将开始分析文件系统数据。系统使元数据恢复一致的状态,并将挂起的文件或数据块写入指定的目录(名为 lost+found)。与日记文件系统相比,e2fsck 会分析整个文件系统,而不仅仅是元数据中最近修改的位。这种操作所花的时间要远远超过检查日记文件系统的日志数据所花的时间。根据文件系统的大小,此过程可能需要半小时或更长时间。因此,对于任何要求高可用性的服务器,不要选择 Ext2。但是,因为 Ext2 不维护日记且使用的内存也少得多,所以其速度常常超过其他文件系统。
4.2 EXT2可方便地升级至EXT3
因为 Ext3 以 Ext2 代码为基础并且共享 Ext2 的磁盘上格式和元数据格式,所以从 Ext2 升级到 Ext3 非常简单。
5. Linux文件系统之Ext3简介
Ext3 由 Stephen Tweedie 设计。与所有其他下一代文件系统不同,Ext3 并没有采用全新的设计原则。它是在 Ext2 的基础上设计的。这两个文件系统密切关联。可以方便地在 Ext2 文件系统上建立 Ext3 文件系统。Ext2 和 Ext3 最重要的区别是 Ext3 支持日记。总之,Ext3 有三个主要优点:
5.1 方便并高度可靠地从 Ext2 升级
Ext2 的代码为 Ext3 奠定了坚实的基础,使后者成为受到高度评价的下一代文件系统。在 Ext3 中,它的可靠性和稳定性与日记文件系统的优点完美地结合在一起。不像转换至其他日记文件系统(例如 ReiserFS 或 XFS)那么冗长乏味(备份整个文件系统,然后从头开始重新创建),转换至 Ext3 只是数分钟的事。升级到 Ext3 还很安全,因为从头重新创建整个文件系统可能会出现问题。考虑到等待升级到日记文件系统的现有 Ext2 系统的数量,就很容易明白为什么 Ext3 对许多系统管理员来说如此重要。从 Ext3 降级到 Ext2 与升级一样简单。将 Ext3 文件系统完全卸载,然后重新装入成 Ext2 文件系统即可。
5.2 可靠性和性能
某些其他日记文件系统采用仅元数据的日记方法。这意味着元数据始终保持一致的状态,但无法自动保证文件系统数据本身一致。Ext3 的设计既可以照顾到元数据,又可以照顾到数据。照顾的程度可以自定义。在 data=journal 方式中启用 Ext3 可以提供最大的安全性(数据完整性),但因为要将元数据和数据都记入日记,所以可能会降低系统的速度。一个相对较新的方法是采用 data=ordered 方式,这种方式确保了数据和元数据的完整性,但只对元数据使用日记。文件系统驱动程序收集与一次元数据更新对应的所有数据块。这些数据块在更新元数据之前被写入磁盘中。这样,在不牺牲性能的情况下,元数据和数据的一致性得以实现。第三个要使用的选项是 data=writeback,允许数据在其元数据已经提交至日记后再写入主要文件系统。在性能方面,此选项常被认为是最佳选项。但它在维护内部文件系统完整性的同时,允许以前的数据在系统崩溃并恢复后再次出现在文件中。Ext3 使用 data=ordered 选项作为默认值。
6. Linux根分区文件系统选择之Ext4
2006 年,Ext4 做为 Ext3 的传承面市。它支持最大大小为 1 EiB 的卷、最大大小为 16 TiB 的文件和无限个子目录,消除了 Ext3 在储存上的一些局限。它还引入了许多性能增强功能,例如延迟块配置和速度大度加快的文件系统检查例程。Ext4 还支持日记校验和,并可提供以纳秒度量的时间戳,因而更加可靠。Ext4 完全反向兼容于 Ext2 和 Ext3,后两个文件系统都可以作为 Ext4 装入。
7. Linux文件系统选择之ReiserFS
reiserfs 是由 namesys 公司的 Hans Reiser 设计并开发的一种通用日志文件系统,它是第一个进入 Linux 标准内核日志文件系统。从诞生之日起,reiserfs 就由于其诸多非常有吸引力的特性而受到很多用户的青睐,迅速成为 Slackware 等发行版的默认文件系统。它也一度也是 SUSE Linux Enterprise 发行版上的默认文件系统,直到 2006 年 10 月 12 日 Novell 公司决定将默认文件系统转换到 ext3 为止。尽管其主要设计人员 Hans Reiser 由于涉嫌杀害妻子遭到指控而入狱,从而导致他不得不试图出售 namesys 公司来支付庞大的诉讼费用,但是 reiserfs 已经受到广大社区开发人员和用户的极大关注,有很多志愿者已经投入到新的 reiserfs 4 的开发工作中来。本文中的介绍都是基于最新的稳定版本 3.6 版本的,所引用的代码都基于 2.6.23 版本的内核。
reiserfs 最初的设计目标是为了改进 ext2 文件系统的性能,提高文件系统的利用率,并增强对包含大量文件的目录的处理能力(ext2/ext3 文件系统中一个目录下可以包含的子目录最多只能有 31998 个)。传统的 ext2 和 ufs 文件系统都采用了将文件数据和文件元数据分离开保存的形式,将元数据保存到索引节点中,将文件数据保存到单独的磁盘块中,并通过索引节点中的 i_block 数组利用直接索引和间接索引的形式在磁盘上定位文件数据。这种设计非常适合存储较大的文件(比如20KB以上),但是对于具有大量小文件的系统来说就存在一些问题。首先在于文件系统的利用率,由于 ext2 会将文件数据以数据块为单位(默认为 4KB)进行存储,因此对于存储只有几十个字节的文件来说,会造成空间的极大浪费。另外由于在读取文件时需要分别读取文件元数据和文件数据,加上多读取数据块的开销,ext2 文件系统在处理大量小文件时,性能会比较差。为了获取最好的性能和最大程度地利用磁盘空间,很多用户会在文件系统之上采用数据库之类的解决方案来存储这些小文件,因此会导致上层应用程序的接口极不统一。
为了解决上面提到的问题,reiserfs 为每个文件系统采用一棵经过专门优化的 B+ 树来组织所有的文件数据,并实现了很多新特性,例如元数据日志。为了提高文件系统的利用率,reiserfs 中采用了所谓的尾部封装(tail packing)设计,可以充分利用已分配磁盘块中的剩余空间来存储小文件。实际上,reiserfs 文件系统中存储的文件会比 ext2/ext3 大 5% – 6% 以上。下面让我们来探索一下 reiserfs 文件系统中数据在磁盘上究竟是如何存储的。
7.1 更高的磁盘空间利用率
在 ReiserFS 中,采用一种名为 B平衡树 (B-balanced tree) 的结构组织所有数据。树状结构可让您更好地利用磁盘空间,因为小文件可以直接储存在 B叶节点,而不是储存在别处,也无需维护实际磁盘位置的指针。此外,不按照 1 KB 或 4 KB 的大块来分配储存区,而是根据所需的准确大小进行。另一个优点是 inode 的动态分配。这使得此文件系统比传统的文件系统(例如 Ext2)更灵活,而传统文件系统中的 inode 密度必须在创建文件系统时指定。
7.2 更佳的磁盘访问性能
对于小文件,文件数据和 stat_data (inode) 信息经常被储存在相邻的位置。这样通过一个磁盘 I/O 操作就可以访问它们,这意味着只需访问磁盘一次就可以检索到所有需要的信息。
7.3 更快的崩溃恢复速度
使用日记来跟踪最近的元数据更改使对文件系统的检查可以很快完成,即使对大型文件系统也是如此。
7.4 通过数据日记确保可靠性
ReiserFS 还支持与Ext3中介绍过的概念类似的数据日记和有序数据模式。默认方式是 data=ordered,它确保了数据和元数据的完整性,但只对元数据使用日记。
评论前必须登录!
注册