如何在 /dev/disk/by-id 中获取 ata 样式的 ID 以用于 USB 磁盘?

如何在 /dev/disk/by-id 中获取 ata 样式的 ID 以用于 USB 磁盘?

我有 USB 驱动器底座,我正在将 SATA 驱动器插入其中。它们的显示方式/dev/disk/by-id似乎取决于驱动器是否有分区表(usb如果没有,ata如果有)。这使得 ZFS 的使用有点尴尬。

新驱动器的初始状态:

% ls -alF /dev/disk/by-id | grep sdd              
lrwxrwxrwx 1 root root   9 Nov 18 20:47 usb-WDC_WD30_EFRX-68EUZN0_000000000012-0:0 -> ../../sdd

创建分区表得到了/dev/disk/by-id解决,但让 ZFS 感到困惑,因为驱动器在它一直使用的路径上消失了:

% sudo zpool create -f -o ashift=12 offsite_3TB -m /mnt/offsite_3TB /dev/disk/by-id/usb-WDC_WD30_EFRX-68EUZN0_000000000012-0:0
cannot resolve path '/dev/disk/by-id/usb-WDC_WD30_EFRX-68EUZN0_000000000012-0:0-part1': 2

初始舞蹈完成后,一切都会按预期进行:

% ls -alF /dev/disk/by-id | grep sdd
lrwxrwxrwx 1 root root   9 Nov 18 21:22 ata-WDC_WD30EFRX-68EUZN0_WD-WCC4NPUZ4ZFR -> ../../sdd
lrwxrwxrwx 1 root root  10 Nov 18 21:22 ata-WDC_WD30EFRX-68EUZN0_WD-WCC4NPUZ4ZFR-part1 -> ../../sdd1
lrwxrwxrwx 1 root root  10 Nov 18 21:22 ata-WDC_WD30EFRX-68EUZN0_WD-WCC4NPUZ4ZFR-part9 -> ../../sdd9
lrwxrwxrwx 1 root root   9 Nov 18 21:22 wwn-0x50014ee260198109 -> ../../sdd
lrwxrwxrwx 1 root root  10 Nov 18 21:22 wwn-0x50014ee260198109-part1 -> ../../sdd1
lrwxrwxrwx 1 root root  10 Nov 18 21:22 wwn-0x50014ee260198109-part9 -> ../../sdd9
% sudo zpool create -f -o ashift=12 offsite_3TB -m /mnt/offsite_3TB /dev/disk/by-id/ata-WDC_WD30EFRX-68EUZN0_WD-WCC4NPUZ4ZFR

(成功完成)

在此序列期间,没有任何东西被拔出。

最初插入时kern.log

kernel: [1540491.548519]  sdd: unknown partition table

zpool 创建后:

kernel: [1542568.022312]  sdd: sdd1 sdd9
kernel: [1542625.260285]  sdd: sdd1 sdd9

为什么会/dev/disk/by-id改变?这些ata样式路径正是我想要的,因为我不希望路径根据驱动器是直接在 SATA 总线上还是在 USB 坞站中而改变。是否有更优雅的方法来ata显示样式 ID,而不会故意使 zpool 创建失败?

FWIW,带有 ZFS-on-Linux PPA 的 Ubuntu 14.04。

相关内容