• 使用UDEV SCSI规则在Oracle Linux上配置ASM


    对于使用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规则定义如下:

    #OL5
    KERNEL=="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"
     
    #OL6
    KERNEL=="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"
     
    #OL7
    KERNEL=="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:

    ##OL5
    /sbin/scsi_id -g -u -s /block/sdb
    SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_
    /sbin/scsi_id -g -u -s /block/sdc
    SATA_VBOX_HARDDISK_VB46dec7e0-192e8000_
    /sbin/scsi_id -g -u -s /block/sdd
    SATA_VBOX_HARDDISK_VBce8c63bb-ac67a172_
    /sbin/scsi_id -g -u -s /block/sde
    SATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_
    
    ##OL6
    /sbin/scsi_id -g -u -d /dev/sdb
    SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_
    /sbin/scsi_id -g -u -d /dev/sdc
    SATA_VBOX_HARDDISK_VB46dec7e0-192e8000_
    /sbin/scsi_id -g -u -d /dev/sdd
    SATA_VBOX_HARDDISK_VBce8c63bb-ac67a172_
    /sbin/scsi_id -g -u -d /dev/sde
    SATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_
    
    ##OL7:
    /usr/lib/udev/scsi_id -g -u -d /dev/sdb
    SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_
    /usr/lib/udev/scsi_id -g -u -d /dev/sdc
    SATA_VBOX_HARDDISK_VB46dec7e0-192e8000_
    /usr/lib/udev/scsi_id -g -u -d /dev/sdd
    SATA_VBOX_HARDDISK_VBce8c63bb-ac67a172_
    /usr/lib/udev/scsi_id -g -u -d /dev/sde
    SATA_VBOX_HARDDISK_VB7437a3b7-95b199cd_
    

    使用vi /etc/udev/rules.d/99-oracle-asmdevices.rules命令,创建udev规则文件:

    ##OL5
    KERNEL=="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"
     
    ##OL6
    KERNEL=="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"
     
    ##OL7
    KERNEL=="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
    

    测试规则:

    ##OL5
    udevtest /block/sdb/sdb1
    udevtest /block/sdc/sdc1
    udevtest /block/sdd/sdd1
    udevtest /block/sde/sde1
     
    ##OL6 and OL7
    udevadm test /block/sdb/sdb1
    udevadm test /block/sdc/sdc1
    udevadm test /block/sdd/sdd1
    udevadm test /block/sde/sde1
    

    重新载入规则文件及启动udev服务:

    ##OL5
    /sbin/udevcontrol reload_rules
     
    ##OL6 and OL7
    udevadm control --reload-rules
     
    ##OL5 and OL6,Not needed for OL7
    /sbin/start_udev
    

    检查磁盘的所属关系和权限:

    cd /dev
    ls -al asm-disk*
    brw-rw---- 1 oracle dba 8, 17 Apr  8 22:47 asm-disk1
    brw-rw---- 1 oracle dba 8, 33 Apr  8 22:47 asm-disk2
    brw-rw---- 1 oracle dba 8, 49 Apr  8 22:47 asm-disk3
    brw-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规则文件的脚本: 

    for i in b c d e f g;
    do
    echo "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.rules
    done
    

      

  • 相关阅读:
    AMD and CMD are dead之KMD规范
    AMD and CMD are dead之js模块化黑魔法
    码农干货系列【20】--add gtTime to Promise.js
    ReactNative: 使用选择器组件PickerIOS组件
    ReactNative: 使用选择器组件Picker组件
    ReactNative: 使用模态组件Modal组件
    ReactNative: 使用列表组件ListView组件
    ReactNative: 使用键盘避免视图KeyboardAvoidingView组件实现键盘自适应
    ReactNative: 使用图片存储组件ImageStore组件
    ReactNative: 使用图片裁剪组件ImageEditor组件
  • 原文地址:https://www.cnblogs.com/sunmengbbm/p/5651984.html
Copyright © 2020-2023  润新知