在 Linux 虛擬機中掛載多塊 SCSI 磁碟時,重啟後設備名稱(如 /dev/sdb、/dev/sdc)可能發生漂移,導致與預期盤符不符,嚴重時會影響 Oracle RAC 等業務。本文介紹如何通過 udev 規則綁定固定設備路徑,確保設備 ID 與盤符永久對應。
用戶在虛擬機配置中指定了 SCSI 設備 ID 與盤符的對應關係,但重啟後虛擬機內部識別的順序發生變化,導致原本的 /dev/sdb 變成 /dev/sdc,進而使數據庫無法正常掛載 ASM 磁碟組。


核心做法是針對每塊物理磁碟的唯一標識符(WWID,即 scsi_id 輸出的字串)編寫 udev 規則,創建固定的符號鏈接或 raw 設備,供上層應用(如 Oracle ASM)使用。
/sbin/scsi_id -g -u -d /dev/sdb
# 輸出示例:360022a11000e085d0de717f500000003
/etc/udev/rules.d/99-oracle-asmdevices.rules):
ACTION=="add", KERNEL=="sd*", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$name", \
RESULT=="360022a11000e085d0de717f500000003", SYMLINK+="asm-disk1", OWNER="grid", GROUP="oinstall", MODE="0660"
ACTION=="add", KERNEL=="sd*", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$name", \
RESULT=="360022a11000e085d0de7372c0000002e", SYMLINK+="asm-disk2", OWNER="grid", GROUP="oinstall", MODE="0660"
說明:SYMLINK+="asm-disk1" 會在 /dev/ 下創建固定鏈接 /dev/asm-disk1,無論內核分配何種 sd* 名稱,該鏈接始終指向正確磁碟。
udevadm control --reload-rules
udevadm trigger
ls -l /dev/asm-disk*
在 ASM 磁碟組創建或 ASM_DISKSTRING 參數中指定 /dev/asm-disk*,即可避免設備名漂移帶來的故障。
/dev/sdb1),規則需匹配分區屬性(KERNEL=="sd*1")並提取分區 UUID。通過 udev 綁定 WWID,可從根源解決 Linux 虛擬機 SCSI 設備名漂移問題,保障數據庫存儲層的穩定性。