42. 【Linux教程】写时复制文件系统

简介: 42. 【Linux教程】写时复制文件系统

前小节介绍了 Linux 日志文件系统,本小节介绍 Linux 写时复制文件系统。

1. ZFS 文件系统介绍

ZFS 文件系统的英文名称为 Zettabyte File System,也叫动态文件系统(Dynamic File System),是第一个 128 位文件系统。最初是由 Sun 公司为 Solaris 10 操作系统开发的文件系统。作为 OpenSolaris 开源计划的一部分,ZFS 于 2005 年 11 月发布,被 Sun 称为是终极文件系统,经历了 10 年的活跃开发。而最新的开发将全面开放,并重新命名为 OpenZFS。


ZFS 是一款 128bit 文件系统,总容量是现有 64bit 文件系统的 1.84x10^19 倍,其支持的单个存储卷容量达到 16EiB(2^64byte,即 16x1024x1024TB);一个 zpool 存储池可以拥有 2^64 个卷,总容量最大 256ZiB(2^78 byte);整个系统又可以拥有 2^64 个存储 池。可以说在相当长的未来时间内,ZFS 几乎不太可能出现存储空间不足的问题。另外,它还拥有自优化,自动校验数据完整性,存储池/卷系统易管理等诸多优点。较 ext3 系统有较大运行速率,提高大约 30%-40%。


ZFS 文件系统是一个革命性的全新的文件系统,它从根本上改变了文件系统的管理方式,这个文件系统的特色和其带来的好处至今没有其他文件系统可以与之媲美,ZFS 被设计成强大的、可升级并易于管理的。ZFS 用 “存储池” 的概念来管理物理存储空间。过去,文件系统都是构建在物理设备之上的。为了管理这些物理设备,并为数据提供冗余,“卷管理” 的概念提供了一个单设备的映像。但是这种设计增加了复杂性,同时根本没法使文件系统向更高层次发展,因为文件系统不能跨越数据的物理位置。


ZFS 完全抛弃了 “卷管理”,不再创建虚拟的卷,而是把所有设备集中到一个存储池中来进行管理,“存储池” 描述了存储的物理特征(设备的布局,数据的冗余等等),并扮演一个能够创建文件系统的专门存储空间。从此,文件系统不再局限于单独的物理设备,而且文件系统还允许物理设备把他们自带的那些文件系统共享到这个 “池” 中。你也不再需要预先规划好文件系统的大小,因为文件系统可以在 “池” 的空间内自动的增大。当增加新的存贮介质时,所有 “池” 中的所有文件系统能立即使用新增的空间,而不需要额外的操作。在很多情况下,存储池扮演了一个虚拟内存。


ZFS 使用一种写时拷贝事务模型技术。所有文件系统中的块指针都包括 256 位的能在读时被重新校验的关于目标块的校验和。含有活动数据的块从来不被覆盖;而是分配一个新块,并把修改过的数据写在新块上。所有与该块相关的元数据块都被重新读、分配和重写。为了减少该过程的开销,多次读写更新被归纳为一个事件组,并且在必要的时候使用日志来同步写操作。


利用写时拷贝使 ZFS 的快照和事物功能的实现变得更简单和自然,快照功能更灵活。缺点是,COW 使碎片化问题更加严重,对于顺序写生成的大文件,如果以后随机的对其中的一部分进行了更改,那么这个文件在硬盘上的物理地址就变得不再连续,未来的顺序读会变得性能比较差。

2. BTRFS 文件系统介绍

BTRFS(通常念成 Butter FS),由 Oracle 于 2007 年宣布并进行中的 COW(copy-on-write 式)文件系统。目标是取代 Linux ext3 文件系统,改善 ext3 的限制,特别是单一文件大小的限制,总文件系统大小限制以及加入文件校验和特性。加入 ext3/4 未支持的一些功能,例如可写的磁盘快照(snapshots),以及支持递归的快照(snapshots of snapshots),内建磁盘阵列(RAID)支持,支持子卷(Subvolumes)的概念,允许在线调整文件系统大小。


首先是扩展性 (scalability) 相关的特性,btrfs 最重要的设计目标是应对大型机器对文件系统的扩展性要求。 Extent、B-Tree 和动态 inode 创建等特性保证了 btrfs 在大型机器上仍有卓越的表现,其整体性能而不会随着系统容量的增加而降低。其次是数据一致性 (data integrity) 相关的特性。系统面临不可预料的硬件故障,Btrfs 采用 COW 事务技术来保证文件系统的一致性。 btrfs 还支持 checksum,避免了 silent corrupt 的出现。而传统文件系统则无法做到这一点。第三是和多设备管理相关的特性。 Btrfs 支持创建快照 (snapshot),和克隆 (clone) 。 btrfs 还能够方便的管理多个物理设备,使得传统的卷管理软件变得多余。最后是其他难以归类的特性。这些特性都是比较先进的技术,能够显著提高文件系统的时间/空间性能,包括延迟分配,小文件的存储优化,目录索引等。

3. BTRFS 文件系统特性

  • 可由底层多个物理卷进行支持。
  • 数据存储形式支持 RAID,同时在联机的情况下进行“添加硬盘”、“移除硬盘”、“修改文件系统的大小”。


  • 支持写时复制更新机制,即当我们修改文件时,btrfs先复制一份原文件,对新文件进行修改,结束时,原文件名指向新文件。


  • 支持卷的快照和快照的快照。


  • 透明压缩,即当文件系统存储文件时,文件系统会自动将文件进行压缩再存储,当提取时,文件系统自动进行解压缩,但是用户看不到此过程。


  • 扩展性 (scalability),btrfs 最重要的设计目标是应对大型机器对文件系统的扩展性要求。Extent、B-Tree、inode 创建等特性保证了 btrfs 在大型机器上仍有卓越的表现,其整体性能而不会随着系统容量的增加而降低。


  • 数据一致性 (data integrity)。系统面临不可预料的硬件故障,Btrfs 采用 COW 事务技术来保证文件系统的一致性。 btrfs 还支持 checksum,避免了 silent corrupt 的出现。而传统文件系统则无法做到这一点。


  • 多设备管理相关的特性。 Btrfs 支持创建快照 (snapshot)、克隆 (clone) 。 btrfs 还能够方便的管理多个物理设备,使得传统的卷管理软件变得多余。

4. 小结

本小节介绍了 ZFSBTRFS 两种写时复制文件系统,写时复制文件系统采用了日志式技术,你就必须在安全性和性能之间选择,尽管数据模式日志提供了最高的安全性,但是会对性能带来影响,因为索引节点和数据都需要被日志化,就文件系统而言,日志式的另一种选择是一种叫 写时复制 的技术。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2天前
|
关系型数据库 MySQL Linux
Linux系统中Mysql5.7建立远程连接
Linux系统中Mysql5.7建立远程连接
4 0
|
3天前
|
监控 Linux 数据处理
探索Linux中的`lsmem`命令:深入了解系统内存布局
`lsmem`是Linux命令,用于显示系统内存布局和大小,帮助管理员和开发者理解内存使用情况。它提供详细输出,包括内存块的大小、范围、类型和关联,支持多种格式展示,如树状图。命令参数如`-h`显示帮助,`-t`以树形展示,`--human-readable`使大小更易读。需root权限运行,常与`free`、`vmstat`等工具结合使用,用于监控和优化内存。注意不同发行版可能存在兼容性差异。
|
3天前
|
监控 Linux 数据处理
lslocks:Linux系统中的锁信息查看利器
`lslocks`是Linux工具,用于查看系统上的文件锁信息,帮助诊断进程同步问题。它显示持有锁的进程、锁类型(如POSIX、flock)和状态。通过简洁的输出,用户能识别死锁和资源争用,优化性能。结合其他命令如`grep`和`awk`可增强分析能力。需适当权限运行,定期监控以预防并发访问问题,处理死锁时要谨慎。
|
4天前
|
存储 JSON Linux
探索Linux文件系统的奥秘:`lsblk`命令详解
`lsblk`是Linux下用于列出块设备详情的命令,显示设备名、大小、类型、挂载点等信息,尤其适合查看磁盘分区和挂载状态。它以树形结构展示设备间的依赖,且支持多种输出格式。常用参数如`-a`显示所有设备,`-f`显示文件系统信息,`-o`定制输出列。结合其他命令使用能有效管理文件系统。注意权限和输出格式选择。
|
4天前
|
存储 安全 Linux
一行代码使Linux系统崩溃?
一行代码使Linux系统崩溃?
13 1
|
4天前
|
网络协议 Linux Shell
【权限提升】Linux系统&Docker挂载&Rsync未授权&Sudo-CVE&Polkit-CVE
【权限提升】Linux系统&Docker挂载&Rsync未授权&Sudo-CVE&Polkit-CVE
|
4天前
|
关系型数据库 MySQL Shell
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
|
5天前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第一篇(存储引擎与Linux系统上安装MySQL数据库)
MySQL数据库进阶第一篇(存储引擎与Linux系统上安装MySQL数据库)
|
6天前
|
存储 监控 安全
深入探索Linux的journalctl命令:系统日志的利器
**journalctl 深入解析:Linux 系统日志的强大工具** journalctl 是 Linux 中用于查询和管理 systemd 日志的命令行工具,与 systemd-journald 配合收集广泛的信息,包括内核消息和服务日志。它提供实时追踪、过滤、导出等功能,如 `-f` 实时监控,`-u` 过滤特定服务日志,`-k` 显示内核消息,`--since` 和 `--until` 选择时间范围。在实际应用中,结合权限管理、日志空间控制和有效过滤,journalctl 成为系统管理员诊断和优化系统的得力助手。
|
8天前
|
网络协议 Linux 网络安全
Linux命令hostnamectl:掌握系统主机信息的利器
`hostnamectl`是Linux系统管理的关键工具,用于查看和设置主机名、内核信息等。它集成在`systemd`中,通过修改配置文件交互。命令特点包括综合显示多种信息、简单语法和设置功能。例如,`hostnamectl status`显示系统详情,`sudo hostnamectl set-hostname NEWHOSTNAME`用于更改主机名。使用时注意权限、备份配置、更新网络和重启相关服务,避免频繁更改。