標籤:
對於使用ASM管理的磁碟來說,需要一種能夠用於一致性標識磁碟裝置及其正確的所屬關係和許可權的手段。在Linux系統中,可以使用ASMLib來執行這項任務,但是這樣做的缺點是在作業系統上增加了額外的一層,從而導致了管理的複雜性,使用ASMLib配置ASM的方式現在已經不再流行。
一種替代的解決方案是:使用Linux裝置管理員“udev”來完成這項任務。自2.6核心開始,就可以使用udev協助管理系統中各裝置名稱,udev能動態地在/dev目錄裡產生自訂的、標識性強的裝置檔案或裝置連結。本文概述了如何使用UDEV規則來配置ASM磁碟。
從本質上來說,UDEV是一種對已定義好的規則的應用,這個規則以檔案的形式儲存在“/etc/udev/rules.d”目錄下。規則的定義可以採用多種方式,我們需要做的是確定裝置以及說明希望UDEV用它做什麼。眾所周知,所有的磁碟裝置才採用“/dev/sd?1”的形式命名,所以我們可以使用以下的規則參數來標識裝置:
KERNEL=="sd?1",BUS=="scsi"
為每一個磁碟起一個別名,使其總是以一種一致的方式被標識,而不管Linux為它分配何種裝置名稱。所以在此之前需要進行一項測試,以確定該磁碟是否就是配置ASM所需要的磁碟。測試的原理是:由於每個磁碟都有一個唯一的SCSI ID,可將是否匹配這個ID作為測試規則。下列規則參數解釋了如何進行這種測試匹配:
#OL5中,測試規則如下:PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_"#在OL6中scsi_id命令稍有不同,測試規則如下:PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_"#在OL7中,scsi_id命令被至於不同的路徑下,測試規則如下:PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_"
一旦能夠明確標識指定的磁碟後,我們就可以指示在磁碟上的執行的動作,下列的udev參數為磁碟指定了一個別名、磁碟的所屬關係以及許可權:
NAME="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660"
綜上所述,對於一個磁碟來說,完整的udev規則定義如下:
#OL5KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_", NAME="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660"#OL6KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_", NAME="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660"#OL7KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_", SYMLINK+="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660"
這意味著指向磁碟“sd*1”分區與“SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_”的SCSI ID總是被稱為“/dev/asm-disk1”,不管Linux為“?”分配何種字元。此外,該裝置將有正確的所屬關係和許可權。
接下來需要繼續在剩下的磁碟上(注意是磁碟不是分區)使用scsi_id命令產生SCSI ID:
Oracle Linux 5:
# /sbin/scsi_id -g -u -s /block/sdbSATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_# /sbin/scsi_id -g -u -s /block/sdcSATA_VBOX_HARDDISK_VB46dec7e0-192e8000_# /sbin/scsi_id -g -u -s /block/sddSATA_VBOX_HARDDISK_VBce8c63bb-ac67a172_# /sbin/scsi_id -g -u -s /block/sdeSATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_
Oracle Linux 6:
Oracle Linux 6:# /sbin/scsi_id -g -u -d /dev/sdbSATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_# /sbin/scsi_id -g -u -d /dev/sdcSATA_VBOX_HARDDISK_VB46dec7e0-192e8000_# /sbin/scsi_id -g -u -d /dev/sddSATA_VBOX_HARDDISK_VBce8c63bb-ac67a172_# /sbin/scsi_id -g -u -d /dev/sdeSATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_
OracleLinux 7:
# /usr/lib/udev/scsi_id -g -u -d /dev/sdbSATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_# /usr/lib/udev/scsi_id -g -u -d /dev/sdcSATA_VBOX_HARDDISK_VB46dec7e0-192e8000_# /usr/lib/udev/scsi_id -g -u -d /dev/sddSATA_VBOX_HARDDISK_VBce8c63bb-ac67a172_# /usr/lib/udev/scsi_id -g -u -d /dev/sdeSATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_
使用vi /etc/udev/rules.d/99-oracle-asmdevices.rules命令,建立udev規則檔案:
##OL5KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_", NAME="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660"KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="SATA_VBOX_HARDDISK_VB46dec7e0-192e8000_", NAME="asm-disk2", OWNER="oracle", GROUP="dba", MODE="0660"KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="SATA_VBOX_HARDDISK_VBce8c63bb-ac67a172_", NAME="asm-disk3", OWNER="oracle", GROUP="dba", MODE="0660"KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="SATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_", NAME="asm-disk4", OWNER="oracle", GROUP="dba", MODE="0660"##OL6KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_", NAME="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660"KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VB46dec7e0-192e8000_", NAME="asm-disk2", OWNER="oracle", GROUP="dba", MODE="0660"KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBce8c63bb-ac67a172_", NAME="asm-disk3", OWNER="oracle", GROUP="dba", MODE="0660"KERNEL=="sd?1", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_", NAME="asm-disk4", OWNER="oracle", GROUP="dba", MODE="0660"##OL7KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_", SYMLINK+="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660"KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VB46dec7e0-192e8000_", SYMLINK+="asm-disk2", OWNER="oracle", GROUP="dba", MODE="0660"KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBce8c63bb-ac67a172", SYMLINK+="asm-disk3", OWNER="oracle", GROUP="dba", MODE="0660"KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_", SYMLINK+="asm-disk4", OWNER="oracle", GROUP="dba", MODE="0660"
更新塊裝置的分區(/sbin/partprobe):
/sbin/partprobe /dev/sdb1/sbin/partprobe /dev/sdc1/sbin/partprobe /dev/sdd1/sbin/partprobe /dev/sde1
測試規則:
##OL5udevtest /block/sdb/sdb1udevtest /block/sdc/sdc1udevtest /block/sdd/sdd1udevtest /block/sde/sde1##OL6 and OL7udevadm test /block/sdb/sdb1udevadm test /block/sdc/sdc1udevadm test /block/sdd/sdd1udevadm test /block/sde/sde1
重新載入規則檔案及啟動udev服務:
##OL5/sbin/udevcontrol reload_rules##OL6 and OL7udevadm control --reload-rules##OL5 and OL6,Not needed for OL7/sbin/start_udev
檢查磁碟的所屬關係和許可權:
cd /devls -al asm-disk*brw-rw---- 1 oracle dba 8, 17 Apr 8 22:47 asm-disk1brw-rw---- 1 oracle dba 8, 33 Apr 8 22:47 asm-disk2brw-rw---- 1 oracle dba 8, 49 Apr 8 22:47 asm-disk3brw-rw---- 1 oracle dba 8, 65 Apr 8 22:47 asm-disk4
本文參考:https://oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-oracle-linux#scsi_id
最後附上一個在OL6上快速產生udev規則檔案的指令碼:
#添加記錄到/etc/scsi_id.configecho "options=--whitelisted --replace-whitespace" >> /etc/scsi_id.configfor i in b c d e f g;doecho "KERNEL==\"sd*\", BUS==\"scsi\", PROGRAM==\"/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\", RESULT==\"`/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\", NAME=\"asm-disk$i\", OWNER=\"grid\", GROUP=\"asmadmin\", MODE=\"0660\"" >> /etc/udev/rules.d/99-oracle-asmdevices.rulesdone
使用UDEV SCSI規則在Oracle Linux上配置ASM