重新镀银后 ZFS 无法识别新驱动器

重新镀银后 ZFS 无法识别新驱动器

我在具有 3 驱动器镜像 zpool 的新 NAS 上测试了 ZFS 重新同步。因此,我将另一个 4TB 驱动器连接到外部 USB SATA 底座中的服务器并运行zfs replace /dev/disk/by-id/ata-<ID_OF_ONE_INTERNAL_DISK_FROM_MIRROR> /dev/disk/by-id/ata-<ID_OF_DISK_IN_USB_DOCK>。然后,我让重新同步完全完成,关闭服务器,并将服务器中更换的硬盘驱动器与之前 USB 底座中的硬盘驱动器交换(因此它直接位于服务器中旧驱动器所在的 SATA 端口上)。

但是,ZFS 显示该驱动器为“不可用”(已经显示新驱动器的 ID - 因此它似乎没有查找更换的 HDD)。难道它不应该能够通过 ID 识别驱动器是同一设备吗?

编辑:Daniel B 请求的输出:

The output differs a lot. ls -1 /dev/disk/by-id/ is missing 4 entries when drive is in USB dock (<disk-id>-part1, <disk-id>-part9, wwn-<HEXID>-part1, wwn-<HEXID>-part9). Both times, the disk ID alone and the HEXID alone (without the -part<n> suffixes appear in the output).

The fdisk -l also differs a lot.

Disk in server:
Units: sectors of 1 * 512 = 512 bytes
Sector size: 512 bytes / 512 bytes
I/O size: 512 bytes / 512 bytes
Disklabel: gpt

In USB:

Units: sectors of 1 * 4096 = 4096 bytes
Sector size: 4096 bytes / 4096 bytes
I/O size: 4096 bytes / 4096 bytes
Disklabel: dos

USB 底座中的磁盘标识符全为零。也许s the problem? Are there USB controllers that don存在这个问题?

答案1

您的 USB 驱动器底座正在模拟原生 4K 扇区。从fdisk您提供的输出片段中可以看到这一点:

Units: sectors of 1 * 4096 = 4096 bytes
Sector size: 4096 bytes / 4096 bytes
I/O size: 4096 bytes / 4096 bytes

各种数据结构(在 MBR/GPT、ZFS 等中)都指向扇区号。当扇区大小发生变化时,这些不再匹配,即使所有数据仍然存在。例如,如果之前某个东西指向扇区 5(从 1 开始),则转换为从偏移量 (5 - 1) * 4096 字节 = 16384 字节开始的 4096 字节。现在,它指向从偏移量 4 * 512 字节 = 2048 字节开始的 512 字节。

您应该废除您的 USB 驱动器基座。

您还必须在内部安装驱动器时重新添加它。您应尽快执行此操作,以获得正常的冗余级别。


不幸的是,没有简单的方法可以发现有此“缺陷”的 USB 驱动器适配器/外壳。我希望“品牌”产品没有这个问题。但最终,唯一能确定的方法是手动检查。

相关内容