这段时间在客户vmware上面安装了一套oracle11g_rac,是基于redhat6.4系统的,之前做redhat5版本的时候,都是有现成的asmlib工具可用,但红帽6起初是没有对应版本asmlib,到后来虽然oracle和redhat合作,推出了RHEL6版本的asmlib,但是这货竟然要注册RHN下载,简直不能忍,再加上我本人也是属于UDEV派系,于是就决定使用udev来绑定磁盘给asm使用,起初,我写的UDEV规则文件是采用取每个磁盘的scsi_id,然后绑定成指定的盘符名字,但是后来由于客户使用的是vmware虚拟机,默认磁盘是没有scsi_id返回值的,那不得不考虑使用别的方法

第一种是从VMWARE层面去解决,用文本编辑器修改vmx文件,在vmx文件中任意位置(通常在最后)添加如下行:

disk.EnableUUID = "TRUE"


这种方法有坏处,就是每次修改完磁盘或者网卡信息以后,参数又会变成默认的false,每次都得重新修改,这不符合实际的生产环境要求。

另外一种方法就是,我们的udev采用别的取值方法来绑定磁盘,比如


root@udev ~]#  udevinfo -a -p /sys/block/sdc/sdc1

Udevinfo starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

looking at device '/block/sdc/sdc1':

KERNEL=="sdc1"
SUBSYSTEM=="block"
SYSFS{dev}=="8:33"
SYSFS{partition}=="1"
SYSFS{start}=="63"

SYSFS{size}=="16771797"

我们用上面标红的三个值来取代scsi_id,所以我的规则文件可以写成下面这样

more 99-oracle-asmdevices.rules
KERNEL=="sdc1", SUBSYSTEM=="block", SYSFS{size}=="16771797", SYSFS{start}=="63", NAME="asmdisk1-crs", OWNER="grid", GROUP="asmadmin", MODE="0660"

主题思路就是通过udevinfo这个命令去找其他唯一的值来代替