使用udev管理asmdisk執行/sbin/scsi_id不顯示UUID的解決方法

迷倪小魏發表於2017-07-20

    今天在搭建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   Hostnameseiang2.comsys.com

作業系統:Redhat6.4   Hostnametest.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.

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

and 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

255 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

The 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.

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

and 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.

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

and 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==""


編輯udevrule檔案

[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.

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: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.

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

The 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

255 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

255 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下則不用。

majorminor 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下就不需要。

 
 

相關連結:

http://blog.itpub.net/14184018/viewspace-701675/

http://blog.itpub.net/14184018/viewspace-1364944/


作者:SEian.G(苦練七十二變,笑對八十一難)

ITPUBhttp://blog.itpub.net/31015730/

51CTOhttp://seiang.blog.51cto.com/


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31015730/viewspace-2142370/,如需轉載,請註明出處,否則將追究法律責任。

相關文章