在 Linux 0.8.0 上发布 ZFS,Linux 内核的 ZFS 实现

经过近两年的发展 提交 发布 Linux 0.8.0 上的 ZFS,ZFS 文件系统的一个实现,打包为 Linux 内核的一个模块。 该模块已经在 2.6.32 到 5.1 的 Linux 内核上进行了测试。 准备好的安装包即将推出 将准备 适用于主要的 Linux 发行版,包括 Debian、Ubuntu、Fedora、RHEL/CentOS。 ZFS on Linux 模块已经包含在 Debian、Ubuntu、Gentoo、Sabayon Linux 和 ALT Linux 发行版中。

作为 Linux 上 ZFS 的一部分,与文件系统操作和卷管理器功能相关的 ZFS 组件的实现已经准备就绪。 具体而言,实现了以下组件:SPA(存储池分配器)、DMU(数据管理单元)、ZVOL(ZFS 仿真卷)和 ZPL(ZFS POSIX 层)。 此外,该项目还提供了使用 ZFS 作为 Lustre 集群文件系统后端的能力。 该项目的工作基于从 OpenSolaris 项目导入的原始 ZFS 代码,并通过 Illumos 社区的改进和修复进行了增强。 根据与美国能源部签订的合同,利弗莫尔国家实验室的员工参与了该项目的开发。

该代码是在免费的 CDDL 许可下分发的,该许可与 GPLv2 不兼容,不允许将 Linux 上的 ZFS 集成到 Linux 内核的主要分支中,因为不允许在 GPLv2 和 CDDL 许可下混合代码。 为了避免这种许可不兼容,决定在 CDDL 许可下将整个产品作为一个单独的可加载模块进行分发,该模块与内核分开提供。 ZFS on Linux 代码库的稳定性被评为可与 Linux 的其他文件系统相媲美。

主要变化:

  • 添加了对文件系统和分区级别的存储数据加密的内置支持。 默认的加密算法是 aes-256-ccm。 建议使用“zfs load-key”命令加载加密密钥;
  • 实现了在执行“zfs send”和“zfs receive”命令时传输加密数据的能力。 指定“-w”选项时,池中已加密的数据将按原样传输到另一个池,无需中间解密。 通过这种复制,数据仍然受到发件人密钥的保护,这允许使用此模式备份到不可信的系统(如果收件人受到威胁,攻击者将无法在没有密钥的情况下访问数据);
  • 添加了对从存储池中删除主驱动器的支持,这些驱动器单独连接或作为镜像的一部分连接。 使用“zpool remove”命令执行删除。 删除过程将数据从排除的驱动器复制到池中剩余的主驱动器;
  • 添加了“zpool checkpoint”命令以保存池的当前状态,并能够将进一步的更改回滚到保存的时间点(创建整个池的快照)。 此功能在执行具有潜在危险的复杂管理工作的过程中很有用,这在正常情况下会导致不可逆转的更改(例如,激活新 ZFS 功能的标志或清除数据);
  • 添加了“zpool trim”命令以通知池中使用的驱动器有关不再使用的扇区。 使用 TRIM 操作可以提高 SSD 的效率并防止其性能下降。 提出了一个新的“autotrim”属性,以启用传输 TRIM 命令的连续后台进程;
  • 添加了“zpool initialize”命令来初始化所有未分配的磁盘空间,使其可以立即使用,而不会在首次访问时性能下降(例如,托管 VMware VMDK 等虚拟化存储时);
  • 除了以前可用的用户和组级配额之外,还增加了对会计和项目级配额的支持。 本质上,项目是一个单独的对象空间,与单独的标识符(项目 ID)相关联。 绑定是通过“chattr -p”操作或通过属性继承定义的。 对于项目管理,提供了“zfs project”和“zfs projectspace”命令,允许您管理项目的创建并为其设置磁盘空间限制;
  • 添加了创建 Lua 脚本以自动执行 ZFS 的各种工作的能力。 使用“zpool program”命令在特殊的隔离环境中运行脚本;
  • 新图书馆实施 pyzfs,它提供了一个稳定的 API,用于从 Python 应用程序管理 ZFS。 该库是 libzfs_core 的包装器,提供了一组相同的函数,但使用更接近的 Python 类型;
  • arcstat、arcsummary 和 dbufstat 实用程序已与 Python 3 兼容。arcstat.py、arc_summary.py 和 dbufstat.py 实用程序已重命名为没有“.py”扩展名的版本;
  • 添加了对 Linux Direct IO (O_DIRECT) 内核接口的支持,它允许在不缓冲和绕过缓存的情况下访问数据;
  • 性能优化介绍:
    • 由于分为两个阶段,“scrub”和“resilver”命令的工作得到了加速(一个单独的阶段已分配用于扫描元数据和确定磁盘上数据块的位置,这允许使用顺序数据进行进一步验证阅读);
    • 添加了对分配类的支持,
      允许将相对较小的 SSD 池化,并仅用于存储某些类型的常用块,例如元数据、DDT 数据和小文件块;

    • 改进了管理命令的性能,例如
      “zfs list”和“zfs get”,通过缓存它们操作所需的元数据;

    • 通过为每个 metaslab 组运行单独的分配器进程,添加了对块分配操作并行化的支持。 在常规系统上,性能提升 5-10%,但在大型系统(8 128 GB SSD、24 核 NUMA、256 GB RAM)上,块分配操作的提升可达 25%;
    • 添加了延迟执行“resilver”命令的可能性(考虑到驱动器配置的变化重建数据分布) - 如果在开始新操作时前一个尚未完成,则新处理程序将仅在之后开始执行上一个已经完成;
    • 优化已添加到 ZIL(ZFS 意图日志)以允许在存储仍在处理的块存在的情况下创建和处理块;
    • 减少了系统中分区 (zvol) 的注册时间。 当池包含大量分区时,它们现在在执行“zpool import”后立即可用;
    • 添加了对使用 Intel QAT(快速辅助技术)芯片的 SHA256 哈希和 AES-GSM 加密操作的硬件加速计算的支持。 添加了对 Intel C62x 芯片组和 CPU Atom C3000 硬件加速的支持。

来源: opennet.ru

添加评论