共計 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 的問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!