一般情況下Linux虛擬機中,設備id都是映射磁盤的盤符,所以設備id和盤符是相一致的。但是用戶在查看Linux設備id的時候卻發現Linux虛擬機中設備id與盤符不相符,這個時候該怎麼辦呢?
當用戶掛載多個scsi磁盤時,重啟Linux虛擬機後虛擬機內部磁盤映射和用戶配置的不一致。如圖所示,用戶配置的虛擬機scsi設備id與盤符對應關系。
當虛擬機重啟以後,虛擬機的scsi設備id與盤符的對應關系與用戶配置的不一致。如下圖所示虛擬機的scsi設備id與盤符不一致:
在這種情況下,Oracle RAC中所使用的盤符對應的設備發生變化時,會對業務造成一定影響。
解決辦法:
使用虛擬機scsi設備時需要指定scsi設備id,此解決方法主要適用於使用整個scsi磁盤,不在虛擬機內部對scsi磁盤進行分區的情況。環境:RedHat 6.5 64位操作系統,舉例:/etc/udev/rules.d/60-raw.rules配置文件。
ACTION==“add”, KERNEL==“sd*”, PROGRAM==“/sbin/scsi_id -g -u -d /dev/$name”,
RESULT==“360022a11000e085d0de717f500000003”, RUN+=“/bin/raw /dev/raw/raw1 %N”
ACTION==“add”, KERNEL==“sd*”, PROGRAM==“/sbin/scsi_id -g -u -d /dev/$name”,
RESULT==“360022a11000e085d0de7372c0000002e”, RUN+=“/bin/raw /dev/raw/raw2 %N”
KERNEL==“raw1”, OWNER=“grid”, GROUP=“oinstall”, MODE=“777”
KERNEL==“raw2”, OWNER=“grid”, GROUP=“oinstall”, MODE=“777”
我們可以通過/sbin/scsi_id -g -u -d /dev/$name,來獲取配置中的RESULT。例如:
當你需要使用/dev/sda作為RAC設備,可以執行:
#/sbin/scsi_id -g -u -d /dev/sda
得到的結果是:
#360022a11000e085d0de717f500000003 \\配置中的RESULTRedhat 6.5 64位操作系統,舉例:/etc/udev/rules.d/60-raw.rules配置文件。
ACTION==“add”, KERNEL==“sd*”, PROGRAM==“/sbin/scsi_id -g -u -s %p”,
RESULT==“360022a11000be24a0004aeee0000000a”, RUN+=“/bin/raw /dev/raw/raw1 %N”
KERNEL==“raw1”, OWNER=“grid”, GROUP=“oinstall”, MODE=“777”
通過在PROGRAM中指定的/sbin/scsi_id -g -u -s %p,來獲取配置中的RESULT。例如:
如果需要使用/dev/sda作為RAC設備,可以執行:
#/sbin/scsi_id -g -u -s /block/sda
得到的結果是:
#360022a11000be24a0004aeee0000000a \\配置中的RESULT
原因分析:
Oracle RAC在安裝過程中配置scsi磁盤時,傳統方式是指向具體的盤符,如下/etc/udev/rules.d/60-raw.rules配置文件的內容,其中KERNEL字段代表指向的具體盤符。
ACTION==“add”,KERNEL==“sdb”,RUN+=“/bin/raw /dev/raw/raw1 %N”
ACTION==“add”,KERNEL==“sdc”,RUN+=“/bin/raw /dev/raw/raw2 %N”
ACTION==“add”,KERNEL==“sdd”,RUN+=“/bin/raw /dev/raw/raw3 %N”
KERNEL==“raw1”, OWNER=“grid”, GROUP=“oinstall”, MODE=“777”
KERNEL==“raw2”, OWNER=“grid”, GROUP=“oinstall”, MODE=“777”
KERNEL==“raw3”, OWNER=“grid”, GROUP=“oinstall”, MODE=“777”
物理設備映射中呈現給虛擬機的設備id與盤符(如sda\sdb)的對應關系在虛擬機重啟後有可能發生變化,原因如下:
Linux生成sda、sdb、sdc的規則是由Linux內核決定的。Linux內核對於這種磁盤設備的映射基本上取決於三個順序,一是磁盤驅動程序的加載;二是主機PCI插槽的監測;三是磁盤本身的監測,先來是sda,以此類推。
物理機在設備熱插拔後重啟,也會面臨盤符的變化問題。比如啟動前是sda,sdb,sdc,把sdb設備拔掉後重啟,呈現的設備號是sda,sdb(原來的sdc)。
以上就是Linux虛擬機中設備id與盤符不相符的解決方法了,如果設備id與盤符不相符,虛擬機運行的過程中就會出現一些故障,所以要盡快排除這個問題。