How to use udev for Oracle ASM in Oracle Linux 6

on

大部分在网上可以找到的文档都是在RHEL5或者OEL5中设置udev,udev对于Linux而言最大的作用是防止操作系统重新启动以后,作为ASM磁盘使用的盘符发生变化。
比如说Tim Hall的文章:UDEV SCSI Rules Configuration for ASM in Oracle Linux 5
比如说Maclean的文章:利用UDEV服务解决RAC ASM存储设备名

但是在OEL6或者RHEL6中,这一切都有所变化。

主要的变化是:
1. scsi_id的命令语法发生了变化,scsi_id -g -u -s这样的命令不再有效。
2. udevtest命令已经没有了,整合到了udevadm中。

可以参考Redhat的官方文档(这个文档中本身有一些错误,在udev rules中漏了–device=,正确的方法参看下面的第3步):
Configuring persistent storage in Red Hat Enterprise Linux 6

步骤如下:
1. 编辑/etc/scsi_id.config文件,如果该文件不存在,则创建该文件,添加如下行:

options=--whitelisted --replace-whitespace

备注:在我的测试中,此步骤可以省略。

2. 获取需要绑定为ASM Disk的磁盘uuid,比如我们要使用/dev/sdc和/dev/sdd作为ASM磁盘,那么:

# scsi_id --whitelisted --replace-whitespace --device=/dev/sdc
1ATA_VBOX_HARDDISK_VB36a9e548-1838194a
# scsi_id --whitelisted --replace-whitespace --device=/dev/sdd
1ATA_VBOX_HARDDISK_VB9808fc7f-cdf35030

3. 编写udev rules文件,PROGRAM中写scsi_id命令,RESULT中写上面命令中返回的uuid,这跟OEL5中没什么区别,只是scsi_id命令的语法发生变化了。

vi /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/name", RESULT=="1ATA_VBOX_HARDDISK_VB36a9e548-1838194a", NAME="asm-disk1",  OWNER="grid",  GROUP="dba", MODE="0660"
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/name", RESULT=="1ATA_VBOX_HARDDISK_VB9808fc7f-cdf35030", NAME="asm-disk2",  OWNER="grid",  GROUP="dba", MODE="0660"

4. 用udevadm进行测试,注意udevadm命令不接受/dev/sdc这样的挂载设备名,必须是使用/sys/block/sdc这样的原始设备名。

udevadm test /sys/block/sdc
udevadm info --query=all --path=/sys/block/sdc
udevadm info --query=all --name=asm-disk1

在显示中,有类似如下输出,表示测试正确,/dev/sdc设备在udev启动以后将会绑定为/dev/asm-disk1:

udevadm_test: UDEV_LOG=6
udevadm_test: DEVPATH=/devices/pci0000:00/0000:00:0d.0/host4/target4:0:0/4:0:0:0/block/sdc
udevadm_test: MAJOR=8
udevadm_test: MINOR=32
udevadm_test: DEVNAME=/dev/asm-disk1
udevadm_test: DEVTYPE=disk
udevadm_test: ACTION=add
udevadm_test: SUBSYSTEM=block

5. 启动udev

# /sbin/start_udev

6. 检查设备是否正确绑定

# ls -l /dev/asm*
brw-rw---- 1 grid dba 8, 32 Oct 26 21:24 /dev/asm-disk1
brw-rw---- 1 grid dba 8, 48 Oct 26 21:17 /dev/asm-disk2

19 Comments Add yours

  1. feng says:

    大师,请教个问题
    # scsi_id -g -s /dev/sd*

    没有结果,可能哪里有问题呢。

    环境:RHEL 5.5 32bit

  2. feng says:

    补充下: 系统是vmware下的

  3. feng says:

    不好意思,看到您的《《VMware and scsi_id》》https://www.dbform.com/html/2011/1767.html这篇文章了,十分感谢

  4. lerry says:

    现在oracle不发版redhat 6的asmlib包,该怎样在这系统上配置ASM呢

  5. Kamus says:

    @ lerry
    自然是udev啊

  6. hyzqyt says:

    scsi_id –whitelisted –replace-whitespace –device=/dev/sda 和scsi_id –whitelisted –replace-whitespace –device=/dev/sda3的数值是一样的,如何在udev 下使用分区作为ASM的磁盘,实验了几次都不成功。

  7. Kamus says:

    @hyzqyt
    KERNEL==”sd*1″ …
    KERNEL==”sd*3″ …
    这样的方式来区分多个分区,scsi_id可以填一样的。

  8. 不了峰 says:

    请教:
    如果是linux下使用红帽的多路径配置存储后.
    假设在/dev/sdb 与 /dev/sdc 其实就是对应存储的一个lun,即scsi_id一致,

    那么我在写udev的rule时,是要

    KERNEL==”sd
    还是写多路径对应出来的如dm-
    KERNEL==”dm-

    ?

    谢谢 !

  9. dzq0371 says:

    我也遇到了“不了峰”的问题,rhel6.1 oracle 11g r2 RAC 多路径,怎么配置?很急呀,求大师给说一下吧。谢谢了。

  10. 1P says:

    linux rhel 6 ,oracle 11g RAC的时候 asm磁盘管理 分区呢还是不分区呢(再做udev)
    比如用/dev/sdb 还是用/dev/sdb1呢
    官方有推荐吗,我看官网上只提到整块磁盘都用做asm磁盘

  11. Kamus says:

    @不了峰 @dzq0371
    写多路径对应出来的device前缀。

  12. Kamus says:

    @1p
    不需要分区

Leave a Reply

Your email address will not be published. Required fields are marked *