filesystems - 如何卡住/解冻 ZFS 文件系统以获取硬件快照

标签 filesystems storage solaris zfs

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

我知道 ZFS 提供快照/恢复功能,但我们的要求是获取硬件快照。

最佳答案

@AndrewHenle 的回答是正确的——今天你必须卸载/导出池才能成功暂停新的 IO。 fsfreeze Linux 中大多数其他广泛使用的文件系统都支持它,所以我认为希望 ZFS 有一天会支持类似的东西是不合理的。事实上,有一个功能请求支持fsfreeze在 Linux 上的 ZFS 中 here ,它甚至看起来并不难实现(只是很难测试;-))。

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

- - 编辑 - -

我记得最近有一个功能可以用来实现这样的功能,叫做 zpool checkpoint .一位前同事实现了这一点,并写了一篇关于它的简短文章 here .

对于您的用例,想法是当您拍摄硬件快照时:

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

  • 这比 fsfreeze 具有额外的优势。在检查点被执行时它不会暂停 IO。但是,它也有缺点,(a) 它没有在其他文件系统中使用,因此有点复杂,并且 (b) 你不能轻易地将它与其他应用程序级事件同步,因为它只是“某个时候”发生当 CLI 命令正在运行时。

    关于filesystems - 如何卡住/解冻 ZFS 文件系统以获取硬件快照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52329268/

    相关文章:

    javascript - node.js 用目录写文件?

    configuration - Hadoop写入目录

    mongodb - 以可扩展的方式存储用户提交的文件(图像、pdf)?

    c - 如何使用 Dtrace 检查 Solaris 10 上的 malloc?

    linux - 为什么可以在 Linux 中删除/重命名打开的文件?

    filesystems - 使用 fdisk 更改分区会显示类似 "partition#x contains ext4-signature"的警告

    c++ - 如何在非模板类中存储仿函数?

    linux - 我可以在 UNIX shell 中执行嵌套或链接命令吗?

    c++ - 使用 Solaris CC 的 std::BinaryPredicate 问题

    linux - 运行 ls -l 时,为什么目录上的文件大小与 du 的输出不匹配?