我正在运行 proxmox (7.1-10) 和一些虚拟机。我意外地强制从 proxmox 导入了虚拟机 (truenas 12.0-U7) 正在使用的 ZFS 池:
zpool import -f Pool-1
命令返回空白,我以为我没事。
然后我重新启动了 Proxmox,但池不见了。然后我做了:
zpool import
pool: Pool-1
id: 9292035031829486490
state: FAULTED
status: The pool metadata is corrupted.
action: The pool cannot be imported due to damaged devices or data.
The pool may be active on another system, but can be imported using
the '-f' flag.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-72
config:
Pool-1 FAULTED corrupted data
mirror-0 FAULTED corrupted data
sdd2 ONLINE
sdb2 ONLINE
indirect-1 ONLINE
indirect-2 ONLINE
indirect-3 ONLINE
当时我还没有意识到自己所犯的错误,并尝试再次导入:
zpool import -f Pool-1
internal error: cannot import 'Pool-1': Invalid exchange
Aborted
到那时,我意识到我导入了错误的池。我回到 Truenas,发现该池处于离线状态。我检查了 Truenas 是否可以看到该池:
truenas# zpool import
pool: Pool-1
id: 9292035031829486490
state: FAULTED
status: The pool was last accessed by another system.
action: The pool cannot be imported due to damaged devices or data.
The pool may be active on another system, but can be imported using
the '-f' flag.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-EY
config:
Pool-1 FAULTED corrupted data
mirror-0 FAULTED corrupted data
gptid/f475cf25-9d3a-11eb-a1a4-0cc47a30748c ONLINE
gptid/f485d5c5-9d3a-11eb-a1a4-0cc47a30748c ONLINE
indirect-1 ONLINE
indirect-2 ONLINE
indirect-3 ONLINE
并首先尝试:
truenas# zpool import Pool-1
cannot import 'Pool-1': pool was previously in use from another system.
Last accessed by proxmox (hostid=2e5301d3) at Tue Jan 25 16:21:58 2022
The pool can be imported, use 'zpool import -f' to import the pool.
进而:
truenas# zpool import -f Pool-1
internal error: cannot import 'Pool-1': Integrity check failed
Abort trap (core dumped)
因此,现在如果我尝试强制从 proxmox 导入,我会收到“无效交换”信息,如果我尝试强制从 truenas 导入,我会收到“完整性检查失败”信息。
有人知道如何解决这个问题吗?
谢谢,RG
注意:该池是使用加密创建的。
答案1
我继续truenas# zpool import -f -FXn Pool-1
12小时后我得到了:
Code:
Would be able to return Pool-1 to its state as of Tue Jan 25 16:18:53 2022.
Would discard approximately 3 minutes of transactions.
然后我去了zpool import -f -FX Pool-1
我的游泳池现在安然无恙。
感谢所有建议,RG
答案2
请不要误会我的意思,我不想成为虚假希望的来源。Pool 很可能已经死了,但你只有几个选择:
- 尝试以只读模式导入池
-F
如果您的 zfs 实现有恢复模式,请尝试使用恢复模式导入池- 尝试在具有最新 zfs 堆栈的系统上导入池,您可以在创建池的原始操作系统上获得该堆栈,例如:夜间构建、不稳定的 git 修订版或开发人员分支中最新的可用提交。由于池是在 Proxmox 上创建的,所以我会使用它。
无论如何,在外部操作系统上导入池(例如在 Solaris 上创建的池 - 在 FreeBSD 或 Linux 上等等)通常是一个坏主意,应该非常谨慎地进行。