昨天在 ZFS 和 Ubuntu 前沿带来了令人兴奋的消息——Ubuntu 即将发布的临时版本 Eoan Ermine 的安装程序中的 ZFS 根支持实验性支持。该功能出现在 Eoan 的 2019-10-09 每日版本中——它不在常规测试版中,事实上,当我们第一次下载它时,甚至不在“当前每日”中。就是这么新!(想要使用新功能的读者可以在今天的每日构建中找到它 ,可在此处获得。)
对于 ZFS 新手
如果您不熟悉 ZFS炒作,您可能想知道为什么操作系统安装程序中的新文件系统选项很重要。所以这里有一个简单的解释:ZFS 是一个写时复制文件系统,它可以拍摄 整个文件系统的原子快照。如果您不习惯,这看起来就像是一种魔法——可以立即拍摄 10TB 文件系统的快照,而丝毫不会中断任何系统进程。拍摄快照后,它是拍摄快照时文件系统的确切块对块条件的不可变记录。
首次拍摄快照时,它不会消耗额外的磁盘空间。随着时间的推移和对文件系统的更改,保存快照所需的空间会随着已删除或更改的数据量而增长。因此,假设您对一个 10TB 的文件系统进行快照:快照会立即完成,不需要额外的空间。然后你删除了一个 5MB 的 JPEG 文件——现在快照占用了 5MB 的磁盘空间,因为它仍然有你删除的 JPEG。然后您更改数据库中的 5MB 数据,快照占用 10MB——5MB 用于您删除的 JPEG,另外 5MB 用于您在数据库中更改的数据。
这只是一个很棒的 ZFS 功能。还可以在类似 RAID 的本机系统中管理多个磁盘、使用可选算法进行内联压缩、快速异步增量复制等。但我们将主要关注这里的快照,因为 您可以对快照做的另一件事是回滚它。
尽管 Eoan 的 apt 包管理器中还没有任何支持自动拍摄快照,但我们可以手动演示快照——oops——回滚时刻。在上面的图库中,我们首先拍摄 ZFS 快照。Eoan 已将我们的根文件系统拆分为大量小数据集(稍后会详细介绍),因此我们使用 的-r选项zfs snapshot在整个树中递归地拍摄快照。
既然我们已经为自己避免了错误,我们做了一些我们会后悔的事情。出于此演示的目的,我们只是删除了 Firefox,但我们真的可以rm -rf --no-preserve-root /通过一些额外的工作从任何包括这种方式的东西中恢复过来。移除 Firefox 后,我们需要回滚我们的快照以将系统恢复到原始状态。
由于根文件系统分散在 一堆单独的数据集中,我们需要单独回滚它们。虽然这对于没有额外工具的临时用户来说是一种痛苦,但如果我们感到挑剔,它确实可以执行更细粒度的还原操作 - 例如回滚根文件系统而不回滚/home. Ubuntu将无疑最终要的工具可以使这个更容易,但就目前而言,我们做了一下系统管理员福及管道zfs list,以grep到awk到xargs,哦,我的。
命令行杂技可能令人讨厌,但回滚本身是即时的,Firefox 已经返回。但是,由于孤立的文件句柄,它仍然不能正常工作——我们回滚了一个实时挂载的根文件系统,这是一种牛仔式的做法。为了使事情完全正确,需要重新启动,但重新启动后,一切都像以前那样的方式,而不需要等待通过任何冗长的Windows还原点风格匍匐在文件系统。
对于 ZFS 爱好者
在本节中,我们将详细了解 Ubuntu 如何在 Eoan 的实验安装程序中分割文件系统。我们每日构建的版本是 0.8.1,所以这对我们中的 ZFS 粉丝来说是个好消息,即使没有实验性的 root 安装程序——假设 Eoan 的最终版本遵循这个版本,我们将获得本机加密、TRIM、设备移除和 zpool 检查点。这些特性从 0.8 开始就出现在 Linux master上的 ZFS 中,但这是它们第一次出现在 Ubuntu 的原生 ZFS 中。
到目前为止——请记住,这是每日构建中的 alpha 软件——当您选择 ZFS 安装时,安装程序不会让您控制它如何分割磁盘;它只是做它想做的事。我创建的 Eoan VM 有一个 20GB 的虚拟磁盘。Eoan 的安装程序将其划分为一个主分区和两个逻辑分区——一个小的 UEFI 引导分区和两个独立的 ZFS 存储池的分区,命名为bpool和rpool.
Bpool 很无聊;它只是系统的 /boot 目录被挂载的地方。Eoan 将这个池设置为 2GB,这是保守派/boot通常配置的两倍;这可能是为了留出空间来在未来维护相当深的快照存档。创建rpoolUEFI 和bpool分区后获取所有剩余的磁盘空间;它是所有有趣东西的所在,包括您的根文件系统、主目录等。
在 之下rpool,您会发现一系列令人眼花缭乱的小数据集,所有这些都对应于通常是单个根文件系统中的特定重要区域。在我们看来,这似乎是一种继承的 BSD 主义——二十年前,大多数 Linux 发行版都将重分区磁盘和多个文件系统的概念抛在了脑后,但是 FreeBSD——它的安装程序中已经有很多年的根 ZFS 选项了——很多对它比较固执。
将根文件系统分割成如此多的独立数据集的好处在于,您可以单独对它们进行快照和回滚。在某些情况下,这很好——例如,回滚整个根文件系统和回滚您自己的主目录之间存在明显、清晰且有用的区别。大多数用户(即使是非常称职的系统管理员类型)对于如何以及为什么要在不回滚的/usr情况下回滚(例如,)会更加困惑/var/lib/AccountServices。如果您真的愿意,您 可以这样做很好,但我们不确定该功能是否超过了更简单方法的效用。
再深入一点,我们可以看到 Eoan 没有在所有这些单独的数据集上设置任何重要的每个数据集属性。不过,它在整个池中设置了compression=lz4。这是一件好事——许多人担心压缩文件系统是缓慢的文件系统,但 LZ4 流压缩是如此轻量级,以至于它实际上是“免费的”。我们在多年的 ZFS 经验中进行了广泛的测试,从未见过 LZ4 不是一个好主意的情况。即使是几年前 50 美元的 tinkertoy APU 压缩和解压缩 LZ4 的速度也比一对快速 SSD 的速度快,而且 CPU 利用率不高。
标签:
免责声明:本文由用户上传,如有侵权请联系删除!