裸设备,是没有经过格式化的分区或磁盘,也叫裸分区(原始分区),不被Unix通过文件系统来读取的特殊字符设备。它由应用程序负责对
它进行读写操作。不经过文件系统的缓冲,是不被操作系统直接管理的设备。由于跨过操作系统管理,使得I/O效率更高。在基于SUSE Linux
10上安装Oracle 10g RAC的话,由于Oracle 10g 不支持将ocr与votingdisk 存放在ASM 磁盘中,因此,依然需要为其使用裸设备方式。SUSE
Linux裸设备的配置与其他的Linux稍有差异,下面将具体描述。
- 1、先对磁盘进行分区,sdd如下面的方法炮制
- #下面的示例中使用sdc和sdd来用作裸设备,一块用于ocr,一块用于votingdisk
- bo2dbp:~ # fdisk /dev/sdc
- 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):
- Value out of range.
- Partition number (1-4):
- Value out of range.
- Partition number (1-4): 1
- First cylinder (1-200, default 1):
- Using default value 1
- Last cylinder or +size or +sizeM or +sizeK (1-200, default 200):
- Using default value 200
- Command (m for help): w
- The partition table has been altered!
- Calling ioctl() to re-read partition table.
- Syncing disks.
- 2、分区后的结果
- bo2dbp:~ # fdisk -l /dev/sdc
- Disk /dev/sdc: 209 MB, 209715200 bytes
- 64 heads, 32 sectors/track, 200 cylinders
- Units = cylinders of 2048 * 512 = 1048576 bytes
- Device Boot Start End Blocks Id System
- /dev/sdc1 1 200 204784 83 Linux
- bo2dbp:~ # fdisk -l /dev/sdd
- Disk /dev/sdd: 209 MB, 209715200 bytes
- 64 heads, 32 sectors/track, 200 cylinders
- Units = cylinders of 2048 * 512 = 1048576 bytes
- Device Boot Start End Blocks Id System
- /dev/sdd1 1 200 204784 83 Linux
- 3、配置裸设备
- bo2dbp:~ # vi /etc/raw
- # /etc/raw
- #
- # sample configuration to bind raw devices
- # to block devices
- #
- # The format of this file is:
- # raw<N>:<blockdev>
- #
- # example:
- # ---------
- # raw1:hdb1
- #
- # this means: bind /dev/raw/raw1 to /dev/hdb1
- #
- # ...
- #Add new raw devices
- raw1:sdc1
- raw2:sdd1
- 4、启动裸设备
- bo2dbp:~ # rcraw start
- bind /dev/raw/raw1 to /dev/sdc1... done
- bind /dev/raw/raw2 to /dev/sdd1... done
- 5、配置裸设备随系统启动
- bo2dbp:~ # chkconfig raw
- raw on
- #修改裸设备的权限与所有者,尽管该操作会修改,但重启之后将失效。永久修改见第7点
- bo2dbp:~ # chown oracle:dba /dev/raw/raw[1-2]
- bo2dbp:~ # chmod 660 /dev/raw/raw[1-2]
- 6、测试裸设备
- bo2dbp:~ # dd if=/dev/zero of=/dev/raw/raw1 bs=1024k count=200
- dd: writing `/dev/raw/raw1': No space left on device
- 200+0 records in
- 199+0 records out
- 209698816 bytes (210 MB) copied, 2.59567 seconds, 80.8 MB/s
- 7、修改裸设备启动后权限及所有者
- #使用root用户修改/etc/udev/rules.d/50-udev-default.rules,确保raw设备的权限GROUP="dba", MODE="660", OWNER="oracle"
- #将其中包含KENREL=="raw"的记录修改为如下
- KERNEL=="raw[0-9]*", SUBSYSTEM=="raw", NAME="raw/%k", GROUP="dba", MODE="640", OWNER="oracle"
- 8、确认配置成功
- #重启之后的状态 #Author :Robinson Cheng Blog:http://blog.youkuaiyun.com/robinson_0612
- bo2dbp:~ # ls -hltr /dev/raw
- total 0
- crw-rw---- 1 root disk 162, 0 Sep 19 10:22 rawctl
- crw-rw---- 1 oracle dba 162, 1 Sep 19 10:22 raw1
- crw-rw---- 1 oracle dba 162, 2 Sep 19 10:22 raw2
- bo2dbs:~ # /usr/sbin/raw -qa
- /dev/raw/raw1: bound to major 8, minor 33
- /dev/raw/raw2: bound to major 8, minor 49
更多参考
Linux/Unix shell sql 之间传递变量
Linux/Unix shell 脚本中调用SQL,RMAN脚本