我有一台运行 Solaris 10 8/07 的服务器(T5220,虽然我怀疑这很重要),并且在内部磁盘上有一个 ZFS 池“mysql”。在其中我有一个文件系统“mysql/data/4.1.12”,我每小时使用 cron 脚本对其进行快照。
我有一个快照,它是按小时创建的,不会被销毁。我将其重命名为“mysql/data/4.1.12@wibble”,这样我的脚本就不会试图销毁它,但它最初在序列内,尽管我怀疑这无关紧要。它重命名成功。可以通过 .zfs/snapshots 目录成功导航和读取快照。它没有基于它的克隆。
尝试摧毁它会发生这样的事情:
(265) root@web-mysql4:/# zfs destroy mysql/data/4.1.12@wibble
cannot destroy 'mysql/data/4.1.12@wibble': dataset already exists
(266) root@web-mysql4:/#
这显然是无意义的:当然它已经存在了,这就是重点!
有人见过类似的东西吗?网络搜索没有发现任何明显类似的东西。
如果需要的话,我可以提供安装的补丁。
答案1
这个问题现在已经得到解答,由 Cindy Swearingen (cindys) 提供: http://opensolaris.org/jive/thread.jspa?messageID=484242&tstart=0
摘要:如果您进行增量接收,这可能是 CR 6860996:
为增量接收创建临时克隆,在某些情况下,不会自动删除。
1. Determine clone names:
# zdb -d <poolname> | grep %
2. Destroy identified clones:
# zfs destroy <clone-with-%-in-the-name>
It will complain that 'dataset does not exist', but you can check
again(see 1)
3. Destroy snapshot(s) that could not be destroyed previously
答案2
升级到较新的补丁集后,我可以成功删除此快照。显然是 Sun 修复了某个地方的一个错误。
答案3
虽然这个解决方案可能与 OP 的问题无关,但当我尝试删除 zvol 时也遇到了同样的神秘错误消息。
在我的例子中,zvol 是由中断的 zfs 接收创建的,它是使用“-s”可恢复功能发送的。恢复令牌阻止了它被销毁。
为了修复它,我运行了zfs receive -A <pool/zvol>
(在 FreeBSD 10.3 上)
答案4
我也遇到过这个问题(2009 年 11 月)。同样,只有一个快照无法销毁,我收到了同样无意义的消息
# zfs destroy blue/viss02_backup/46home1f@200910211357
cannot destroy 'blue/viss02_backup/46home1f@200910211357': dataset already exists
而且这个快照不是文件系统克隆的起源。事实上,我有一个克隆的文件系统 - 但递归搜索显示它不是基于麻烦的快照
# zfs get -H -o value -r origin blue | uniq
-
blue/viss02_backup/zones/puppis@200902031605
-
在我重命名它之前,这个快照还会搞砸我运行的用于控制快照扩散的脚本。
版本信息:这是 x86 上的 Solaris(5.10 Generic_141445-09 i86pc)。此系统当前运行的是 ZFS 池版本 15。所有池均使用此版本格式化。