在 Redhat 5 之前的 版本中,系统通过 /etc/sysconfig/rawdevices 配置 raw 的控制文件,通过 /etc/init.d/rawdevices 来管理 raw 设备的启动和关闭。 而在 Redhat 5 之后,原来的 raw 设备接口已经取消了, redhat 5 中通过 udev 规则进行配置。 要配置,需要编辑 /etc/udev/rules.d/60-raw.rules 这个文件。
下面给出一个添加 raw 设备的 测试过程。
1. 现在虚拟机上添加一个硬盘。 我们仅做测试,所以分 10M 。
2. 启动我们的虚拟机,连上后查看磁盘情况
[root@centos ~]# 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 * 201 1958 14121135 83 Linux
/dev/sda2 1 200 1606468+ 82 Linux swap / Solaris
Partition table entries are not in disk order
Disk /dev/sdb: 10 MB, 10485760 bytes
64 heads, 32 sectors/track, 10 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk /dev/sdb doesn't contain a valid partition table
这里的 /dev/sdb 因为是刚加上来的硬盘,还没有格式化。
3. 格式化 /dev/sdb
[root@centos ~]# 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-10, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-10, default 10):
Using default value 10
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
查看格式化之后的硬盘情况:
[root@centos ~]# 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 * 201 1958 14121135 83 Linux
/dev/sda2 1 200 1606468+ 82 Linux swap / Solaris
Partition table entries are not in disk order
Disk /dev/sdb: 10 MB, 10485760 bytes
64 heads, 32 sectors/track, 10 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 10 10224 83 Linux
[root@centos ~]#
4. 修改 /etc/udev/rules.d/60-raw.rules 文件
[root@centos ~]# more /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="<device name>", RUN+=" /bin/ raw /dev/raw/rawX %N" 主/次号码: ACTION=="add", ENV{MAJOR}="A", ENV{MINOR}="B", RUN+=" /bin/ raw /dev/raw/rawX %M %m"
用你需要绑定的设备名称替换 <device name> (如: /dev/sda1 )。 "A" 和 "B" 是设备的主/次号码, X 是系统使用的 raw 设备号码。 在设置的时候,主次号码是可选的。 如果不指定,默认从 1 , 1 开始,
如: /dev/raw/raw1: bound to major 1, minor 1
现在我们 把 /dev/sdb1 知道到 raw1 上,就可以在 /etc/udev/rules.d/60-raw.rules 文件里添加如下内容:
ACTION=="add", KERNEL=="sd b 1",RUN+=" /bin/ raw /dev/raw/raw 1 %N"
5. 重启服务: [root@centos ~]# start_udev
Starting udev: [ OK ]
6. 查看 raw 设备: [root@centos ~]# ls -lrt /dev/raw
total 0
crw------- 1 root root 162, 1 Aug 8 06:56 raw1
[root@centos ~]# raw -aq
/dev/raw/raw1: bound to major 1, minor 1
如果我们添加了下面的语句:
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}==" 1 ",RUN+="/bin/raw /dev/raw/raw 1 %M %m"
那么就会显示我们指定的 Major 和 minor 。
[root@centos ~]# ls -lrt /dev/raw
total 0
crw-rw---- 1 dave tianlesoftware 162, 1 Aug 8 08:06 raw1
[root@centos ~]# raw -aq
/dev/raw/raw1: bound to major 8, minor 1
7. 设置 raw 设备的用户和权限信息
在 /etc/udev/rules.d/60-raw.rules 文件里添加如下信息:
ACTION=="add", KERNEL=="raw1", OWNER="dave", GROUP="tianlesoftware", MODE="660"
如果有多个 raw 设备 ,可以写成:
ACTION=="add", KERNEL=="raw[1- 4 ]", OWNER="dave", GROUP="tianlesoftware", MODE="660"
在 Oracle 中使用 raw 设备时, 如果 裸设备 对应的 属组 不是 oracle ,裸设备将无法供 oracle 使用 。
查看结果:
[root@centos ~]# start_udev
Starting udev: [ OK ]
[root@centos ~]# ls -lrt /dev/raw
total 0
crw-rw---- 1 dave tianlesoftware 162, 1 Aug 8 06:59 raw1
[root@centos ~]# raw -aq
/dev/raw/raw1: bound to major 1, minor 1
8. 取消raw 映射
把major and minor设成0,就可以取消裸设备的绑定。
[root@rac1 mapper]# raw /dev/raw/raw9 0 0