Linux

ZFS - 兩個 nvm 設備只有一個磁碟/按 id

  • December 2, 2021

我正在嘗試使用最佳實踐在 ubuntu 20.04 伺服器上設置鏡像 zfs 池。

我的硬體是外部 USB-C 外殼 GEN2 SSD 外殼中的 2x 1TB nvme。

我的問題是兩個磁碟似乎具有相同的磁碟 ID!因此,我可以使用 sda 和 sdb 創建池,但在重新啟動後不穩定,池會失去。為了展示這種情況,我將設備屬性轉儲到文件中並製作了 fiff。

正如您在下面看到的,磁碟 by-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

最好的方法是:

  • 確定驅動器的製造商和序列號
  • 在每個驅動器上創建 GPT 分區表(或“方案”)
  • 在每個驅動器上創建一個 ZFS 數據分區,並以反映該驅動器的製造商(可能是縮寫)和序列號的方式命名分區

例如,如果您想創建兩個 Western Digital 驅動器的鏡像,序列號WD-WMC1S5694795WD-WMC1S5688675,然後在每個驅動器上創建相同大小的 GPT 分區,並分別將分區標記為data-WD-WMC1S5694795data-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

現在,當其中一個驅動器發生故障時,您將確切知道要更換哪一個,因為人類可讀的序列號出現在驅動器的外部。

引用自:https://unix.stackexchange.com/questions/679774