Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 虛擬機 SCSI 設備 ID 與盤符不匹配的解決方案

編輯:關於 Linux

在 Linux 虛擬機中掛載多塊 SCSI 磁碟時,重啟後設備名稱(如 /dev/sdb、/dev/sdc)可能發生漂移,導致與預期盤符不符,嚴重時會影響 Oracle RAC 等業務。本文介紹如何通過 udev 規則綁定固定設備路徑,確保設備 ID 與盤符永久對應。

問題現象

用戶在虛擬機配置中指定了 SCSI 設備 ID 與盤符的對應關係,但重啟後虛擬機內部識別的順序發生變化,導致原本的 /dev/sdb 變成 /dev/sdc,進而使數據庫無法正常掛載 ASM 磁碟組。

用戶配置的設備 ID 與盤符對應

重啟後設備 ID 與盤符不一致

解決思路:使用 udev 規則綁定 SCSI WWID

核心做法是針對每塊物理磁碟的唯一標識符(WWID,即 scsi_id 輸出的字串)編寫 udev 規則,創建固定的符號鏈接或 raw 設備,供上層應用(如 Oracle ASM)使用。

操作步驟(以 RedHat 6.5 為例)

  1. 獲取磁碟 WWID:
    /sbin/scsi_id -g -u -d /dev/sdb
    # 輸出示例:360022a11000e085d0de717f500000003
    
  2. 編寫 udev 規則文件(/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* 名稱,該鏈接始終指向正確磁碟。

  3. 重載規則並驗證:
    udevadm control --reload-rules
    udevadm trigger
    ls -l /dev/asm-disk*
    
  4. 配置 Oracle ASM 使用固定路徑:

    在 ASM 磁碟組創建或 ASM_DISKSTRING 參數中指定 /dev/asm-disk*,即可避免設備名漂移帶來的故障。

適用場景與注意事項

  • 適用於直接使用整塊 SCSI 磁碟(無分區)的場景,如 Oracle RAC ASM 磁碟、原始設備映射。
  • 若磁碟已分區(如 /dev/sdb1),規則需匹配分區屬性(KERNEL=="sd*1")並提取分區 UUID。
  • 生產環境建議先在測試機驗證,確保規則語法正確、權限符合應用要求。

通過 udev 綁定 WWID,可從根源解決 Linux 虛擬機 SCSI 設備名漂移問題,保障數據庫存儲層的穩定性。

Copyright © Windows教程網 All Rights Reserved