合 在Oracle中,创建ASM磁盘的N种方法(udev、asmlib、faking)
Tags: OracleASMasmliboracleasmudevfaking
- 前言
- 创建asm磁盘的各种方法
- 方法一:Faking 方式(只能用于Restart环境,测试环境推荐)
- 其它命令
- 方法二:直接修改/etc/sysconfig/rawdevices配置raw(rhel6之后不支持)
- 方法三:Udev方式(生产推荐使用)
- udev下的方法一:uuid方式
- RedHat 5 UDEV SCSI Rules配置
- RedHat 6 UDEV SCSI Rules
- 配置 udev 绑定的 scsi_id
- 创建并配置 udev rules 文件
- udevadm进行测试
- 添加完成后,重启 udev,不同 Linux 发行版本重启方式不一样。
- 查看绑定的 asm,如果此时还是看不到 asm disk,请重启操作系统后再查看。
- udev下的方法二:raw方式
- 裸设备概述
- 方法四:Asmlib方式(生产使用)
- 系统版本号
- Oracle asmlib下载
- 上传并安装上述的三个rpm软件包:
- 配置ASM
- 系统添加磁盘
- grid软件安装完毕后配置asm_diskstring 路径
- 测试
- 日志
- 报错:
- ASM: Device is already labeled for ASM disk
- 总结
- oracleasm asmlib 常用命令
- udev常用命令
- 查询ASM磁盘
前言
无论是安装单机版的asm还是rac都离不开ASM磁盘组的创建,创建ASM磁盘组的关键是创建好需要的asm磁盘,发现很多网友安装grid软件和grid实例,都在磁盘的创建这里有很大的问题,本人又是喜欢总结的人,那么今天我就总结了下各种创建asm磁盘的方法,以备大家查阅。
创建asm磁盘的各种方法
方法一:Faking 方式(只能用于Restart环境,测试环境推荐)
该方法不需要添加额外的磁盘,直接在已有的磁盘上来创建,本人推荐的方法之一。
root用户下执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | mkdir -p /oracle/asmdisk dd if=/dev/zero of=/oracle/asmdisk/disk1 bs=1024k count=1000 dd if=/dev/zero of=/oracle/asmdisk/disk2 bs=1024k count=1000 dd if=/dev/zero of=/oracle/asmdisk/disk3 bs=1024k count=1000 dd if=/dev/zero of=/oracle/asmdisk/disk4 bs=1024k count=1000 dd if=/dev/zero of=/oracle/asmdisk/disk5 bs=1024k count=1000 /sbin/losetup /dev/loop1 /oracle/asmdisk/disk1 /sbin/losetup /dev/loop2 /oracle/asmdisk/disk2 /sbin/losetup /dev/loop3 /oracle/asmdisk/disk3 /sbin/losetup /dev/loop4 /oracle/asmdisk/disk4 /sbin/losetup /dev/loop5 /oracle/asmdisk/disk5 raw /dev/raw/raw1 /dev/loop1 raw /dev/raw/raw2 /dev/loop2 raw /dev/raw/raw3 /dev/loop3 raw /dev/raw/raw4 /dev/loop4 raw /dev/raw/raw5 /dev/loop5 chmod 660 /dev/raw/raw1 chmod 660 /dev/raw/raw2 chmod 660 /dev/raw/raw3 chmod 660 /dev/raw/raw4 chmod 660 /dev/raw/raw5 chown oracle:dba /dev/raw/raw1 chown oracle:dba /dev/raw/raw2 chown oracle:dba /dev/raw/raw3 chown oracle:dba /dev/raw/raw4 chown oracle:dba /dev/raw/raw5 ------ 将以下内容添加到文件/etc/rc.local文件中 /sbin/losetup /dev/loop1 /oracle/asmdisk/disk1 /sbin/losetup /dev/loop2 /oracle/asmdisk/disk2 /sbin/losetup /dev/loop3 /oracle/asmdisk/disk3 /sbin/losetup /dev/loop4 /oracle/asmdisk/disk4 /sbin/losetup /dev/loop5 /oracle/asmdisk/disk5 raw /dev/raw/raw1 /dev/loop1 raw /dev/raw/raw2 /dev/loop2 raw /dev/raw/raw3 /dev/loop3 raw /dev/raw/raw4 /dev/loop4 raw /dev/raw/raw5 /dev/loop5 chmod 660 /dev/raw/raw1 chmod 660 /dev/raw/raw2 chmod 660 /dev/raw/raw3 chmod 660 /dev/raw/raw4 chmod 660 /dev/raw/raw5 chown oracle:dba /dev/raw/raw1 chown oracle:dba /dev/raw/raw2 chown oracle:dba /dev/raw/raw3 chown oracle:dba /dev/raw/raw4 chown oracle:dba /dev/raw/raw5 |
查看结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 | SQL> alter system set asm_diskstring='/dev/asm-disk\*','/dev/raw/raw\*'; System altered. SQL> SELECT a.group_number, disk_number,mount_status, a.name, path FROM v$asm_disk a order by a.disk_number; GROUP_NUMBER DISK_NUMBER MOUNT_S NAME PATH ------------ ----------- ------- ------------------------------ ------------------------------------------------------------ 0 0 CLOSED /dev/raw/raw2 1 0 CACHED DATA_0000 /dev/asm-diskb 2 0 CACHED FRA_0000 /dev/asm-diske 1 1 CACHED DATA_0001 /dev/asm-diskc 0 1 CLOSED /dev/raw/raw1 1 2 CACHED DATA_0002 /dev/asm-diskd 6 rows selected. SQL> |
其它命令
添加loop设备个数:
第一种办法:修改 /etc/modprobe.conf 文件添加参数:options loop max_loop=20
可以通过 modprobe -v loop
命令立即加载该模块,或重启
第二种办法(通用):mknod -m 0660 /dev/loopX b 7 X
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | -- 创建loop设备 --mknod -m 0660 /dev/loopX b 7 X mknod -m 0660 /dev/loop3 b 7 3 raw -qa losetup -a mknod -m 0660 /dev/loop9 b 7 9 losetup -d loop1 #删除loop设备 losetup -a mkdir /asmdisk dd if=/dev/zero of=/asmdisk/disk1 bs=1024k count=2000 dd if=/dev/zero of=/asmdisk/disk2 bs=1024k count=2000 dd if=/dev/zero of=/asmdisk/disk3 bs=1024k count=2000 /sbin/losetup /dev/loop1 /asmdisk/disk1 /sbin/losetup /dev/loop2 /asmdisk/disk2 /sbin/losetup /dev/loop3 /asmdisk/disk3 oracleasm createdisk ASM1 /dev/loop1 oracleasm createdisk ASM2 /dev/loop2 oracleasm createdisk ASM3 /dev/loop3 ----以下内容加入到/etc/rc.local /sbin/losetup /dev/loop1 /asmdisk/disk1 /sbin/losetup /dev/loop2 /asmdisk/disk2 /sbin/losetup /dev/loop3 /asmdisk/disk3 oracleasm scandisks linux7下需要执行chmod +x /etc/rc.d/rc.local |
方法二:直接修改/etc/sysconfig/rawdevices配置raw(rhel6之后不支持)
采用下面的方式来增加磁盘,即直接修改/etc/sysconfig/rawdevices (root帐户)
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这个文件。
[root@oradb ~]# vi /etc/sysconfig/rawdevices
[root@oradb ~]# cat /etc/sysconfig/rawdevices --查看增加的内容为raw6,raw7
/dev/raw/raw2 /dev/sdb6
/dev/raw/raw3 /dev/sdb7
chown oracle:dba /dev/raw/raw[6-7] --修改属主,否则创建磁盘组时提示权限不够
[root@rhel5 ~]# chown oracle:dba /dev/raw/raw6
[root@rhel5 ~]# chown oracle:dba /dev/raw/raw7
[root@rhel5 ~]# ll /dev/raw/
total 0
crw-rw---- 1 oracle dba 162, 1 Dec 30 14:47 raw1
crw-rw---- 1 oracle dba 162, 2 Dec 30 14:47 raw2
crw-rw---- 1 oracle dba 162, 3 Dec 30 14:36 raw3
crw-rw---- 1 oracle dba 162, 4 Dec 30 14:36 raw4
crw-rw---- 1 oracle dba 162, 5 Dec 30 14:36 raw5
crw------- 1 oracle dba 162, 6 Dec 30 14:36 raw6
crw------- 1 oracle dba 162, 7 Dec 30 14:36 raw7
[root@rhel5 ~]#
重启裸设备服务
[root@rhel5 ~]# /sbin/service rawdevices restart
Assigning devices:
/dev/raw/raw6 --> /dev/sdb6
/dev/raw/raw6: bound to major 8, minor 22
/dev/raw/raw7 --> /dev/sdb7
/dev/raw/raw7: bound to major 8, minor 23
done
[root@rhel5 ~]#
将下面的内容增加到/etc/rc.local文件(root帐户),重新启动主机,使得属主变为oracle
chown oracle:dba /dev/raw/raw6
chown oracle:dba /dev/raw/raw7
chmod 660 /dev/raw/raw6
chmod 660 /dev/raw/raw7
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
+ASM STARTED
SQL> set line 999
SQL> select name,state,free_mb,required_mirror_free_mb,usable_file_mb from v$asm_diskgroup;
NAME STATE FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB
----------------- ----------- ---------- ----------------------- --------------
DATA MOUNTED 941 0 941
DG1 MOUNTED 1862 0 931
SQL> create diskgroup DG1 normal redundancy disk '/dev/raw/raw6','/dev/raw/raw7'; --创建磁盘组DG1
SQL> select * from v$fixed_table where name like '%ASM%'; --查看和asm相关的视图
SQL> select name,allocation_unit_size,state,type,
2 free_mb,required_mirror_free_mb req_mi_fr_mb,usable_file_mb
3 from v$asm_diskgroup;
NAME ALLOCATION_UNIT_SIZE STATE TYPE FREE_MB REQ_MI_FR_MB USABLE_FILE_MB
--------------- -------------------- ----------- ------ ---------- ------------ --------------
DG1 1048576 MOUNTED NORMAL 296 0 148
SQL> create diskgroup DG2 normal redundancy disk '/dev/raw/raw3','/dev/raw/raw4'; --创建磁盘组DG2
SQL> select name,state,free_mb,required_mirror_free_mb,usable_file_mb --查看磁盘组的状态及信息
2 from v$asm_diskgroup;
NAME STATE FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB
--------------- ----------- ---------- ----------------------- --------------
DG1 MOUNTED 296 0 148
DG2 MOUNTED 296 0 148
SQL> select disk_number,total_mb,free_mb from v$asm_disk;
DISK_NUMBER TOTAL_MB FREE_MB
----------- ---------- ----------
1 199 148
0 199 148
1 199 148
0 199 148
重新启动Linux 主机后
SQL> startup --重新启动ASM实例,收到了磁盘组insufficient信息
ASM instance started
ORA-15032: not all alterations performed
ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DG2"
ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DG1"
SQL> ho ls -hlt /dev/raw # LINUX主机重新启动之后属主性质已发生变化
total 0
crw------- 1 root root 162, 4 Nov 10 20:28 raw4
crw------- 1 root root 162, 3 Nov 10 20:28 raw3
crw------- 1 root root 162, 2 Nov 10 20:28 raw2
crw------- 1 root root 162, 1 Nov 10 20:28 raw1
原因:原始设备在引导时会重新映射。默认情况下,在引导时原始设备的拥有者将更改为root 用户
将下面的内容增加到/etc/rc.local文件(root帐户),重新启动主机,使得属主变为oracle,则不再出现类似的提示
chown oracle:dba /dev/raw/raw1
chown oracle:dba /dev/raw/raw2
chown oracle:dba /dev/raw/raw3
chown oracle:dba /dev/raw/raw4
chmod 660 /dev/raw/raw1
chmod 660 /dev/raw/raw2
chmod 660 /dev/raw/raw3
chmod 660 /dev/raw/raw4
SQL> drop diskgroup dg1; --将刚才创建的两个磁盘组删除
SQL> drop diskgroup dg2;
使用root帐户清除/etc/udev/rules.d/60-raw.rules /etc/sysconfig/rawdevices 以及/etc/rc.local刚刚增加的记录
便于下面使用asmlib来创建asm磁盘
方法三:Udev方式(生产推荐使用)
又可以分为2种方式,采用uuid来绑定或采用raw来绑定,采用uuid需要添加多块磁盘,而采用raw方式不需要添加多个磁盘。
udev下的方法一:uuid方式
RedHat 5 UDEV SCSI Rules配置
1 获取需要绑定为ASM Disk的磁盘uuid
1 2 | # /sbin/scsi_id -g -u -s /block/sdb SATA_VBOX_HARDDISK_VBd306dbe0-df3367e3_ |
2 新建/etc/udev/rules.d/99-oracle-asmdevices.rules,增加以下内容