如何解决使用udev管理asmdisk执行/sbin/scsi

69次阅读
没有评论

共计 20221 个字符,预计需要花费 51 分钟才能阅读完成。

这篇文章给大家分享的是有关如何解决使用 udev 管理 asmdisk 执行 /sbin/scsi_id 不显示 UUID 的问题的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。

      在搭建 RAC 的时候,使用 udev 方式来创建 ASM 磁盘,执行 /sbin/scsi_id 命令不知道啥原因, 死活获取不到 UUID, 执行结果啥也不显示。

[root@seiang2 ~]# scsi_id -u -g
/dev/sdb

    没有 uuid 貌似没法配置 udev
rules 文件,通过查阅相关资料,通过如下两种方式实现的, 通过 udevinfo(6 版本操作系统 udevadm 取代了 udevinfo)命令获取分区的信息, 可以利用分区中的这 2 项信息 SYSFS{start}== 63 和 SYSFS{size}== 16771797(6 版本变为 ATTR{start}== 4241160 和 ATTR{size}== 2120580)来代替 uuid 唯一标识这个设备;

实验环境:

操作系统:Redhat5.5 
Hostname:seiang2.comsys.com

操作系统:Redhat6.4 
Hostname:test.comsys.com

目录
一、使用 udevinfo/udevadm 获取分区的唯一标识
二、使用裸设备创建 asm 磁盘

关于 Linux 下的 udev 详细介绍:http://blog.itpub.net/31015730/viewspace-2142429/

一、使用 udevinfo/udevadm 获取分区的唯一标识

新增加一块磁盘,并对它进行分区,分区之后通过 udevinfo/udevadm 命令来获取分区的唯一标识;

Redhat5 版本

[root@seiang2
~]# ll /sbin/udev*

-rwxr-xr-x
1 root root  15176 May  5  2009
/sbin/udevcontrol

-rwxr-xr-x
1 root root  61864 May  5  2009
/sbin/udevd

-rwxr-xr-x
1 root root 899928 May  5  2009 /sbin/udevd.static

-rwxr-xr-x
1 root root  23680 May  5  2009
/sbin/udevsettle

-rwxr-xr-x
1 root root  24144 May  5  2009
/sbin/udevtrigger

[root@seiang2
~]# cd
/sys/block/sdb

[root@seiang2
~]# udevinfo -a
-p /sys/block/sdb

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.

rule to match, can be composed by the attributes of the device

the attributes from one single parent device.

  looking at device /block/sdb :

  KERNEL== sdb

  SUBSYSTEM== block

  SYSFS{stat}==   63 
93  1248  19 
0  0  0 
0  0  19 
19

  SYSFS{size}== 10485760

  SYSFS{removable}== 0

  SYSFS{range}== 16

  SYSFS{dev}== 8:16

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host1/target1:0:0/1:0:0:0 :

  ID== 1:0:0:0

  BUS== scsi

  DRIVER== sd

  SYSFS{dh_state}== detached

  SYSFS{ioerr_cnt}== 0x0

  SYSFS{iodone_cnt}== 0x51

  SYSFS{iorequest_cnt}== 0x51

  SYSFS{iocounterbits}== 32

  SYSFS{timeout}== 60

  SYSFS{state}== running

  SYSFS{rev}== 1.0

  SYSFS{model}== VBOX HARDDISK 

  SYSFS{vendor}== ATA 

  SYSFS{scsi_level}== 6

  SYSFS{type}== 0

  SYSFS{queue_type}== simple

  SYSFS{queue_depth}== 31

  SYSFS{device_blocked}== 0

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host1/target1:0:0 :

  ID== target1:0:0

  BUS==

  DRIVER==

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host1 :

  ID== host1

  BUS==

  DRIVER==

  looking at parent device
/devices/pci0000:00/0000:00:0d.0 :

  ID== 0000:00:0d.0

  BUS== pci

  DRIVER== ahci

  SYSFS{broken_parity_status}== 0

  SYSFS{enable}== 1

 
SYSFS{modalias}== pci:v00008086d00002829sv00000000sd00000000bc01sc06i01

 
SYSFS{local_cpus}== 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000

  SYSFS{irq}== 177

  SYSFS{class}== 0x010601

  SYSFS{subsystem_device}== 0x0000

  SYSFS{subsystem_vendor}== 0x0000

  SYSFS{device}== 0x2829

  SYSFS{vendor}== 0x8086

  looking at parent device /devices/pci0000:00 :

  ID== pci0000:00

  BUS==

  DRIVER==

[root@seiang2
~]# fdisk
/dev/sdb

Device
contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building
a new DOS disklabel. Changes will remain in memory only,

until
you decide to write them. After that, of course, the previous

content
won t be recoverable.

Warning:
invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command
(m for help): n

Command
action

  e 
extended

  p 
primary partition (1-4)

p

Partition
number (1-4): 1

First
cylinder (1-652, default 1):

Using
default value 1

Last
cylinder or +size or +sizeM or +sizeK (1-652, default 652): +1G

Command
(m for help): n

Command
action

  e 
extended

  p 
primary partition (1-4)

p

Partition
number (1-4): 2

First
cylinder (124-652, default 124):

Using
default value 124

Last
cylinder or +size or +sizeM or +sizeK (124-652, default 652): +1G

Command
(m for help): n

Command
action

  e 
extended

  p 
primary partition (1-4)

p

Partition
number (1-4): 3

First
cylinder (126-652, default 126):

Using
default value 126

Last
cylinder or +size or +sizeM or +sizeK (126-652, default 652): +1G

Command
(m for help): p

Disk
/dev/sdb: 5368 MB, 5368709120 bytes

heads, 63 sectors/track, 652 cylinders

Units
= cylinders of 16065 * 512 = 8225280 bytes

  Device Boot  Start  End  Blocks 
Id  System

/dev/sdb1  1  123  987966 
83  Linux

/dev/sdb2  124  125  16065 
83  Linux

/dev/sdb3  126  248  987997+ 
83  Linux

Command
(m for help): w

partition table has been altered!

Calling
ioctl() to re-read partition table.

Syncing
disks.

[root@seiang2
~]# ll /dev/sdb*

brw-r—–
1 root disk 8, 16 Jul 20 02:57 /dev/sdb

brw-r—–
1 root disk 8, 17 Jul 20 02:57 /dev/sdb1

brw-r—–
1 root disk 8, 18 Jul 20 02:57 /dev/sdb2

brw-r—–
1 root disk 8, 19 Jul 20 02:57 /dev/sdb3

使用 udevinfo 命令查看详细的分区信息

[root@seiang2
~]# udevinfo -a
-p /sys/block/sdb/sdb1

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.

rule to match, can be composed by the attributes of the device

the attributes from one single parent device.

 looking at device /block/sdb/sdb1 :

  KERNEL== sdb1

  SUBSYSTEM== block

  SYSFS{stat}==   31 
67  392  19 
0  0  0 
0  0  17 
19

  SYSFS{size}== 1975932

  SYSFS{start}== 63

  SYSFS{dev}== 8:17

  looking at parent device /block/sdb :

  ID== sdb

  BUS== block

  DRIVER==

  SYSFS{stat}==   196 
575  3152  94 
1  0  8 
2  0  71 
96

  SYSFS{size}== 10485760

  SYSFS{removable}== 0

 
SYSFS{range}== 16

  SYSFS{dev}== 8:16

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host1/target1:0:0/1:0:0:0 :

  ID== 1:0:0:0

  BUS== scsi

  DRIVER== sd

  SYSFS{dh_state}== detached

  SYSFS{ioerr_cnt}== 0x0

  SYSFS{iodone_cnt}== 0xe1

  SYSFS{iorequest_cnt}== 0xe1

  SYSFS{iocounterbits}== 32

  SYSFS{timeout}== 60

  SYSFS{state}== running

  SYSFS{rev}== 1.0

  SYSFS{model}== VBOX HARDDISK 

  SYSFS{vendor}== ATA 

  SYSFS{scsi_level}== 6

   SYSFS{type}== 0

  SYSFS{queue_type}== simple

  SYSFS{queue_depth}== 31

  SYSFS{device_blocked}== 0

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host1/target1:0:0 :

  ID== target1:0:0

  BUS==

  DRIVER==

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host1 :

  ID== host1

  BUS==

  DRIVER==

  looking at parent device
/devices/pci0000:00/0000:00:0d.0 :

  ID== 0000:00:0d.0

  BUS== pci

  DRIVER== ahci

  SYSFS{broken_parity_status}== 0

  SYSFS{enable}== 1

 
SYSFS{modalias}== pci:v00008086d00002829sv00000000sd00000000bc01sc06i01

 
SYSFS{local_cpus}== 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000

  SYSFS{irq}== 177

  SYSFS{class}== 0x010601

  SYSFS{subsystem_device}== 0x0000

  SYSFS{subsystem_vendor}== 0x0000

  SYSFS{device}== 0x2829

  SYSFS{vendor}== 0x8086

  looking at parent device
/devices/pci0000:00 :

  ID== pci0000:00

  BUS==

  DRIVER==

[root@seiang2
rules.d]# udevinfo -a -p /sys/block/sdb/sdb3/

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.

rule to match, can be composed by the attributes of the device

the attributes from one single parent device.

  looking
at device /block/sdb/sdb3 :

  KERNEL== sdb3

  SUBSYSTEM== block

  SYSFS{stat}==   27 
355  382  31 
0  0  0 
0  0  31 
31

  SYSFS{size}== 1975995

  SYSFS{start}== 2008125

  SYSFS{dev}== 8:19

  looking at parent device /block/sdb :

  ID== sdb

  BUS== block

  DRIVER==

  SYSFS{stat}==   395 
1754  5700  383 
2  0  16 
8  0  242 
391

  SYSFS{size}== 10485760

  SYSFS{removable}== 0

  SYSFS{range}== 16

  SYSFS{dev}== 8:16

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host1/target1:0:0/1:0:0:0 :

  ID== 1:0:0:0

  BUS== scsi

  DRIVER== sd

  SYSFS{dh_state}== detached

  SYSFS{ioerr_cnt}== 0x0

  SYSFS{iodone_cnt}== 0x1b3

  SYSFS{iorequest_cnt}== 0x1b3

  SYSFS{iocounterbits}== 32

  SYSFS{timeout}== 60

  SYSFS{state}== running

  SYSFS{rev}== 1.0

  SYSFS{model}== VBOX HARDDISK 

  SYSFS{vendor}== ATA 

  SYSFS{scsi_level}== 6

  SYSFS{type}== 0

  SYSFS{queue_type}== simple

  SYSFS{queue_depth}== 31

  SYSFS{device_blocked}== 0

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host1/target1:0:0 :

   ID== target1:0:0

  BUS==

  DRIVER==

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host1 :

  ID== host1

  BUS==

  DRIVER==

  looking at parent device
/devices/pci0000:00/0000:00:0d.0 :

  ID== 0000:00:0d.0

  BUS== pci

  DRIVER== ahci

  SYSFS{broken_parity_status}== 0

  SYSFS{enable}== 1

 
SYSFS{modalias}== pci:v00008086d00002829sv00000000sd00000000bc01sc06i01

 
SYSFS{local_cpus}== 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000

  SYSFS{irq}== 177

  SYSFS{class}== 0x010601

  SYSFS{subsystem_device}== 0x0000

  SYSFS{subsystem_vendor}== 0x0000

  SYSFS{device}== 0x2829

  SYSFS{vendor}== 0x8086

  looking at parent device
/devices/pci0000:00 :

  ID== pci0000:00

  BUS==

DRIVER==

编辑 udev 的 rule 文件

[root@seiang2
~]# cd
/etc/udev/rules.d/

[root@seiang2
rules.d]# vim
99-oracle-asmdevices.rules

KERNEL== sdb1 ,
SUBSYSTEM== block , SYSFS{size}== 1975932 , SYSFS{start}== 63 ,
OWNER= grid ,NAME= asmdisk-data1 ,
GROUP= asmadmin , MODE= 0660

KERNEL== sdb3 ,
SUBSYSTEM== block , SYSFS{size}== 1975995 , SYSFS{start}== 2008125 ,
OWNER= grid ,NAME= asmdisk-data2 ,
GROUP= asmadmin , MODE= 0660

编辑 rule 文件之后可以使用 udevtest 测试 udev 对设备的管理, 命名, 链接以及权限的设置情况

[root@seiang2
rules.d]# udevtest
/block/sdb

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

run_program:
/lib/udev/usb_id -x

run_program:
/lib/udev/usb_id returned with status 1

run_program:
/lib/udev/scsi_id -g -x -s /block/sdb -d /dev/.tmp-8-16

run_program:
/lib/udev/scsi_id (stdout) ID_VENDOR=ATA

run_program:
/lib/udev/scsi_id (stdout) ID_MODEL=VBOX_HARDDISK

run_program:
/lib/udev/scsi_id (stdout) ID_REVISION=1.0

run_program:
/lib/udev/scsi_id (stdout) ID_SERIAL=SATA_VBOX_HARDDISK_VBda65d90d-e2055c6a

run_program:
/lib/udev/scsi_id (stdout) ID_TYPE=disk

run_program:
/lib/udev/scsi_id (stdout) ID_BUS=scsi

run_program:
/lib/udev/scsi_id returned with status 0

udev_rules_get_name:
add symlink disk/by-id/scsi-SATA_VBOX_HARDDISK_VBda65d90d-e2055c6a

run_program:
/lib/udev/path_id /block/sdb

run_program:
/lib/udev/path_id (stdout) ID_PATH=pci-0000:00:0d.0-scsi-1:0:0:0

run_program:
/lib/udev/path_id returned with status 0

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

run_program:
/lib/udev/vol_id –export /dev/.tmp-8-16

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

run_program:
/lib/udev/edd_id –export /dev/.tmp-8-16

run_program:
/lib/udev/edd_id (stderr) no kernel EDD support

run_program:
/lib/udev/edd_id returned with status 2

udev_rules_get_name:
no node name set, will use kernel name sdb

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

udev_node_add:
creating device node /dev/sdb , major = 8 , minor = 16 , mode = 0640 , uid
= 0 , gid = 6

udev_node_add:
creating symlink /dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VBda65d90d-e2055c6a
to ../../sdb

udev_node_add:
creating symlink /dev/disk/by-path/pci-0000:00:0d.0-scsi-1:0:0:0 to
../../sdb

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/sdb /dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VBda65d90d-e2055c6a
/dev/disk/by-path/pci-0000:00:0d.0-scsi-1:0:0:0

重新启动 udev, 在启动之前首先使用命令 udevcontrol 重新装载 rules(此步骤可以省略)

[root@seiang2
rules.d]# udevcontrol
reload_rules

[root@seiang2
rules.d]# start_udev

Starting
udev: 
[  OK ]

[root@seiang2
rules.d]# ll
/dev/asm*

brw-rw—-
1 grid asmadmin 8, 17 Jul 20 03:09 /dev/asmdisk-data1

brw-rw—-
1 grid asmadmin 8, 19 Jul 20 03:09 /dev/asmdisk-data2

[root@seiang2
rules.d]#

Redhat6 版本

[root@test
rules.d]# udevadm
info -a -p /sys/block/sdb/sdb2

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.

rule to match, can be composed by the attributes of the device

the attributes from one single parent device.

  looking at device
/devices/pci0000:00/0000:00:0d.0/host3/target3:0:0/3:0:0:0/block/sdb/sdb2 :

  KERNEL== sdb2

  SUBSYSTEM== block

  DRIVER==

  ATTR{partition}== 2

   ATTR{start}== 2120580

  ATTR{size}== 2120580

  ATTR{alignment_offset}== 0

  ATTR{discard_alignment}== 0

  ATTR{stat}==   238 
84  1288  247 
0  0  0 
0  0  232 
247

  ATTR{inflight}==   0 
0

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host3/target3:0:0/3:0:0:0/block/sdb :

  KERNELS== sdb

  SUBSYSTEMS== block

  DRIVERS==

  ATTRS{range}== 16

  ATTRS{ext_range}== 256

  ATTRS{removable}== 0

  ATTRS{ro}== 0

  ATTRS{size}== 10485760

  ATTRS{alignment_offset}== 0

  ATTRS{discard_alignment}== 0

  ATTRS{capability}== 52

  ATTRS{stat}==   2082 
4734  15818  2580 
640  98980  99628 
48250  0  2549 
50830

  ATTRS{inflight}==   0 
0

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host3/target3:0:0/3:0:0:0 :

  KERNELS== 3:0:0:0

  SUBSYSTEMS== scsi

  DRIVERS== sd

  ATTRS{device_blocked}== 0

  ATTRS{type}== 0

  ATTRS{scsi_level}== 6

  ATTRS{vendor}== ATA 

  ATTRS{model}== VBOX HARDDISK 

  ATTRS{rev}== 1.0

  ATTRS{state}== running

  ATTRS{timeout}== 30

  ATTRS{iocounterbits}== 32

  ATTRS{iorequest_cnt}== 0xb10

  ATTRS{iodone_cnt}== 0xb0e

  ATTRS{ioerr_cnt}== 0xf

  ATTRS{modalias}== scsi:t-0x00

   ATTRS{evt_media_change}== 0

  ATTRS{dh_state}== detached

  ATTRS{queue_depth}== 31

 
ATTRS{queue_ramp_up_period}== 120000

  ATTRS{queue_type}== simple

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host3/target3:0:0 :

  KERNELS== target3:0:0

  SUBSYSTEMS== scsi

  DRIVERS==

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host3 :

  KERNELS== host3

  SUBSYSTEMS== scsi

  DRIVERS==

  looking at parent device
/devices/pci0000:00/0000:00:0d.0 :

  KERNELS== 0000:00:0d.0

  SUBSYSTEMS== pci

  DRIVERS== ahci

  ATTRS{vendor}== 0x8086

  ATTRS{device}== 0x2829

  ATTRS{subsystem_vendor}== 0x0000

  ATTRS{subsystem_device}== 0x0000

  ATTRS{class}== 0x010601

  ATTRS{irq}== 21

  ATTRS{local_cpus}== 1

  ATTRS{local_cpulist}== 0

 
ATTRS{modalias}== pci:v00008086d00002829sv00000000sd00000000bc01sc06i01

  ATTRS{numa_node}== -1

  ATTRS{enable}== 1

  ATTRS{broken_parity_status}== 0

  ATTRS{msi_bus}==

  looking at parent device
/devices/pci0000:00 :

  KERNELS== pci0000:00

  SUBSYSTEMS==

DRIVERS==

[root@test
rules.d]# udevadm
info -a -p /sys/block/sdb/sdb3

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.

rule to match, can be composed by the attributes of the device

the attributes from one single parent device.

  looking at device
/devices/pci0000:00/0000:00:0d.0/host3/target3:0:0/3:0:0:0/block/sdb/sdb3 :

  KERNEL== sdb3

  SUBSYSTEM== block

  DRIVER==

  ATTR{partition}== 3

  ATTR{start}== 4241160

  ATTR{size}== 2120580

  ATTR{alignment_offset}== 0

  ATTR{discard_alignment}== 0

  ATTR{stat}==   200 
122  1288  255 
0  0  0 
0  0  250 
255

  ATTR{inflight}==   0 
0

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host3/target3:0:0/3:0:0:0/block/sdb :

  KERNELS== sdb

  SUBSYSTEMS== block

  DRIVERS==

  ATTRS{range}== 16

  ATTRS{ext_range}== 256

  ATTRS{removable}== 0

  ATTRS{ro}== 0

  ATTRS{size}== 10485760

  ATTRS{alignment_offset}== 0

  ATTRS{discard_alignment}== 0

  ATTRS{capability}== 52

  ATTRS{stat}==   2082 
4734  15818  2580 
640  98980  99628 
48250  0  2549 
50830

  ATTRS{inflight}==   0 
0

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host3/target3:0:0/3:0:0:0 :

  KERNELS== 3:0:0:0

  SUBSYSTEMS== scsi

  DRIVERS== sd

  ATTRS{device_blocked}== 0

  ATTRS{type}== 0

  ATTRS{scsi_level}== 6

  ATTRS{vendor}== ATA 

  ATTRS{model}== VBOX HARDDISK 

  ATTRS{rev}== 1.0

  ATTRS{state}== running

  ATTRS{timeout}== 30

  ATTRS{iocounterbits}== 32

  ATTRS{iorequest_cnt}== 0xb10

  ATTRS{iodone_cnt}== 0xb0e

  ATTRS{ioerr_cnt}== 0xf

  ATTRS{modalias}== scsi:t-0x00

  ATTRS{evt_media_change}== 0

  ATTRS{dh_state}== detached

  ATTRS{queue_depth}== 31

 
ATTRS{queue_ramp_up_period}== 120000

  ATTRS{queue_type}== simple

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host3/target3:0:0 :

  KERNELS== target3:0:0

  SUBSYSTEMS== scsi

  DRIVERS==

  looking at parent device
/devices/pci0000:00/0000:00:0d.0/host3 :

  KERNELS== host3

  SUBSYSTEMS== scsi

  DRIVERS==

  looking at parent device
/devices/pci0000:00/0000:00:0d.0 :

  KERNELS== 0000:00:0d.0

  SUBSYSTEMS== pci

  DRIVERS== ahci

  ATTRS{vendor}== 0x8086

  ATTRS{device}== 0x2829

  ATTRS{subsystem_vendor}== 0x0000

  ATTRS{subsystem_device}== 0x0000

  ATTRS{class}== 0x010601

  ATTRS{irq}== 21

  ATTRS{local_cpus}== 1

  ATTRS{local_cpulist}== 0

  ATTRS{modalias}== pci:v00008086d00002829sv00000000sd00000000bc01sc06i01

  ATTRS{numa_node}== -1

  ATTRS{enable}== 1

  ATTRS{broken_parity_status}== 0

  ATTRS{msi_bus}==

  looking at parent device
/devices/pci0000:00 :

  KERNELS== pci0000:00

 
SUBSYSTEMS==

  DRIVERS==

[root@test
rules.d]# vim
99-oracle-asmdevices.rules

KERNEL== sdb2 ,
SUBSYSTEM== block , ATTR{size}== 2120580 , ATTR{start}== 2120580 ,
OWNER= grid ,NAME= asmdisk-data1 ,
GROUP= asmadmin , MODE= 0660

KERNEL== sdb3 ,
SUBSYSTEM== block , ATTR{size}== 2120580 , ATTR{start}== 4241160 ,
OWNER= grid ,NAME= asmdisk-data2 ,
GROUP= asmadmin , MODE= 0660

[root@test
rules.d]# start_udev

Starting
udev: 
[  OK ]

[root@test
rules.d]# ll
/dev/asm*

brw-rw—-.
1 grid asmadmin 8, 18 Jul 20 15:57 /dev/asmdisk-data1

brw-rw—-.
1 grid asmadmin 8, 19 Jul 20 15:57 /dev/asmdisk-data2

注意:从这里可以看到通过配置 99-oracle-asmdevices.rules 文件,创建出来的是块类型的设备
          可以对比观察下面通过裸设备创建出来的设备类型

二、使用裸设备创建 asm 磁盘

新增加一块磁盘,并对其进行分区;

[root@seiang2
rules.d]# fdisk /dev/sdb

Command
(m for help): n

Command
action

  e 
extended

  p 
primary partition (1-4)

e

Selected
partition 4

First
cylinder (249-652, default 249):

Using
default value 249

Last
cylinder or +size or +sizeM or +sizeK (249-652, default 652):

Using
default value 652

Command
(m for help): n

First
cylinder (249-652, default 249):

Using
default value 249

Last
cylinder or +size or +sizeM or +sizeK (249-652, default 652): +1G

Command
(m for help): n

First
cylinder (372-652, default 372):

Using
default value 372

Last
cylinder or +size or +sizeM or +sizeK (372-652, default 652): +1G

Command
(m for help): w

partition table has been altered!

Calling
ioctl() to re-read partition table.

Syncing
disks.

[root@seiang2
rules.d]# fdisk
-l

Disk
/dev/sda: 16.1 GB, 16106127360 bytes

heads, 63 sectors/track, 1958 cylinders

Units
= cylinders of 16065 * 512 = 8225280 bytes

  Device Boot  Start  End  Blocks 
Id  System

/dev/sda1  * 
 1  13  104391 
83  Linux

/dev/sda2  14  1958 
15623212+  8e  Linux LVM

Disk
/dev/sdb: 5368 MB, 5368709120 bytes

heads, 63 sectors/track, 652 cylinders

Units
= cylinders of 16065 * 512 = 8225280 bytes

  Device Boot  Start  End  Blocks 
Id  System

/dev/sdb1  1  123  987966 
83  Linux

/dev/sdb2  124  125  16065 
83  Linux

/dev/sdb3  126  248  987997+ 
83  Linux

/dev/sdb4  249  652 
3245130  5  Extended

/dev/sdb5  249  371  987966 
83  Linux

/dev/sdb6  372  494  987966 
83  Linux

配置裸设备映射,修改 /etc/udev/rules.d/60-raw.rules 文件

[root@seiang2
rules.d]# vim
60-raw.rules

ACTION== add ,
KERNEL== /dev/sdb5 , RUN+= /bin/raw /dev/raw/raw5 %N

ACTION== add ,
ENV{MAJOR}== 8 , ENV{MINOR}== 1 , RUN+= /bin/raw
/dev/raw/raw5 %M %m

ACTION== add ,
KERNEL== /dev/sdb6 , RUN+= /bin/raw /dev/raw/raw6 %N

ACTION== add ,
ENV{MAJOR}== 8 , ENV{MINOR}== 2 , RUN+= /bin/raw
/dev/raw/raw6 %M %m

ACTION== add ,
KERNEL== raw5 , OWNER= grid , GROUP= asmadmin ,
MODE= 0660

ACTION== add ,
KERNEL== raw6 , OWNER= grid , GROUP= asmadmin ,
MODE= 0660

重启 udev 服务,并查询 raw 

[root@seiang2
rules.d]# start_udev

Starting
udev: 
[  OK ]

[root@seiang2
rules.d]# raw
-qa

/dev/raw/raw5:  bound to major 8, minor 1

/dev/raw/raw6:  bound to major 8, minor 2

[root@seiang2
rules.d]# ll
/dev/raw*

crw——-
1 root root 162, 0 Jul 20 02:53 /dev/rawctl

/dev/raw:

total
0

crw-rw—- 1 grid
asmadmin 162, 5 Jul 20 03:31 raw5

crw-rw—- 1 grid
asmadmin 162, 6 Jul 20 03:31 raw6
注意:从这里可以看到通过配置 60-raw.rules 文件,创建出来的是字符类型的设备

这样配置之后,裸设备文件会自动映射到相应的分区设备文件,并设置正确的用户和组。

裸设备介绍  (来自 http://blog.itpub.net/26736162/viewspace-1401193/)

裸设备:也叫裸分区(原始分区),是一种没有经过格式化,不被 Unix/Linux 通过文件系统来读取的特殊字符设备。裸设备可以绑定一个分区,也可以绑定一个磁盘。
字符设备:对字符设备的读写不需要通过 OS 的 buffer。它不可被文件系统 mount。
块设备:对块设备的读写需要通过 OS 的 buffer,它可以被 mount 到文件系统中。

这个与 linux 的版本相关,在旧版本中,最多只可以有 256 个裸设备,Linux 4 下做多可以绑定 81Array2 个裸设备。但是在 linux 下,最多只能有 255 个分区,所以,如果用裸设备绑定分区,最多只能绑定 255 个裸设备。如果是用 lvm,则没有这个限制。

Linux 下单个磁盘最多可以有 15 个分区。3 个主分区 + 1 个扩展分区 + 11 个逻辑分区。
建议的分区方法是:先分 3 个主分区,第四个分区为扩展分区,然后在扩展分区中再分成 11 个逻辑分区。

注意: 裸设备不要绑定在扩展分区上。 linux 下如果需要使用裸设备,则需要手工进行绑定,unix 下则不用。

major 和 minor device
number 

在 unix/linux 系统中,一切都是文件。所有硬盘、键盘等设备都用文件来代表,对应着 /dev 下面的文件。对于应用程序来说,可以像对待普通文件一样打开,关闭、读写这些设备文件。但是这种文件名,比如 /dev/sda、/dev /raw/raw1 都是用户空间名称,OS Kernel 根本不知道这个名称指的是什么。在内核空间是通过 major、minor device
number 来区分设备的。
major device number 可以看作是设备驱动程序,被同一设备驱动程序管理的设备有相同的 major device
number。这个数字实际是 Kernel 中 device driver
table 的索引,这个表保存着不同设备驱动程序。而 minor device
number 用来代表被访问的具体设备。也就是说 Kernel 根据 major device
number 找到设备驱动程序,然后再从 minor device
number 获得设备位置等属性。所有这些 major device
number 是已经预先分配好的。比如裸设备是 162,scsi 块设备是 8

Redhat 平台对 raw 设备的配置在 redhat 5 之后有了变化。在 redhat 5 之前,直接配置 /etc/sysconfig/rawdevices 件,通过 /etc/init.d/rawdevices 来管理 raw 设备的启动和关闭。在 Redhat 5 之后,原来的 raw 设备接口已经取消了,redhat 5 中通过 udev 规则进行配置。要配置,需要编辑 /etc/udev/rules.d/60-raw.rules 这个文件。

cat /etc/udev/rules.d/60-raw.rules 
# Enter raw device bindings here.
#
# An example would be:
#  ACTION== add , KERNEL== sda ,
RUN+= /bin/raw /dev/raw/raw1 %N
# to bind /dev/raw/raw1 to /dev/sda, or
#  ACTION== add , ENV{MAJOR}== 8 ,
ENV{MINOR}== 1 , RUN+= /bin/raw /dev/raw/raw2 %M %m
# to bind /dev/raw/raw2 to the device with major 8, minor 1. 

其中
ACTION== add , KERNEL= , RUN+= raw /dev/raw/rawX
%N  

配置设备名称,用你需要绑定的设备名称替换(如:/dev/sda1),X 为裸设备号
主 / 次号码:
ACTION== add , ENV{MAJOR}= A ,
ENV{MINOR}= B , RUN+= raw /dev/raw/rawX %M %m  
A 和 B 是设备的主 / 次号码,X 是系统使用的 raw 设备号码。

个人对 redhat 管理 raw 的过程理解为:在 redhat 5 中,是通过 udev 来管理 raw 设备的,而 udev 是通过 MAJOR 和 MINOR 来识别 raw 设备。故需要将设备号和裸设备号进行绑定,而主设备号和次设备号可以自行指定或者由系统自动分配。根据 red hat 的官方文档中关于 raw.rule 的示例中说 KERNEL==.. 或 ENV{MAJOR}… 只需要任意配置一个就可以,但有些网友经过试验,验证必须二者同时配置才可以。

如果有多个 raw 设备,可以写成:
ACTION== add , KERNEL== raw[1-4] ,
OWNER= dave , GROUP= tianlesoftware , MODE= 0660  
注意:在内核 2.6.9-89.5AXS2 之前使用 /etc/sysconfig/rawdevices 和 /etc/udev/permissions.d/50-udev.permissions 进行 raw 设备的配置和权限管理。在内核 2.6.18-128.7AXS3 以后则使用了本文介绍的  /etc/udev/rules.d/60-raw.rules 进行 raw 设备的管理  

 

使用裸设备作为 Oracle 的数据文件的注意事项  
1、一个裸设备只能放置一个数据文件
2、数据文件的大小不能超过裸设备的大小
如果是日志文件,则裸设备最大可用大小 = 裸设备对应分区大小 – 1 * 512(保留一个 redo lock)
如果是数据文件,则裸设备最大可用大小 = 裸设备对应分区大小 – 2 *
db_block_size(保留两个 block)
为了简单起见,对所有的文件设置称比裸设备小 1M 即可。
3、数据文件最好不要设置称自动扩展,如果设置称自动扩展,一定要把 maxsize 设置设置为比裸设备小
4、linux 下 oracle 不能直接把逻辑卷作为裸设备,也要进行绑定。unix 下就不需要。

   

感谢各位的阅读!关于“如何解决使用 udev 管理 asmdisk 执行 /sbin/scsi_id 不显示 UUID 的问题”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计20221字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)