![为什么在不使用 fdisk 对数据磁盘进行分区的情况下无法导入 ZFS 池?](https://linux22.com/image/74099/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%E4%B8%8D%E4%BD%BF%E7%94%A8%20fdisk%20%E5%AF%B9%E6%95%B0%E6%8D%AE%E7%A3%81%E7%9B%98%E8%BF%9B%E8%A1%8C%E5%88%86%E5%8C%BA%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E6%97%A0%E6%B3%95%E5%AF%BC%E5%85%A5%20ZFS%20%E6%B1%A0%EF%BC%9F.png)
我在这里遇到了一个奇怪的情况,我无法导入从另一个操作系统带来的 ZFS 池,除非我 fdisk 池的磁盘。我很困惑为什么会发生这种情况,希望得到答案或建议。
流程:在“NAS4Free 9.3.0.2”系统 (FreeBSD) 上创建包含单个 3TB 磁盘的 ZFS 池。我导出该池并将其附加到“NexentaStor 4.0.4”系统(OpenSolaris)。 zpool import 然后显示
root@nexenta:/volumes# zpool import
pool: tank1
id: 17717822833491017053
state: UNAVAIL
status: One or more devices are missing from the system.
action: The pool cannot be imported. Attach the missing
devices and try again.
see: http://illumos.org/msg/ZFS-8000-3C
config:
tank1 UNAVAIL insufficient replicas
c2t50014EE2B5B23B15d0p0 UNAVAIL cannot open
磁盘上的 zdb -l 按预期显示 label0 和 label1,但是
--------------------------------------------
LABEL 2
--------------------------------------------
failed to read label 2
--------------------------------------------
LABEL 3
--------------------------------------------
failed to read label 3
然后我就跑了fdisk c2t50014EE2B5B23B15d0p0
。它表示磁盘未初始化并提供初始化和创建 1 个 Linux 分区。我让它去做。然后可以选择删除新分区并保存。此时,在磁盘的第一个扇区上创建了 MBR。磁盘作为一个整体仍然是zpool的一个设备。通过磁盘上的 MBR,我可以按预期导入池。
重要细节:256GB 磁盘的相同过程按预期工作,无需 fdisk 参与。我怀疑这个问题与超过 2TB 的磁盘有关。
我尝试过的方法:查看磁盘大小是否正确检测到,并且在不同的系统上是否相同。 NexentaStor 上的 fdisk 的磁盘几何结构似乎与其他系统不同。我不确定如何验证。
为什么在这样的磁盘上创建 MBR 可以正确读取磁盘末尾的 ZFS 标签?
答案1
如果 ZFS 使用整个磁盘,它会将 EFI 标签写入磁盘。
您检查磁盘上是否有 EFI 标签?
我知道 FreeBSD 的做法与 Solaris 不同。 IIRC,建议在 FreeBSD 上初始化 ZFS 之前先手动编写 EFI 标签。
请注意,基于 512 字节扇区大小,带 fdisk 标签的最大磁盘大小为 2 TB。