最近收到个需求,给一套两节点11g rac进行asm磁盘扩容,本以为很简单的操作,但是在做udev绑定的时候,发现不是平常用的方法,而是使用ATTR{size}的方法来绑定的。下面记录一下过程。
一、udev规则对比
lsblk可以看出新划分的磁盘,也找出了scsi_id,查看udev规则文件的时候,发现用的并不是scsi_id。
[root@xxxdb01 rules.d]# cat 99-oracle-asmdevices.rules
KERNEL=="sd*", SUBSYSTEM=="block", ATTR{size}=="421527552",ATTR{capability}=="52", NAME="asmdisk1-data",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="sd*", SUBSYSTEM=="block", ATTR{size}=="2097152",ATTR{capability}=="52", NAME="asmdisk1-crs",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="sd*", SUBSYSTEM=="block", ATTR{size}=="2306866",ATTR{capability}=="52", NAME="asmdisk2-crs",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="sd*", SUBSYSTEM=="block", ATTR{size}=="2516582",ATTR{capability}=="52", NAME="asmdisk3-crs",OWNER="grid",GROUP="asmadmin",MODE="0660"
通过查询发现,该方法是使用磁盘大小的方式来绑定的,并不是常规的绑定规则。我们通常使用的udev绑定规则,如下:
[root@xxxx rules.d]# cat 99-oracle-asmdevices.rules KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c297900fb1bf9ac2d0726bf6cba0", NAME="asm-diskb", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c29d8c2ade846e42c21d30e3fe40", NAME="asm-diskc", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c2935c5a2cc4d413478a92f4c095", NAME="asm-diskd", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c29b03890cb049dfa63e1be4e663", NAME="asm-diske", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c294870e50d9370cfac4f041d9d3", NAME="asm-diskf", OWNER="grid", GROUP="asmadmin", MODE="0660"
可以明显的看到,我们通常使用的方法是通过磁盘的scsi_id来做绑定的。 看看常用的udev各个参数的含义: 键 含义 ACTION 一个时间活动的名字,比如add,当设备增加的时候 KERNEL 在内核里看到的设备名字,比如sd*表示任意SCSI磁盘设备 DEVPATH 内核设备录进,比如/devices/* SUBSYSTEM 子系统名字,比如sound,net BUS 总线的名字,比如IDE,USB DRIVER 设备驱动的名字,比如ide-cdrom ID 独立于内核名字的设备名字 SYSFS{ value} sysfs属性值,他可以表示任意 ENV{ key} 环境变量,可以表示任意 PROGRAM 可执行的外部程序,如果程序返回0值,该键则认为为真(true) RESULT 上一个PROGRAM调用返回的标准输出。 NAME 根据这个规则创建的设备文件的文件名。注意:仅仅第一行的NAME描述是有效的,后面的均忽略。 如果你想使用使用两个以上的名字来访问一个设备的话,可以考虑SYMLINK键。 SYMLINK 根据规则创建的字符连接名 OWNER 设备文件的属组 GROUP 设备文件所在的组。 MODE 设备文件的权限,采用8进制 RUN 为设备而执行的程序列表 LABEL 在配置文件里为内部控制而采用的名字标签(下下面的GOTO服务) GOTO 跳到匹配的规则(通过LABEL来标识),有点类似程序语言中的GOTO IMPORT{ type} 导入一个文件或者一个程序执行后而生成的规则集到当前文件 WAIT_FOR_SYSFS 等待一个特定的设备文件的创建。主要是用作时序和依赖问题。 PTIONS 特定的选项: last_rule 对这类设备终端规则执行; ignore_device 忽略当前规则; ignore_remove 忽略接下来的并移走请求。 all_partitions 为所有的磁盘分区创建设备文件。 ATTR{文件} 匹配设备在sysfs中的属性值。属性值中的尾部空白会被忽略,除非指定的值自身就包含尾部空白。 [译者注]大括号中的"文件"是指设备路径(devpath)下的文件。 例如, 对于 /dev/sda1 来说,ATTR{size} 的含义其实是指 /sys/block/sda/sda1/size 文件的内容 ATTRS{文件} 匹配设备及其所有父设备在sysfs中的属性值。 如果指定了多个 ATTRS 匹配, 那么必须在同一个设备上全部匹配成功,才算最终匹配成功。属性值中的尾部空白会被忽略,除非指定的值自身就包含尾部空白。 udev绑定的原理是:只要给出的规则能够唯一识别出磁盘,则可以绑定成功。设备上使用sysfs信息来唯一标识一个设备,这些信息最好通过udevinfo命令来获取。该次绑定的规则是使用ATTR{size}=="421527552",ATTR{capability}=="52"这个规则来绑定的,其实也可以使用别的能给唯一标识这个设备的规则来绑定。明白了原理后,使用常规的绑定流程来绑定。
二、查看设备在内核中的属性
使用ATTR{size},ATTR{capability}的规则来绑定,首先来查看他们的信息,来做唯一识别。命令如下: udevadm info -a -p /sys/block/sdg详细内容如下:
[root@xxxdb01 rules.d]# udevadm info -a -p /sys/block/sdg
Udevadm info 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 '/devices/pci0000:00/0000:00:17.0/0000:13:00.0/host3/target3:0:4/3:0:4:0/block/sdg':
KERNEL=="sdg"
SUBSYSTEM=="block"
DRIVER==""
ATTR{range}=="16"
ATTR{ext_range}=="256"
ATTR{removable}=="0"
ATTR{ro}=="0"
ATTR{size}=="423624704"
ATTR{alignment_offset}=="0"
ATTR{discard_alignment}=="0"
ATTR{capability}=="52"
ATTR{stat}==" 174 13 1496 52 0 0 0 0 0 52 52"
ATTR{inflight}==" 0 0"
looking at parent device '/devices/pci0000:00/0000:00:17.0/0000:13:00.0/host3/target3:0:4/3:0:4:0':
KERNELS=="3:0:4:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{device_blocked}=="0"
ATTRS{type}=="0"
ATTRS{scsi_level}=="3"
ATTRS{vendor}=="VMware "
ATTRS{model}=="Virtual disk "
ATTRS{rev}=="1.0 "
ATTRS{state}=="running"
ATTRS{timeout}=="180"
ATTRS{eh_timeout}=="10"
ATTRS{iocounterbits}=="32"
ATTRS{iorequest_cnt}=="0xc3"
ATTRS{iodone_cnt}=="0xc3"
ATTRS{ioerr_cnt}=="0x3"
ATTRS{modalias}=="scsi:t-0x00"
ATTRS{evt_media_change}=="0"
ATTRS{dh_state}=="detached"
ATTRS{queue_depth}=="64"
ATTRS{queue_type}=="none"
looking at parent device '/devices/pci0000:00/0000:00:17.0/0000:13:00.0/host3/target3:0:4':
KERNELS=="target3:0:4"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:17.0/0000:13:00.0/host3':
KERNELS=="host3"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:17.0/0000:13:00.0':
KERNELS=="0000:13:00.0"
SUBSYSTEMS=="pci"
DRIVERS=="vmw_pvscsi"
ATTRS{vendor}=="0x15ad"
ATTRS{device}=="0x07c0"
ATTRS{subsystem_vendor}=="0x15ad"
ATTRS{subsystem_device}=="0x07c0"
ATTRS{class}=="0x010700"
ATTRS{irq}=="16"
ATTRS{local_cpus}=="00000000,00000000,00000000,000000ff"
ATTRS{local_cpulist}=="0-7"
ATTRS{modalias}=="pci:v000015ADd000007C0sv000015ADsd000007C0bc01sc07i00"
ATTRS{numa_node}=="-1"
ATTRS{enable}=="1"
ATTRS{broken_parity_status}=="0"
ATTRS{msi_bus}==""
ATTRS{label}=="SCSI1"
ATTRS{acpi_index}=="33559296"
looking at parent device '/devices/pci0000:00/0000:00:17.0':
KERNELS=="0000:00:17.0"
SUBSYSTEMS=="pci"
DRIVERS=="pcieport"
ATTRS{vendor}=="0x15ad"
ATTRS{device}=="0x07a0"
ATTRS{subsystem_vendor}=="0x0000"
ATTRS{subsystem_device}=="0x0000"
ATTRS{class}=="0x060400"
ATTRS{irq}=="40"
ATTRS{local_cpus}=="00000000,00000000,00000000,000000ff"
ATTRS{local_cpulist}=="0-7"
ATTRS{modalias}=="pci:v000015ADd000007A0sv00000000sd00000000bc06sc04i00"
ATTRS{numa_node}=="-1"
ATTRS{enable}=="2"
ATTRS{broken_parity_status}=="0"
ATTRS{msi_bus}=="1"
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""
三、绑定
将查询到的信息写入udev规则文件中。
KERNEL=="sd*", SUBSYSTEM=="block", ATTR{size}=="423624704",ATTR{capability}=="52", NAME="asmdisk2-data",OWNER="grid",GROUP="asmadmin",MODE="0660"
使之生效
/sbin/partprobe /dev/sdg ls -ltr /dev/asm*
四、ASM磁盘扩容
绑定后asm里面可以识别到我们要加的磁盘了,进行加盘扩容。
SQL> set lines 300 SQL> col name for a10 SQL> col path for a40 SQL> select GROUP_NUMBER,DISK_NUMBER,name,state,HEADER_STATUS,PATH ,TOTAL_MB/1024,FREE_MB/1024,MOUNT_STATUS from v$asm_disk ; GROUP_NUMBER DISK_NUMBER NAME STATE HEADER_STATU PATH TOTAL_MB/1024 FREE_MB/1024 MOUNT_S ------------ ----------- ---------- -------- ------------ ---------------------------------------- ------------- ------------ ------- 0 0 NORMAL CANDIDATE /dev/asmdisk2-data 0 0 CLOSED 1 0 CRS_0000 NORMAL MEMBER /dev/asmdisk1-crs 1 .708984375 CACHED 1 2 CRS_0002 NORMAL MEMBER /dev/asmdisk3-crs 1.19921875 .888671875 CACHED 2 0 DATA_0000 NORMAL MEMBER /dev/asmdisk1-data 201 2.63671875 CACHED 1 1 CRS_0001 NORMAL MEMBER /dev/asmdisk2-crs 1.09960938 .796875 CACHED SQL> set lines 300 SQL> select name,group_number,state ,TOTAL_MB/1024,FREE_MB/1024 from v$asm_diskgroup ; NAME GROUP_NUMBER STATE TOTAL_MB/1024 FREE_MB/1024 ---------- ------------ ----------- ------------- ------------ CRS 1 MOUNTED 3.29882813 2.39453125 DATA 2 MOUNTED 201 2.63671875 SQL> alter diskgroup DATA add disk '/dev/asmdisk2-data' ; Diskgroup altered. SQL> select GROUP_NUMBER,DISK_NUMBER,name,state,HEADER_STATUS,PATH ,TOTAL_MB/1024,FREE_MB/1024,MOUNT_STATUS from v$asm_disk ; GROUP_NUMBER DISK_NUMBER NAME STATE HEADER_STATU PATH TOTAL_MB/1024 FREE_MB/1024 MOUNT_S ------------ ----------- ---------- -------- ------------ ---------------------------------------- ------------- ------------ ------- 1 0 CRS_0000 NORMAL MEMBER /dev/asmdisk1-crs 1 .708984375 CACHED 1 2 CRS_0002 NORMAL MEMBER /dev/asmdisk3-crs 1.19921875 .888671875 CACHED 2 0 DATA_0000 NORMAL MEMBER /dev/asmdisk1-data 201 2.69921875 CACHED 1 1 CRS_0001 NORMAL MEMBER /dev/asmdisk2-crs 1.09960938 .796875 CACHED 2 1 DATA_0001 NORMAL MEMBER /dev/asmdisk2-data 202 201.93457 CACHED SQL> select name,group_number,state ,TOTAL_MB/1024,FREE_MB/1024 from v$asm_diskgroup ; NAME GROUP_NUMBER STATE TOTAL_MB/1024 FREE_MB/1024 ---------- ------------ ----------- ------------- ------------ CRS 1 MOUNTED 3.29882813 2.39453125 DATA 2 MOUNTED 403 204.633789
参考: https://blog.csdn.net/freenaut/article/details/4202564?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control http://www.jinbuguo.com/systemd/udev.html
