什么是裸设备及其用途

所谓裸设备(raw device)就是一种没有经过格式化的分区,也叫原始分区,是一种不需要通过文件系统来访问的特殊字符设备。在Linux下,通过块设备“绑定”到特殊字符设备得到裸设备。因为读写裸设备不需要像访问块设备那样经过内核的块缓冲,所有的I/O读写都是直接在进程的内存空间到物理的寻址空间进行。

此外,由于避免了文件系统处理的开销,所以使用裸设备对于读写频繁的应用(如OracleDB2等数据库系统)来说,可以很好地提升应用的性能。然而,随着计算能力的提高,当应用存取数据的I/O瓶颈出现在存储设备的控制器或驱动器上时,通过裸设备的数据访问性能反而不比文件系统的高,同时文件系统的数据组织能力也更强。


裸设备的创建

创建裸设备方式相对创建软RAIDLVM来说就比较简单了,只需用“raw”命令把裸设备与真实的物理磁盘或分区做一个映射即可。例如,在“/dev/raw/raw1”与“/dev/sdb”之间做一个映射,如下:

# raw /dev/raw/raw1 /dev/sdb

/dev/raw/raw1: bound to major 8, minor 16

但是以上这种方式创建的裸设备,在系统重启后将不再生效,若要永久生效需要将裸设备的映射关系写到“/etc/sysconfig/rawdevices”文件中,如下:

# vi /etc/sysconfig/rawdevices

/dev/raw/raw1 /dev/sdb

/dev/raw/raw2 /dev/sdc

/dev/raw/raw3 /dev/sdd

同时还需要启动“rawdevices”这个服务,这时所绑定的裸设备才生效,如下:

# /etc/init.d/rawdevices restart

Assigning devices:

/dev/raw/raw1 --> /dev/sdb

/dev/raw/raw1: bound to major 8, minor 16

/dev/raw/raw2 --> /dev/sdc

/dev/raw/raw2: bound to major 8, minor 32

/dev/raw/raw3 --> /dev/sdd

/dev/raw/raw3: bound to major 8, minor 48

done

使用“chkconfig”可以设置该服务在开机时自动启动,即系统启动时自动映射对应关系,对于已创建好的裸设备,可以通过如下命令来查看裸设备的映射信息:

# raw -q /dev/raw/raw1

/dev/raw/raw1: bound to major 8, minor 16

-q”指定存在的裸设备名称,而“major 8”和“minor 16”分别时真实设备的主设备号与从设备号,如果需要查看所有的裸设备信息,那么可使用“raw -qa”,如下:

# raw -qa

/dev/raw/raw1: bound to major 8, minor 16

/dev/raw/raw2: bound to major 8, minor 32

/dev/raw/raw3: bound to major 8, minor 48

清空裸设备
相当于格式化啦bs是块的大小,block size
count是块的数量,这两者相乘大于裸设备的容量即可
dd if=/dev/zero of=/dev/raw/raw1 bs=8192 count=12800
dd if=/dev/zero of=/dev/raw/raw2 bs=8192 count=12800
-------
另外
rhel4使用udev来管理设备
手动修改/dev/raw/raw1 不能永久生效
要想使得权限持久生效
需要修改文件/etc/udev/permissions.d/50-udev.permissions 的第113行
raw/*:root:disk:0660
改成
raw/*:oracle:dba:0660
重启机器
如果/dev/下没有 /raw/ 目录,可以自己手工建立

如何修改裸设备的默认权限
两种方法:
1)要修改/etc/rc.d/rc.local文件,加入如下:
chown root:oinstall /dev/raw/raw1
chown root:oinstall /dev/raw/raw2
chown root:oinstall /dev/raw/raw3
...
chmod 660 /dev/raw/raw1
chmod 660 /dev/raw/raw2
chmod 660 /dev/raw/raw3
...

2)实际上还有更简单的方法就是,修改/etc/udev/permissions.d/50-udev.permissions文件:
raw/*:root:disk:0660

raw/*:root:oinstall:0660

这样就可以了!


如何取消裸设备的绑定
用raw把major and minor设成0就可以取消裸设备的绑定。如:
raw /dev/raw/raw1 0 0
这个命令取消绑定裸设备的绑定,/dev/raw/raw1会被删除

裸设备可以绑定的对象可以什么?
可以绑定整个没有分区的硬盘、可以绑定硬盘的某个分区、可以绑定逻辑卷等。