oracle+12+c+udev+配置,在oracle rac中配置udev绑定磁盘规则的方法

本文介绍如何在Oracle 11g中使用udev配置ASM磁盘,包括识别磁盘、设置udev规则、测试规则等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了使Oracle自动存储管理器(ASM)使用磁盘,它需要能够一致地标识设备,并使它们具有正确的所有权和权限。 在Linux中,您可以使用ASMLib来管理这些任务,但是它被视为增加了一层复杂性,并且从未真正普及过。 相反,许多人使用Linux设备管理器“ udev”来执行这些任务。 本文简要概述了针对Oracle 11g中与ASM一起使用的磁盘设置udev规则。 这些示例均使用Oracle Linux 5、6、7和8完成,因此它们将与RHEL和CentOS 5、6、7和8保持一致。

背景

识别磁盘(/sbin/scsi_id)

使SCSI设备信任

创建UDEV规则文件

加载更新块设备分区(/sbin/partprobe)

测试规则(udevtest)

重启UDEV服务

检查所有权和权限

背景

本质上,udev所做的是将“ /etc/udev/rules.d”目录中的文件中定义的规则应用于“ / dev”目录中列出的设备节点。 可以通过多种方式定义规则,但是我们需要做的是识别设备并说出我们希望udev对其进行处理。

在这种情况下,我知道我所有的磁盘设备都命名为“ / dev / sd?1”,其中“?” 代表a-d的字母,因此我可以使用以下规则参数来识别需要绑定的设备。

KERNEL=="sd?1", BUS=="scsi"

我想将每个特定的设备绑定到一个别名,因此无论Linux为它分配的设备名称是什么,总是以相同的方式标识它。 因此,我需要能够测试与先前模式匹配的每个设备,以查看它是否是我感兴趣的磁盘。每个磁盘都有唯一的SCSI ID,因此我可以对规则进行测试,告诉它如何执行 测试,结果应返回正匹配。

以下规则参数说明了如何测试设备以及在Oracle Linux 5中构成匹配的结果。

PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_"

scsi_id命令在Oracle Linux 6中的工作方式略有不同,因此以下测试可以更好地工作。

PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_"

scsi_id命令在Oracle Linux 7和8中位于其他位置,因此以下测试是正确的。

PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_"

一旦确定了感兴趣的特定设备,我们需要指出应该对其执行什么操作。 以下参数指定设备的别名,所有权和权限。

NAME="asm-disk1", OWNER="oracle", GROUP="dba", MODE="0660"

因此,每个磁盘的整个规则在Oracle Linux 5中将类似于以下内容。

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"

在Oracle Linux 6中这样设置:

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"

在Oracle Linux 7和8中这样设置:

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"

这意味着指向磁盘上具有SCSI ID为“ SATAVBOXHARDDISKVBd306dbe0-df3367e3”的磁盘上的分区“ sd?1”的设备将始终称为“ /dev/asm-disk1”,而不考虑字母“?”。 Linux会在发现设备时进行分配。 此外,设备将具有对ASM的正确所有权和权限。

如果您不想编写特定于设备的规则,则可以使用许多通配符和匹配模式。

现在,我们大致了解了我们要实现的目标,我们将介绍设置磁盘以供ASM使用的必要步骤。

识别磁盘(/sbin/scsi_id)

对于绑定asm的磁盘不建议直接使用未分区磁盘,即使你的asm磁盘和物理磁盘对应关系是一比一,建议也对磁盘进行分区操作,一个磁盘分一个区。

我们将编写特定于设备的规则,因此我们需要能够一致地识别每个设备,而与Linux发现设备的顺序无关。 为此,我们将为每个磁盘(而不是分区)使用SCSI ID,这是使用scsi_id命令获得的。 “ -s”选项使路径相对于“ /sys”目录。 对于Oracle Linux 5,使用以下命令。

# /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_

“ -s”在Oracle Linux 6中不可用,因此您必须使用以下语法。

# /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_

在Oracle Linux 7和8中,scsi_id命令的位置已更改,因此您必须使用以下语法。

# /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_

#

使SCSI设备受信任

将以下内容添加到“ /etc/scsi_id.config”文件中,以将SCSI设备配置为受信任。 创建文件(如果尚不存在)。

options=-g

创建UDEV规则文件

创建“ /etc/udev/rules.d/99-oracle-asmdevices.rules”文件。

# vi /etc/udev/rules.d/99-oracle-asmdevices.rules

该文件应包含针对Oracle Linux 5的以下行。PROGRAM参数必须与您用来检索SCSI ID的命令匹配,而RESULT参数必须与从磁盘返回的值匹配。

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"

Oracle Linux 6如下设置:

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"

Oracle Linux 7和8如下设置:

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)

加载更新的块设备分区表。

# #OL5, OL6 and OL77

# /sbin/partprobe /dev/sdb1

# /sbin/partprobe /dev/sdc1

# /sbin/partprobe /dev/sdd1

# /sbin/partprobe /dev/sde1

# #OL8

/sbin/partx -u /dev/sbc1

/sbin/partx -u /dev/sdc1

/sbin/partx -u /dev/sdd1

/sbin/partx -u /dev/sde1

测试规则(udevtest)

测试规则是否按预期工作。

# #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

第一个磁盘的输出应如下所示。

# udevtest /block/sdb/sdb1

main: looking at device '/block/sdb/sdb1' from subsystem 'block'

udev_rules_get_name: add symlink 'disk/by-id/scsi-SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3-part1'

udev_rules_get_name: add symlink 'disk/by-path/pci-0000:00:0d.0-scsi-1:0:0:0-part1'

run_program: '/lib/udev/vol_id --export /dev/.tmp-8-17'

run_program: '/lib/udev/vol_id' returned with status 4

run_program: '/sbin/scsi_id -g -u -s /block/sdb/sdb1'

run_program: '/sbin/scsi_id' (stdout) 'SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_'

run_program: '/sbin/scsi_id' returned with status 0

udev_rules_get_name: rule applied, 'sdb1' becomes 'asm-disk1'

udev_device_event: device '/block/sdb/sdb1' already in database, validate currently present symlinks

udev_node_add: creating device node '/dev/asm-disk1', major = '8', minor = '17', mode = '0660', uid = '1100', gid = '1200'

udev_node_add: creating symlink '/dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3-part1' to '../../asm-disk1'

udev_node_add: creating symlink '/dev/disk/by-path/pci-0000:00:0d.0-scsi-1:0:0:0-part1' to '../../asm-disk1'

main: run: 'socket:/org/kernel/dm/multipath_event'

main: run: 'socket:/org/kernel/udev/monitor'

main: run: '/lib/udev/udev_run_devd'

main: run: 'socket:/org/freedesktop/hal/udev_event'

main: run: '/sbin/pam_console_apply /dev/asm-disk1 /dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3-part1 /dev/disk/by-path/pci-0000:00:0d.0-scsi-1:0:0:0-part1'

#

重启UDEV服务

重新启动UDEV服务。

# #OL5

# /sbin/udevcontrol reload_rules

# #OL6, OL7 and OL8

# /sbinudevadm control --reload-rules

# #OL5 and OL6 : Not needed for OL7 and OL8

# /sbin/start_udev

检查所有权和权限

检查磁盘现在是否具有“ asm-disk ”别名以及正确的所有权和权限。

# 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

#

因此,可以将ASM实例中的ASM_DISKSTRING初始化参数设置为'/dev/asm-disk*'来标识ASM磁盘。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值