ZFS:从快照中删除文件?

Tin*_*sen 11 zfs

假设我有一个包含 100 个快照的数据集,并且想要rm -rf所有快照中名为“缓存”的所有文件夹。

我想真正释放空间,而不仅仅是将其隐藏在快照层中,因此制作克隆并从中删除然后拍摄新快照似乎并不能满足我的要求。

任何半自动方式做到这一点?一些环绕 zfs list -t 快照、zfs 克隆、zfs 提升、zfs 快照?

(从https://superuser.com/questions/313197交叉发布,因为我看到这有更多 ZFS 的东西)

小智 15

您可以尝试以下操作:

  1. 将最旧的快照克隆到新的文件系统中(称之为fsnew)。
  2. 提升克隆 ( fsnew) 以允许您销毁文件系统所基于的快照。
  3. 删除有问题的文件。
  4. 创建 的快照fsnew

现在 foreach 快照之后,从快照到 fsnewrsync--inplace标志跳过你不想要的文件。该--inplace标志减少了写入次数并允许使用较小的快照。

  1. 创建 的快照fsnew
  2. 销毁原始快照。

完成此操作后,您应该拥有一个快照fsnew,该快照对应于原始文件系统中删除了违规文件的快照。

如果驱动器上有足够的空间,您可能希望跳过“销毁”命令,直到您的脚本正常工作。


Chr*_*s S 9

快照是只读的。如果您需要删除这些文件夹,则必须删除整个快照。

您可以进行备份(使用 tar 之类的东西),排除有问题的文件夹,然后删除快照。显然,备份现在是 tar 或其他格式;但至少你还有一个备份副本。

  • 这个解决方案真正令人失望的是,您现在必须真实地存储数据的每一位 *n* 次,而快照只会存储修改后的块。这样,您最终需要的空间可能比从 tar 文件中删除缓存所节省的空间多得多。 (2认同)