有什么方法可以在solaris上冻结/解冻zfs文件系统,因为任何其他传统文件系统都可以提供此功能。我需要这样做来拍摄硬件(EMC Symmetrix阵列)快照。
我知道ZFS提供了快照/还原功能,但是我们的要求是拍摄硬件快照。
答案 0 :(得分:1)
@AndrewHenle的响应是正确的-今天,您必须卸载/导出池才能成功暂停新的IO。 fsfreeze
得到Linux其他大多数广泛使用的文件系统的支持,因此我希望ZFS有朝一日支持类似的东西并不是没有道理的。实际上,在Linux here上的ZFS中有一个功能要求支持fsfreeze
,它看起来并没有那么难实现(只是很难测试;-))。
也就是说,大多数人可能不需要在拍摄存储级快照之前使用fsfreeze
,因为崩溃一致性不是必需的-如果您的应用程序运行在ZFS无法处理不冻结文件系统而拍摄的快照,它也无法处理计算机进行意外的硬重启。在这方面,ZFS比其他文件系统要好一些,因为它不需要重播事务日志或在硬重启后运行fsck
即可确保正确性。也许这种性能下降(必须重播日志)是为什么这在其他文件系统上更重要的原因。
---编辑----
我记得最近的一项功能,可以用来实现类似这样的功能,称为zpool checkpoint
。一位前同事实施了此操作,并为此撰写了简短的文章here。
对于您的用例,其想法是在进行硬件快照时:
zpool checkpoint
,它将所有运行中的IO同步到磁盘,并存储包含所有这些更改的池uberblock(文件系统树中的最高级块)的副本。这类似于ZFS对单个文件系统进行快照的方式,但适用于整个池。这样会创建一个序列化点,就像您将使用fsfreeze
创建的序列化点一样,在该序列化点之前,必须在检查点之前启动的所有IO必须完成,而在检查点之前未捕获的所有IO都必须在检查点中捕获。zpool checkpoint --discard
丢弃该检查点,以便ZFS可以在被覆盖时继续释放磁盘上的空间(在该检查点处于活动状态时是不可能的,因为检查点中的某些内容仍可以引用数据。zpool import --rewind-to-checkpoint
而不是普通的zpool import
将池的状态回滚到检查点,然后使用zpool checkpoint --discard
丢弃检查点,因为不要计划在池运行后再次将其回滚到该点(并且您希望能够释放检查点占用的空间)。与fsfreeze
相比,它还有一个额外的优势,即在执行检查点时不会暂停IO。但是,它也具有以下缺点:(a)它未在其他文件系统中使用,因此更加复杂;(b)您无法轻松地将其与其他应用程序级事件同步,因为它只是“有时”发生在CLI命令运行时。