ZFS:从快照中删除文件?


10

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

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

有任何半自动的方式吗?在zfs列表周围有一些包装-t快照,zfs克隆,zfs升级,zfs快照吗?

(来自/superuser/313197的交叉发布,因为我看到它包含更多的ZFS内容)


3
请不要交叉张贴,但请等待您的问题被移植。
斯文

另外,我不确定这是不可能的:快照是只读的,并且如果使用克隆/升级对,则将反转克隆的快照与“ HEAD”数据集之间的依赖关系,这可能与您所需要的不一样。想。请参阅此处的文档:download.oracle.com/docs/cd/E19253-01/819-5461/gbcxz/index.html
Sven

我将等待迁移,但似乎在SU上也有相当多的ZFS问题,因此我怀疑它会自动移动...它在两个地方都适合,因此我遵循了如何更好地进行跨平台迁移的元指南-发布。
蒂诺·迪德里克森

@TinoDidriksen您能否提供该元文章的参考?我想看看。谢谢。
nhinkle 2011年

2
您引用的帖子不是官方政策。有对MSO的常见问题解释如何处理用户认为是对多个网站主题的问题。总而言之,交叉发布是不允许的。如果您在发布后决定在其他地方更好,而您还没有得到好的答案,则可以将其标记为要迁移,也可以删除并重新提问,但是您必须根据您所处的网站来定制发布问。您无需等待就逐词重新发布了完全相同的问题,这使有关交叉发布的两个元发布指南中的准则均失效。
nhinkle'7

Answers:


9

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

您可以进行备份(使用类似tar的备份),将不受欢迎的文件夹排除在外,然后删除快照。显然,备份现在是tar或其他格式。但至少您还有备份副本。


2
使用此解决方案的真正麻烦之处在于,您现在必须将数据的每一位实际存储n次,而快照仅存储修改后的块。这样,您最终可能需要比从tar文件中删除缓存保存的空间更多的空间。
斯文

重复数据删除将对此有所帮助,但是您是正确的。我相当确定,没有任何办法可以像他想要的那样修改那些快照。
克里斯S

我同时使用gzip-1压缩和dedup,因此在相同数据周围进行复制仅占用簿记空间。但是我当然想要某种避免复制的方法。
蒂诺·迪德里克森

我怀疑,如果多个tar文件几乎具有相同的数据重复数据删除功能会起到很大的作用,因为在文件开始处仅添加或减去一个字节将意味着没有块会与另一个字节相同,从而导致dedup无效。
斯文

@SvenW重读问题后,我看到他正在这样做以节省空间;除非他将tar文件从计算机中移出,否则我的答案确实无济于事,无论如何,他可以将快照导出。听起来好像他被困住了。
克里斯S

14

您可以尝试以下操作:

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

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

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

完成此操作后,您应该具有一个快照fsnew,该快照与原始文件系统中的快照(已删除有问题的文件)相对应。

如果驱动器上有空间,则可能要跳过“ destroy”命令,直到脚本正常工作为止。


您还需要将该--delete选项传递给rsync,否则您将丢失快照之间发生的删除。否则,这是一个好主意。
托比亚

1
  1. 销毁原始快照。

升级操作后,您将无法销毁原始快照。只有这样才能销毁父数据集。

示例(升级克隆后)。

zfs destroy media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y

无法销毁'media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y':快照具有相关克隆

使用'-R'破坏以下数据集:

media1/media/backup@auto-20190531.1622-2y

媒体1 /媒体/备份

ZFS销毁media1/media/backup@auto-20190531.1622-2y

zfs destroy media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y

无法销毁'media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y':快照具有相关克隆

使用'-R'破坏以下数据集:

媒体1 /媒体/备份

完成“有趣”的操作后,我必须进行下一个操作

zfs快照media1 / media / backup @ 1

zfs发送media1 / media / backup @ 1 | pv | zfs接收media1 / media / backupnew

zfs销毁media1 / media / backup @ 1

zfs destroy -R media1 / media / backup

zfs重命名media1 / media / backupnew media1 / media / backup

或反转提升一个。zfs升级media1 / media / backup,然后删除克隆副本,因为您在src位置会有一个大快照))

只有rsync / backup可以在这里提供帮助。


-3

可以.zfs/snapshots在文件系统根目录下的目录下找到特定ZFS文件系统的ZFS快照。您应该能够编写一个遍历此文件夹和rm所需文件的脚本,该脚本应将其从快照本身中删除。


3
ZFS快照是只读的。您无法从其中删除。
斯文

我不好,不确定我会在哪里得到你的印象:(
增长
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.