Chinaunix首页 | 论坛 | 博客
  • 博客访问: 595121
  • 博文数量: 248
  • 博客积分: 52
  • 博客等级: 民兵
  • 技术积分: 1028
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-23 12:05
文章分类

全部博文(248)

文章存档

2016年(7)

2013年(241)

分类: LINUX

2013-04-09 04:51:10

    新闻出版总署在Asianux 3.0 SP3 x86-64上安装oracle rac10。开始对方想使用raw的方式,但是发现存储只分过来一个/dev/sdb,只能分15个分区,无法满足要求。我建议用ASM或者用LVM。方法和相应的包都发过去了。

注意,ASM的使用和逻辑卷的使用是两种方法,选其一,两种方法不同时使用。

1、逻辑卷
将sdb做成逻辑卷
在一台上操作
清空sdb上的分区和数据
dd if=/dev/zero of=/dev/sdb bs=1M count=100
创建物理卷
pvcreate /dev/sdb
创建卷组,卷组名称自定,如下例子为ora
vgcreate ora /dev/sdb
创建第一个逻辑卷,名字为data1,大小100M
lvcreate -n data1 -L 100M ora
这样创建完毕的逻辑卷为/dev/ora/data1,可以当做一个分区绑定裸设备或者创建
文件系统。
raw /dev/raw/raw1 /dev/ora/data1
创建其他的逻辑卷参考上述命令,大小可以用M或者G。


2、ASM的使用
安装顺序
rpm -ivh oracleasm-support-2.1.3-1.el5.x86_64.rpm
tar zxvf oracleasm-2.0.5-1-AX3SP3-x86-64-2.6.18-194.1AXS3.tar.gz -C /
rpm -ivh oracleasmlib-2.0.4-1.el5.x86_64.rpm
ASM的启动停止和使用参考红帽上的文档,是通用的。


    结果晚上又打电话说ASM服务启动时无法启动,我确认了一下oracleasm.ko是否已经放到了内核目录中否?确认没有,估计是tar解包的时候-C参数用成-c了。让其重执行,本以为就解决了,结果后来打电话说去现场协助吧,ASM还无法成功。

    到达现场后,发现执行oracleasm服务的确无法启动,继而发现内核模块没有加载成功。

[root@W-DB2 ~]# /etc/init.d/oracleasm start

Initializing the Oracle ASMLib driver:                     [FAILED]
[root@W-DB2 ~]# /etc/init.d/oracleasm status
Checking if ASM is loaded: no
Checking if /dev/oracleasm is mounted: no


    两个rpm和一个tar包我确认都正常安装了,怎么会出现这种情况呢?我在公司测试是正常的啊。
    突然想到:内核无法加载oracleasm.ko但此模块的确在内核目录中,那原因只有一种:没有执行depmod。
    将新的内核模块放到内核目录中(/lib/modules/2.6.18-194.1.AXS3/*),内核并不能自动使用这个新模块。内核是否可以自动加载某个模块并不是去内核模块目录中搜索,而是从modules.dep中检索。depmod的工作就是将内核模块目录中的所有文件和modules.dep对比一下,如果新加的模块,就将路径加入modules.dep,以供内核识别。
    这的确是我忽视了,我知道往内核目录中放新模块之后,执行depmod是必须的,但是忘记在邮件里写上了。
    执行depmod -a之后,再次启动成功。

[root@W-DB2 ~]# /etc/init.d/oracleasm start
Initializing the Oracle ASMLib driver: [ OK ]
Scanning the system for Oracle ASMLib disks: [ OK ]
[root@W-DB2 ~]#


    启动成功之后又发现一个问题:在db2很快服务就执行完毕,但是在db1上却在Scanning ASMlib disks时很长时间才结束。我仍然通过sh -x /etc/init.d/oracleasm start没有发现具体原因,但是看其中写到了/var/log/oracleasm日志中了。通过这个日志文件发现oracleasm服务在扫描device mapper设备,一共扫描20个设备,每个设备扫描4次,而且这些设备都不存在。

[root@W-DB1 etc]# cat /var/log/oracleasm
Loading module "oracleasm": failed
Unable to load module "oracleasm"
Loading module "oracleasm": oracleasm
Mounting ASMlib driver filesystem: /dev/oracleasm
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
oracleasm-read-label: Unable to open device "/dev/dm-0": No such file or directory
oracleasm-read-label: Unable to open device "/dev/dm-0": No such file or directory
oracleasm-read-label: Unable to open device "/dev/dm-0": No such file or directory
oracleasm-read-label: Unable to open device "/dev/dm-0": No such file or directory
oracleasm-read-label: Unable to open device "/dev/dm-1": No such file or directory
oracleasm-read-label: Unable to open device "/dev/dm-1": No such file or directory
oracleasm-read-label: Unable to open device "/dev/dm-1": No such file or directory
oracleasm-read-label: Unable to open device "/dev/dm-1": No such file or directory


    看来问题就在/dev/dm-0这些设备是怎么来的。
    问了一下,是当时在db1机器上创建了一些lvm,后来不用删除了。看来问题就在这。device mapper设备一般是lvm或者multipath产生的。
    那么既然lvm已经删除了,系统中通过fdisk和sfdisk都看不到了,为什么oracleasm服务还能扫描到?从哪里取的?
    在/etc下面整个找了一下(grep -R md-0 *),没有任何文件中包含。后来想到了内存中,继而想到/proc/partitions中,的确在此。

[root@W-DB1 oracleasm]# cat /proc/partitions
major minor #blocks name

   8 0 142577664 sda
   8 1 54508513 sda1
   8 2 61440592 sda2
   8 3 16386300 sda3
   8 4 0 sda4
   8 5 10241406 sda5
   8 16 1754664960 sdb
   8 17 0 sdb1
   8 18 488287642 sdb2
   8 19 488287642 sdb3
   8 21 987934 sdb5
   8 22 987966 sdb6
   8 23 987966 sdb7
   8 24 987966 sdb8
   8 25 939771 sdb9
 253 0 102400 dm-0
 253 1 102400 dm-1
 253 2 102400 dm-2
 253 3 102400 dm-3
 253 4 102400 dm-4
 253 5 102400 dm-5
 253 6 102400 dm-6
 253 7 5242880 dm-7
 253 8 5242880 dm-8
 253 9 5242880 dm-9
 253 10 5242880 dm-10
 253 11 5242880 dm-11
 253 12 5242880 dm-12
 253 13 5242880 dm-13
 253 14 5242880 dm-14
 253 15 5242880 dm-15
 253 16 5242880 dm-16
 253 17 5242880 dm-17
 253 18 5242880 dm-18
 253 19 5242880 dm-19



[root@W-DB2 ~]# cat /proc/partitions
major minor #blocks name

   8 0 142577664 sda
   8 1 54508513 sda1
   8 2 61440592 sda2
   8 3 16386300 sda3
   8 4 0 sda4
   8 5 10241406 sda5
   8 16 1754664960 sdb
   8 17 0 sdb1
   8 18 488287642 sdb2
   8 19 488287642 sdb3
   8 21 987934 sdb5
   8 22 987966 sdb6
   8 23 987966 sdb7
   8 24 987966 sdb8
   8 25 939771 sdb9


    db1和db2上的/proc/partitions的确不同,原因就是在db1上创建了lvm而db2上没有去识别。
    那怎么删除这些dm设备呢?
    重启?肯定行,但是不重启怎么解决?
    直接编辑/proc/partitions并删除里面的dm-0等?肯定不行,因为/proc下是内存里面的映射,是无法删除的。
    其实了解了device mapper的管理就简单了。提供一个参考命令dmsetup,这是对dm设备管理的命令,可以使用remove_all参数删除所有失效了的dm设备。

[root@W-DB1 oracleasm]# dmsetup remove_all
[root@W-DB1 oracleasm]# cat /proc/partitions
major minor #blocks name
   8 0 142577664 sda
   8 1 54508513 sda1
   8 2 61440592 sda2
   8 3 16386300 sda3
   8 4 0 sda4
   8 5 10241406 sda5
   8 16 1754664960 sdb
   8 17 0 sdb1
   8 18 488287642 sdb2
   8 19 488287642 sdb3
   8 21 987934 sdb5
   8 22 987966 sdb6
   8 23 987966 sdb7
   8 24 987966 sdb8
   8 25 939771 sdb9
[root@W-DB1 oracleasm]# /etc/init.d/oracleasm restart
Dropping Oracle ASMLib disks: [ OK ]
Shutting down the Oracle ASMLib driver: [ OK ]
Initializing the Oracle ASMLib driver: [ OK ]
Scanning the system for Oracle ASMLib disks: [ OK ]
[root@W-DB1 oracleasm]#


    之后oracleasm服务可以很快的执行完毕。问题解决。


    插曲:在公司测试发现也/etc/init.d/oracleasm start无任何返回,通过sh -x /etc/init.d/oracleasm start发现。

+ case "$1" in
+ start
+ '[' false '!=' true ']'
+ exit 0


    通过查看/etc/init.d/oracleasm文件,发现这个false是一个$ORACLEASM_ENABLED变量,这个变量是从/etc/sysconfig/oracleasm中取的,默认是:

ORACLEASM_ENABLED=false


    将其修改为

ORACLEASM_ENABLED=true


    这样可以正常启动oracleasm服务了。但是在总署的时候我没有更改这个文件,难道是装oracle的哥们改的?我感觉他分析不出来这个位置啊!也可能他找到某些文档说明改此处了?
阅读(714) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~