最近遇到几件raw裸设备绑定的事情,一直没有总结,今天把raw裸设备绑定的方法做下大概的总结,以免忘记,同时,也可以帮到有需要的朋友。

一、普通设备做成raw裸设备
普通设备直接做成raw裸设备的情况,还是比较常见的,下面以RedFlag DC Server 5.0 和Asianux 3.0系统来做实验,因为udev版本不同,所以,设置方法也会不同。

前提:
需要将/dev/sdb1、/dev/sdb2、/dev/sdb3 三个设备分别做成raw1、raw2、raw3,属主是oracle,属组是oinstall,权限是0640。

1、RedFlag DC Server 5.0 SP4 (内核2.6.9-89.5AXS2)
(1) raw设备绑定
在DC5系列中,raw设备后rawdevices配置文件来控制的,所以,需要编辑以下文件
[php]
[root@DC5SP4-64 ~]# vi /etc/sysconfig/rawdevices
[/php]
然后按照提示信息,添加设备:
[php]
# This file and interface are deprecated.
# Applications needing raw device access should open regular
# block devices with O_DIRECT.
# raw device bindings
# format: <rawdev> <major> <minor>
# <rawdev> <blockdev>
# example: /dev/raw/raw1 /dev/sda1
# /dev/raw/raw2 8 5
/dev/raw/raw1 /dev/sdb1
/dev/raw/raw2 /dev/sdb2
/dev/raw/raw3 /dev/sdb3
[/php]

(2) 赋加权限
权限的控制,可以在udev下的permissions.d 目录中设置,如下所示:
[php]
[root@DC5SP4-64 ~]# vi /etc/udev/permissions.d/50-udev.permissions
[/php]
找到里面关于raw权限设置的地方,修改成如下所示:
[php]
# raw devices
ram*:root:disk:0660
# raw/*:root:disk:0660
raw/*:oracle:oinstall:0640
[/php]
意思是将/dev/raw 目录下的所有设备,属主是oracle,属组是oinstall,权限是0640。

如果想给不同的raw设备,分配不同属组和权限,可以使用下面方法:
[php]
# raw devices
ram*:root:disk:0660
raw/raw[1-2]:oracle:oinstall:0640
raw/raw3:oracle:dba:0660
[/php]
效果如下:
[php]
[root@DC5SP4-64 /]# cd /dev/raw
[root@DC5SP4-64 raw]# ll
total 0
crw-r—– 1 oracle oinstall 162, 1 Jun 16 16:10 raw1
crw-r—– 1 oracle oinstall 162, 2 Jun 16 16:10 raw2
crw-rw—- 1 oracle dba 162, 3 Jun 16 16:10 raw3
[/php]

(3) 重启udev服务,使其生效
修改完配置后,可以执行
[php]
[root@DC5SP4-64 ~]#start_udev
[/php]
使udev服务重新启动,此时,可以到/dev/raw目录下,查看刚才设置的内容是否生效:
[php]
[root@DC5SP4-64 /]# cd /dev/raw
[root@DC5SP4-64 raw]# ll
total 0
crw-r—– 1 oracle oinstall 162, 1 Jun 16 16:10 raw1
crw-r—– 1 oracle oinstall 162, 2 Jun 16 16:10 raw2
crw-r—– 1 oracle oinstall 162, 3 Jun 16 16:10 raw3
[/php]

2、Asianux 3.0 SP2 (内核 2.6.18-128.7AXS3)
(1) raw设备绑定
Asianux3 开始,raw设备就不是由rawdevices配置文件来控制的了,我们可以使用udev来管理raw裸设备。
在/etc/udev/rules.d目录中,有个名为60-raw.rules配置文件,在里面添加我们想要的效果:
[php]
[root@ASIANUX3SP2-64 rules.d]# cat 60-raw.rules
# This file and interface are deprecated.
# Applications needing raw device access should open regular
# block devices with O_DIRECT.
#
# 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=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sdb3", RUN+="/bin/raw /dev/raw/raw3 %N"
[/php]

(2) 赋加权限
权限的赋加,也可以直接写到/etc/udev/rules.d/60-raw.rules 文件中
[php]
[root@ASIANUX3SP2-64 rules.d]# cat 60-raw.rules
# This file and interface are deprecated.
# Applications needing raw device access should open regular
# block devices with O_DIRECT.
#
# 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=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sdb3", RUN+="/bin/raw /dev/raw/raw3 %N"

KERNEL=="raw1", OWNER=="oracle", GROUP=="dba", MODE=="0640"
KERNEL=="raw2", OWNER=="oracle", GROUP=="dba", MODE=="0640"
KERNEL=="raw3", OWNER=="oracle", GROUP=="dba", MODE=="0640"
[/php]

如果裸设备较多,并且,需要分配不同权限,可以尝试使用下面方式:
[php]
KERNEL=="raw[1-2]", OWNER=="oracle", GROUP=="dba", MODE=="0640"
KERNEL=="raw3", OWNER=="oracle", GROUP=="dba", MODE=="0660"
[/php]

(3) 重启udev服务,使其生效
修改完配置后,可以执行
[php]

[root@ASIANUX3SP2-64 rules.d]#start_udev
[/php]
使udev服务重新启动,此时,可以到/dev/raw目录下,查看刚才设置的内容是否生效:
[php]
[root@ASIANUX3SP2-64 /]# cd /dev/raw
[root@ASIANUX3SP2-64 raw]# ll
total 0
crw-r—– 1 oracle dba 162, 1 Jun 16 15:09 raw1
crw-r—– 1 oracle dba 162, 2 Jun 16 15:09 raw2
crw-r—– 1 oracle dba 162, 3 Jun 16 15:09 raw3
[/php]
可以看到,/dev/raw 目录下的所有设备,属主是oracle,属组是dba,权限是0640。