我正在尝试使用最佳实践在 ubuntu 20.04 服务器上设置镜像 zfs 池。
我的硬件是外部 USB-C 外壳 GEN2 SSD 外壳中的 2 个 1TB nvme。
我的问题是两个磁盘似乎具有相同的磁盘 ID!因此,我可以使用 sda 和 sdb 创建池,但重新启动后不稳定,池会丢失。为了展示这种情况,我将设备属性转储到文件中并制作了 fiff。
正如您在下面看到的,磁盘 ID 完全匹配,但磁盘路径不同。
即使是一种解决方法也会受到欢迎。
sudo udevadm info --name=/dev/sda --query=property > sda
sudo udevadm info --name=/dev/sdb --query=property > sdb
diff sda sdb
1,2c1,2
< DEVPATH=/devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.0/host1/target1:0:0/1:0:0:0/block/sda
< DEVNAME=/dev/sda
---
> DEVPATH=/devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.0/host1/target1:0:0/1:0:0:1/block/sdb
> DEVNAME=/dev/sdb
5c5
< MINOR=0
---
> MINOR=16
7c7
< USEC_INITIALIZED=1630003
---
> USEC_INITIALIZED=1626316
31,33c31,33
< ID_PATH=pci-0000:00:14.0-usb-0:1:1.0-scsi-0:0:0:**0**
< ID_PATH_TAG=pci-0000_00_14_0-usb-0_1_1_0-scsi-0_0_0_0
< ID_PART_TABLE_UUID=2decf1ce-947b-9548-bef4-0e315c078f4f
---
> ID_PATH=pci-0000:00:14.0-usb-0:1:1.0-scsi-0:0:0:**1**
> ID_PATH_TAG=pci-0000_00_14_0-usb-0_1_1_0-scsi-0_0_0_1
> ID_PART_TABLE_UUID=ace78582-634a-b340-8ac5-3db5984afc5f
35c35
< DEVLINKS=/dev/disk/by-id/scsi-35000000000000001 /dev/disk/by-id/scsi-SASMT_ASM1352R-PM_3000CCCCBBBBAAAA /dev/disk/by-path/pci-0000:00:14.0-usb-0:1:1.0-scsi-0:0:0:0 /dev/disk/by-id/wwn-0x5000000000000001
---
> DEVLINKS=/dev/disk/by-id/wwn-0x5000000000000001 /dev/disk/by-id/scsi-SASMT_ASM1352R-PM_3000CCCCBBBBAAAA /dev/disk/by-id/scsi-35000000000000001 /dev/disk/by-path/pci-0000:00:14.0-usb-0:1:1.0-scsi-0:0:0:1
答案1
做到这一点的最佳方法是:
- 确定驱动器的制造商和序列号
- 在每个驱动器上创建 GPT 分区表(或“方案”)
- 在每个驱动器上创建一个 ZFS 数据分区,并以反映该驱动器的制造商(可能是缩写)和序列号的方式命名该分区
例如,如果您要创建两个 Western Digital 驱动器(序列号WD-WMC1S5694795
和 )的镜像WD-WMC1S5688675
,则在每个驱动器上创建相同大小的 GPT 分区,并分别将分区标记为data-WD-WMC1S5694795
和data-WD-WMC1S5688675
。一定要正确标记它们,否则花费的时间是没有用的。幸运的是,这些序列号已经包含了前导WD-
,因此制造商已经被编码。在标签中包含缩写的制造商只是为了防止可能出现的情况,即您拥有两个来自不同制造商的具有相同序列号的驱动器。不太可能发生,因此请自行决定是否在分区标签中对制造商进行编码。
这将为您提供/dev
条目,/dev/disk/by-partlabel/
然后您可以使用它们来构建池:
# zpool create tank mirror /dev/disk/by-partlabel/data-WD-WMC1S5694795 \
/dev/disk/by-partlabel/data-WD-WMC1S5688675
# zpool status tank
pool: tank
state: ONLINE
scan: scrub repaired 0B in 23h36m with 0 errors on Wed Dec 1 16:00:38 2021
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
data-WD-WMC1S5694795 ONLINE 0 0 0
data-WD-WMC1S5688675 ONLINE 0 0 0
errors: No known data errors
现在,当其中一个驱动器出现故障时,您将确切地知道要更换哪一个,因为人类可读的序列号出现在驱动器的外部。