我在具有 3 驱动器镜像 zpool 的新 NAS 上测试了 ZFS 重新同步。所以我在外部 USB SATA 坞站中将另一个 4TB 驱动器连接到服务器并运行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 将驱动器显示为“UNAVAIL”(已显示新驱动器的 ID - 因此它似乎不会寻找更换的 HDD)。它不应该能够通过ID识别驱动器是同一设备吗?
编辑:丹尼尔 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
有这个问题?
您的 USB 驱动器底座正在模拟原生 4K 扇区。这可以从
fdisk
您提供的输出片段中看到:各种数据结构(在 MBR/GPT、ZFS 中……)都指向扇区号。当扇区大小发生变化时,这些不再匹配,即使所有数据仍然存在。例如,如果之前有东西指向扇区 5(从 1 开始),则转换为从偏移量 (5 - 1) * 4096 字节 = 16384 字节开始的 4096 字节。现在,它指向从偏移量 4 * 512 字节 = 2048 字节开始的 512 字节。
您应该取消 USB 驱动器底座。
您还必须在内部安装驱动器时重新添加它。您应该尽快执行此操作以获得常规级别的冗余。
不幸的是,没有简单的方法来发现存在这种“缺陷”的 USB 驱动器适配器/外壳。我希望“品牌”产品没有这个问题。但最终,唯一确定的方法是手动检查。