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

转载 2013年12月06日 11:10:23

  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 设备。



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

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

Redhat 平台对raw设备的配置在redhat 5之后有了变化。在redhat 5之前,直接配置/etc/sysconfig/rawdevices件,通过/etc/init.d/rawdevice...

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

Redhat 平台对raw设备的配置在redhat 5之后有了变化。在redhat 5之前,直接配置/etc/sysconfig/rawdevices件,通过/etc/init.d/rawdevice...

SUSE Linux 多路径软件+LVM+裸设备的配置

1.先要查出光纤卡的WWN号,SUSE 10下光纤卡的WWD在/sys/class/fc_host/host5/port_name文件中,有两块卡就会有两个host*的目录接好光纤后可以在dev下可以...
  • xyz846
  • xyz846
  • 2011年05月10日 17:40
  • 1993

SUSE Linux 10 配置裸设备(raw devices)

裸设备,是没有经过格式化的分区或磁盘,也叫裸分区(原始分区),不被Unix通过文件系统来读取的特殊字符设备。它由应用程序负责对它进行读写操作。不经过文件系统的缓冲,是不被操作系统直接管理的设备。由于跨...

对linux的深入研究与探索

  • 2009年11月26日 14:02
  • 61KB
  • 下载

针对struts2配置了字符过滤器还是乱码的深入研究

前几天在论坛上看到一篇帖子,是关于Struts2.0中文乱码的,楼主采用的是spring的字符编码过滤器 (CharacterEncodingFilter)统一编码为GBK,前台提交表单数据到A...

spring配置文件中声明式事务和OpenSessionInViewFilter深入研究和汇总

spring中配置文件可以配置声明式事务管理以及OpenSessionInViewFilter, 一、1、对于声明式事务的配置作用是在配置有事务的方法上起作用,spring接管此方法内的数据库事务管...

Linux Java程序夏令时问题继续深入研究(终极)

在前面也作出了说明,认为夏令时在Java中只是一个原始时间值的附加计算问题 ,可以获取到具体TimeInMillis到不同的时区去换算,例如GMT+0,就会发现仅是夏令时区域自己显象上的变化,而其他地...

Linux内核源代码简单分析(如何深入研究源代码)(转)

第11章Linux内核源代码 本章讲述在Linux内核源码中,应该从何处开始查找特定的内核函数。 本书并不要求读者具有C语言编程能力,也不要求读者有一份可参阅的Linux内核源码, 事实上,通过...
  • farce
  • farce
  • 2011年10月19日 08:23
  • 874

深入研究linux内核实践之命令

因为工作的需要,现在需要学习linux内核,我只研究过WINCE的内核,不过这样也好,可以比较两种操作系统之间的优缺点。学习linux操作系统绕不开的一个要求:熟悉linux系统的命令行的命令,就像W...
  • wavemcu
  • wavemcu
  • 2012年01月30日 21:35
  • 811
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux LVM RAW 设备 配置的深入研究
举报原因:
原因补充:

(最多只允许输入30个字)