Linux 5.4 LVM RAW 设备 配置的深入研究
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 这个文件。
先说明一下配置环境。 用openfiler 模拟了存储, 并将这些设备用iscsi挂到了服务器上。 在openfiler存储上设置了三个3个target, 用iscsi 连接到服务器。 通过Multipath做了映射。
[root@rac1 mapper]# pwd
/dev/mapper
[root@rac1 mapper]# ll
total 0
crw------- 1 root root 10, 62 Nov 24 22:29 control
brw-rw---- 1 oracle oinstall 253, 1 Nov 24 23:18 crs
brw-rw---- 1 oracle oinstall 253, 5 Nov 24 23:18 crsp5
brw-rw---- 1 oracle oinstall 253, 6 Nov 24 23:18 crsp6
brw-rw---- 1 oracle oinstall 253, 7 Nov 24 23:18 crsp7
brw-rw---- 1 oracle oinstall 253, 8 Nov 24 23:18 crsp8
brw-rw---- 1 oracle oinstall 253, 9 Nov 24 23:18 crsp9
brw-rw---- 1 oracle oinstall 253, 2 Nov 24 23:18 data
brw-rw---- 1 oracle oinstall 253, 3 Nov 24 23:18 datap1
brw-rw---- 1 oracle oinstall 253, 0 Nov 24 23:18 fra
brw-rw---- 1 oracle oinstall 253, 4 Nov 24 23:18 frap1
[root@rac1 mapper]#
关于openfiler 配置,iscsi,multipath的配置,参考如下文档:
openfiler 搭建虚拟存储 并 配置服务端
http://blog.csdn.net/tianlesoftware/archive/2010/10/29/5973222.aspx
Multipath实现LUN设备名称的持久化
http://blog.csdn.net/tianlesoftware/archive/2010/11/01/5979061.aspx
Redhat 5.4 + ASM + RAW+ Oracle 10g RAC 安装文档
http://blog.csdn.net/tianlesoftware/archive/2010/09/09/5872593.aspx
一. 在60-raw.rules 文件中静态映射
我们先看一下60-raw.rules 文件:
[root@rac2 rules.d]# pwd
/etc/udev/rules.d
[root@rac2 rules.d]# vi 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 -- 注意这里有个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.
根据这段提示内容,我们只需要配置一个就可以了。 估计有很多人也是这么配置的,而且还没有配置成功。 至少我测试的时候是这样。 只有把这两句话都写上之后,才配置成功。 当初很疑惑为什么需要这样。 当初整理的文档:
Redhat 5 中裸设备(raw) 的配置
http://blog.csdn.net/tianlesoftware/archive/2010/08/09/5796962.aspx
小研究了一下这个问题。 我现在的理解如下:
在redhat 5中,是通过udev 来管理raw 设备的。 那么udev 如何知道raw 设备, 就是通过MAJOR 和 MINOR。 如果我们只写:
ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1 %N"
那么Udev 就无法识别出raw 设备,从而无法管理。 也就无法挂载raw。 只有指定了MAJOR 和 MINOR 后才能进行管理。
但是又出来一个问题,我这里有5个分区需要映射,我指定了raw ,MAJOB和 MINOR 后, 5个分区并没有全部挂载,而是只挂载了2个raw。
后来改了一种方法,就是将raw 设备的挂载添加到/etc/rc.d/rc.local文件中, 让raw开机自动挂载。 这样udev 就能识别出raw设备并进行管理了。
这种方法的配置如下:
[root@rac2 rules.d]# cat 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=="crsp5", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="crsp6", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="crsp7", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="crsp8", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", KERNEL=="crsp9", RUN+="/bin/raw /dev/raw/raw5 %N"
ACTION=="add", KERNEL=="raw[1-2]", OWNER="root", GROUP="oinstall", MODE="660"
ACTION=="add", KERNEL=="raw[3-5]", OWNER="oracle", GROUP="oinstall", MODE="660"
-- 这个是对raw 设备进行权限设置的
[root@rac2 rules.d]# cat /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/bin/raw /dev/raw/raw1 /dev/mapper/crsp5
/bin/raw /dev/raw/raw2 /dev/mapper/crsp6
/bin/raw /dev/raw/raw3 /dev/mapper/crsp7
/bin/raw /dev/raw/raw4 /dev/mapper/crsp8
/bin/raw /dev/raw/raw5 /dev/mapper/crsp9
-- 系统启动时挂载raw设备
这样设置之后,用start_udev命令重启udev 或者重启操作系统之后, RAW就能自动挂载,并且权限也修改了过来。
[root@rac2 rules.d]# ls -lrt /dev/raw/raw*
crw-rw---- 1 oracle oinstall 162, 1 Nov 25 02:35 /dev/raw/raw1
crw-rw---- 1 oracle oinstall 162, 2 Nov 25 02:35 /dev/raw/raw2
crw-rw---- 1 oracle oinstall 162, 3 Nov 25 02:35 /dev/raw/raw3
crw-rw---- 1 oracle oinstall 162, 4 Nov 25 02:35 /dev/raw/raw4
crw-rw---- 1 oracle oinstall 162, 5 Nov 25 02:35 /dev/raw/raw5
[root@rac2 rules.d]# raw -qa
/dev/raw/raw1: bound to major 253, minor 5
/dev/raw/raw2: bound to major 253, minor 6
/dev/raw/raw3: bound to major 253, minor 7
/dev/raw/raw4: bound to major 253, minor 8
/dev/raw/raw5: bound to major 253, minor 9
说明:
Linux 4下做多可以绑定8192个裸设备。但是在linux下,最多只能有255个分区,所以,如果用裸设备绑定分区,最多只能绑定255个裸设备。 如果是用lvm,则没有这个限制。
网上的一位兄弟也用了这种方法:
http://oracleflash.com/7/How-to-configure-Raw-Disks-in-RHEL-5.html
二. 在60-raw.rules 文件中动态映射
配置方法如下,KERNEL并不能直接获得设备名称或者主次设备号,我们需要通过dmsetup指令来间接获得。
2.1. 编辑90-dm.rules文件,注释掉里面的内容
[root@rac1 rules.d]# pwd
/etc/udev/rules.d
[root@rac1 rules.d]# cat 90-dm.rules
#KERNEL=="dm-[0-9]*", ACTION=="add", OPTIONS+="ignore_device"
2.2. 编辑60-raw.rules文件,加入下面几行
KERNEL!="dm-[0-9]*",GOTO="skip_dm" --如果不是dm设备,则直接跳到skip_dm
ACTION!="change", GOTO="skip_dm" --如果后面的指令返回为假(非0值),则跳到skip_dm
PROGRAM!="/sbin/dmsetup ls --exec /bin/basename -j %M -m %m", GOTO="skip_dm"
RESULT=="crsp5", RUN+="/bin/raw /dev/raw/raw1 $MAJOR $MINOR"
RESULT=="crsp6", RUN+="/bin/raw /dev/raw/raw2 $MAJOR $MINOR"
RESULT=="crsp7", RUN+="/bin/raw /dev/raw/raw3 $MAJOR $MINOR"
RESULT=="crsp8", RUN+="/bin/raw /dev/raw/raw4 $MAJOR $MINOR"
RESULT=="crsp9", RUN+="/bin/raw /dev/raw/raw5 $MAJOR $MINOR"
-- 这里RESULT后面的名称是/dev/mapper下的lv的名称。 或者sdb1之类的分区
LABEL=skip_dm
ACTION=="add", KERNEL=="raw[1-2]", OWNER="root", GROUP="oinstall", MODE="660"
ACTION=="add", KERNEL=="raw[3-5]", OWNER="oracle", GROUP="oinstall", MODE="660"
2.3. 重启UDEV
[root@rac1 rules.d]# start_udev
Starting udev: [ OK ]
2.4. 查看结果
[root@rac1 rules.d]# ls -lrt /dev/raw/*
crw------- 1 root root 162, 3 Nov 25 01:19 /dev/raw/raw3
crw------- 1 root root 162, 5 Nov 25 01:19 /dev/raw/raw5
crw------- 1 root root 162, 4 Nov 25 01:19 /dev/raw/raw4
crw------- 1 root root 162, 1 Nov 25 01:19 /dev/raw/raw1
crw------- 1 root root 162, 2 Nov 25 01:19 /dev/raw/raw2
[root@rac1 rules.d]# raw -qa
/dev/raw/raw1: bound to major 253, minor 5
/dev/raw/raw2: bound to major 253, minor 6
/dev/raw/raw3: bound to major 253, minor 7
/dev/raw/raw4: bound to major 253, minor 8
/dev/raw/raw5: bound to major 253, minor 9
注意, 这里权限并没有改变过来, 所以,我们还是将权限修改添加到/etc/rc.d/rc.local 中。
[root@rac1 ~]# cat /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
chown root.oinstall /dev/raw/raw[1-2]
chown oracle.oinstall /dev/raw/raw[3-5]
chmod 775 /dev/raw/raw[1-2]
chmod 775 /dev/raw/raw[3-5]
重启操作系统后查看权限:
[root@rac1 ~]# ls -lrt /dev/raw/raw*
crwxrwx--- 1 oracle oinstall 162, 1 Nov 25 03:50 /dev/raw/raw1
crwxrwx--- 1 oracle oinstall 162, 2 Nov 25 03:50 /dev/raw/raw2
crwxrwx--- 1 oracle oinstall 162, 5 Nov 25 03:50 /dev/raw/raw5
crwxrwx--- 1 oracle oinstall 162, 3 Nov 25 03:50 /dev/raw/raw3
crwxrwx--- 1 oracle oinstall 162, 4 Nov 25 03:50 /dev/raw/raw4
2.5 扩展
这种方法有灵活性, 它将挂载写到了规则了。 这里只有5个raw设备,如果有几百个的话,这样挂载就非常麻烦了。 我们可以通过脚本来实现。
RESULT=="crsp[0-9]*",RUN+="/bin/raw /dev/raw/raw$(MINOR) $MAJOR $MINOR"
这里通过次设备号来作为裸设备的编号依次映射。
但是这里这里有个bug,我们无法对raw0这样的设备进行映射,而大部分情况是,第一个LV对应的MINOR恰好是0。在这种情况下,我们可以每次给MINOR+1来作为裸设备的编号。如:
RESULT=="crsp[0-9]*",RUN+="/bin/raw /dev/raw/raw$((MINOR+1)) $MAJOR $MINOR"
看上去很美好,很遗憾,我在Asianux 3.0 SP2,Centos 5.4版本上均没有成功。所以我采取了下面折衷的办法:
KERNEL!="dm-[0-9]*",GOTO="skip_dm"
PROGRAM!="/sbin/dmsetup ls --exec /bin/basename -j %M -m %m", GOTO="skip_dm"
RESULT=="crsp[0-9]*",RUN+="/bin/sh -c 'if [ $MINOR -eq 0 ]; then /bin/raw /dev/raw/raw200 $MAJOR $MINOR; else /bin/raw /dev/raw/raw$MINOR $MAJOR $MINOR;fi'"
LABEL=skip_dm
保存文件, 重启udev: start_udev:
[root@rac1 rules.d]# raw -qa
/dev/raw/raw5: bound to major 253, minor 5
/dev/raw/raw6: bound to major 253, minor 6
/dev/raw/raw7: bound to major 253, minor 7
/dev/raw/raw8: bound to major 253, minor 8
/dev/raw/raw9: bound to major 253, minor 9
这里的做法是如果次设备号是0的话,我们尽可能把他映射到裸设备编号靠后的设备,这里采取的是200。如果你需要映射的设备操作超过200的话,在把这个数字往后改。
注意, 这种方法的权限依然需要在/etc/rc.d/rc.local 文件中赋权。
取消raw 映射
小结:
上面讲了在Redhat 5下映射raw的两种方法。 第一种是先在rc.local 做映射, 在用udev进行管理。 第二种是在60-raw.rules中做映射, 但是权限还是要在rc.local 做赋权。 两种方法倒了过来。 如果raw 设备较多的话, 用第二种方法要简单一点。
总之, 我对REDHAT 5.4 下raw 的理解是: 要先有major 和minor 号之后,udev 才能管理Raw 设备。
-- 2011年11月30日补充
在Oracle 找到了一篇redhat 5下raw 配置的文章,可以参考。
Configuring raw devices (multipath) for Oracle Clusterware 10g Release 2 (10.2.0) on RHEL5-OEL5 [ID 564580.1]
http://blog.csdn.net/tianlesoftware/archive/2010/11/30/6045137.aspx
------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(满); DBA2 群:62697977(满)
DBA3 群:62697850 DBA 超级群:63306533;
聊天 群:40132017
--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请
把major and minor设成0,就可以取消裸设备的绑定。
[root@rac1 mapper]# raw /dev/raw/raw9 0 0
转载于:https://www.cnblogs.com/sqlite3/archive/2010/11/26/2568272.html
Linux 5.4 LVM RAW 设备 配置的深入研究相关推荐
- linux 设备 major 253,redhat5.5测试环境中使用udev配置raw设备
在redhat 5中,是通过udev来管理raw设备的. 那么udev如何知道raw设备, 就是通过MAJOR和 MINOR. 如果我们只写: ACTION=="add", KER ...
- linux raw设备格式化,SUSE Linux 10配置裸设备(raw devices)
SUSE Linux 10配置裸设备(raw devices) 裸设备,是没有经过格式化的分区或磁盘,也叫裸分区(原始分区),不被Unix通过文件系统来读取的特殊字符设备.它由应用程序负责对它进行读写 ...
- Redhat 中裸设备(raw) 的配置和oracle中使用
1.对磁盘进行分区 fdisk -l 查看磁盘情况 fdisk /dev/sdb 进行分区操作 2.配置裸设备(修改/etc/udev/rules.d/60-raw.rules文件) 在redhat5 ...
- linux挂载raw设备,linux创建raw设备
总结一下,看了一下他们的blog,几乎没有谁详细的总结raw的创建. 其实raw设备创建要分多路径链路创建和普通创建. [root@localhost dev]# df -h Filesystem S ...
- linux上配置存储硬盘,Linux 挂载iscsi储存磁盘设备
Linux 挂载iscsi存储磁盘设备 1,check网络 [root@localhost ~]# ping -I eth0 11.110.10.138 PING 11.110.10.138 (11. ...
- Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载)
Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载) Linux LVM逻辑卷配置过程详解 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量, ...
- linux配置usb主从_基于Linux的USB主/从设备之间的三种通信方式
随着简单易用的USB接口日益流行,在嵌入式系统中添加对USB接口的支持已成为大势所趋.本文通过介绍Linux中支持USB的各种模块和库,分析了在Linux上利用USB实现高速串口和以太网连接等通信方式 ...
- linux配置usb主从_基于Linux的USB 主/从设备之间通讯的三种方式
转载:http://archive.eet-china.com/www.eet-china.com/ART_8800323770_617693_TA_eda530e7.HTM 随着简单易用的USB接口 ...
- Linux 2.6 menuconfig内核编译配置选项详解
Code maturity level options 代码成熟度选项 Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未 ...
最新文章
- 关于产品 / 市场契合点 PMF 的 12 个问题全解读(下)
- CANopen笔记1
- Web2.0时代,你得到什么?
- 《云计算开放应用架构》标准发布,阿里云持续领航云原生
- 索引使用的好处与坏处(Oracle测试)
- 【QGIS入门实战精品教程】1.1:QGIS与GIS的区别和联系
- java获取jsp对象的属性_java-从jsp el中的对象获取布尔属性
- (转)会议期刊论文发表介绍(计算机科学领域)
- [20180423]表空间闪回与snapshot standby
- 简聊初步尝试服务端渲染的一些感想
- 跑腿 php,啦啦外卖跑腿小程序配置详情
- 软件测试常问面试题,你真的会搭建测试环境吗?
- SQL中分组,排序,分组排序
- nas存储如何做远程服务器数据备份_NAS存储与数据备份方案
- Java面试问题集锦
- 社会主义市场经济的运作机制
- 单线复用有线Mesh组网案例
- 数据清洗的几种常用手段
- java 获取mp3 封面_android 怎样获取歌曲的专辑封面
- 会声会影试用版到期了怎么办_会声会影2018试用版如何正确安装、卸载?