如何冻结/解冻ZFS文件系统以拍摄硬件快照

时间:2018-09-14 09:43:46

标签: filesystems storage solaris zfs

有什么方法可以在solaris上冻结/解冻zfs文件系统,因为任何其他传统文件系统都可以提供此功能。我需要这样做来拍摄硬件(EMC Symmetrix阵列)快照。

我知道ZFS提供了快照/还原功能,但是我们的要求是拍摄硬件快照。

1 个答案:

答案 0 :(得分:1)

@AndrewHenle的响应是正确的-今天,您必须卸载/导出池才能成功暂停新的IO。 fsfreeze得到Linux其他大多数广泛使用的文件系统的支持,因此我希望ZFS有朝一日支持类似的东西并不是没有道理的。实际上,在Linux here上的ZFS中有一个功能要求支持fsfreeze,它看起来并没有那么难实现(只是很难测试;-))。

也就是说,大多数人可能不需要在拍摄存储级快照之前使用fsfreeze,因为崩溃一致性不是必需的-如果您的应用程序运行在ZFS无法处理不冻结文件系统而拍摄的快照,它也无法处理计算机进行意外的硬重启。在这方面,ZFS比其他文件系统要好一些,因为它不需要重播事务日志或在硬重启后运行fsck即可确保正确性。也许这种性能下降(必须重播日志)是为什么这在其他文件系统上更重要的原因。

---编辑----

我记得最近的一项功能,可以用来实现类似这样的功能,称为zpool checkpoint。一位前同事实施了此操作,并为此撰写了简短的文章here

对于您的用例,其想法是在进行硬件快照时:

  1. 首先,您将运行zpool checkpoint,它将所有运行中的IO同步到磁盘,并存储包含所有这些更改的池uberblock(文件系统树中的最高级块)的副本。这类似于ZFS对单个文件系统进行快照的方式,但适用于整个池。这样会创建一个序列化点,就像您将使用fsfreeze创建的序列化点一样,在该序列化点之前,必须在检查点之前启动的所有IO必须完成,而在检查点之前未捕获的所有IO都必须在检查点中捕获。
  2. 然后您将获取存储快照。
  3. 完成存储快照后,您将在实时系统上使用zpool checkpoint --discard丢弃该检查点,以便ZFS可以在被覆盖时继续释放磁盘上的空间(在该检查点处于活动状态时是不可能的,因为检查点中的某些内容仍可以引用数据。
  4. 如果以后要从硬件快照还原,请运行zpool import --rewind-to-checkpoint而不是普通的zpool import将池的状态回滚到检查点,然后使用zpool checkpoint --discard丢弃检查点,因为不要计划在池运行后再次将其回滚到该点(并且您希望能够释放检查点占用的空间)。

fsfreeze相比,它还有一个额外的优势,即在执行检查点时不会暂停IO。但是,它也具有以下缺点:(a)它未在其他文件系统中使用,因此更加复杂;(b)您无法轻松地将其与其他应用程序级事件同步,因为它只是“有时”发生在CLI命令运行时。