[转帖]Linux 5.4 LVM RAW 设备 配置的深入研究 _VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2377 | 回复: 0   主题: [转帖]Linux 5.4 LVM RAW 设备 配置的深入研究         下一篇 
    本主题由 koei123 于 2015-6-1 15:09:24 移动
game
注册用户
等级:新兵
经验:36
发帖:61
精华:0
注册:2011-7-23
状态:离线
发送短消息息给game 加好友    发送短消息息给game 发消息
发表于: IP:您无权察看 2015-3-18 11:57:25 | [全部帖] [楼主帖] 楼主

Linux 5.4 LVM RAW 设备 配置的深入研究

http://blog.csdn.net/tianlesoftware/article/details/6036263


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存储上设置了三个3targetiscsi 连接到服务器。通过Multipath做了映射。

[root@rac1 mapper]# pwd


/dev/mapper

[root@rac1 mapper]# ll
total 0
crw------- 1 rootroot10, 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 配置,iscsimultipath的配置,参考如下文档:

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个分区并没有全部挂载,而是只挂载了2raw

后来改了一种方法,就是将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 扩展

这种方法有灵活性,它将挂载写到了规则了。这里只有5raw设备,如果有几百个的话,这样挂载就非常麻烦了。我们可以通过脚本来实现。

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


--转自 北京联动北方科技有限公司

该贴由koei123转至本版2015-6-1 15:09:24



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论