新闻出版总署在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服务了。但是在总署的时候我没有更改这个文件,难道是装oracle的哥们改的?我感觉他分析不出来这个位置啊!也可能他找到某些文档说明改此处了?
阅读(3192) | 评论(1) | 转发(1) |