Oracle ASM Filter Driver(Oracle ASMFD)消除了在系统每次被重启后Oracle ASM需要重新绑定磁盘设备来简化对磁盘设备的配置与管理。Oracle ASM Filter Driver(Oracle ASMFD)是一种内置在Oracle ASM磁盘的IO路径中的内核模块。Oracle ASM使用filter driver来验证对Oracle ASM磁盘的写IO操作。Oracle ASM Filter Driver会拒绝任何无效的IO请求。这种操作消除了意外覆盖Oracle ASM磁盘而损坏磁盘组中的磁盘与文件。例如,Oracle ASM Filter Driver会过滤掉所有可能意外覆盖磁盘的非Oracle IO操作。从Oracle 12.2开始,Oracle ASM Filter Driver(Oracle ASMFD)在系统安装Oracle ASMLIB的情况下不能被安装,如果你想安装与配置Oracle ASMFD,那么必须首先卸载Oracle ASMLIB。Oracle 12.2的ASMFD不支持扩展分区表。
配置Oracle ASM Filter Driver
可以在安装Oracle Grid Infrastructure时或在安装Oracle Grid Infrastructure后对磁盘设备永久性配置Oracle ASM Filter Driver(Oracle ASMFD)。
在安装Oracle Grid Infrastructure时配置Oracle ASM Filter Driver
在安装Oracle Grid Infrastructure时,可以选择启用自动安装与配置Oracle ASM Filter Driver。如果在安装Oracle Grid Infrastructure所在的系统中没有使用udev,那么可以在在安装Oracle Grid Infrastructure之前执行下面的操作来为Oracle ASMFD准备磁盘。下面的操作必须在Oracle Grid Infrastructure软件包在Oracle Grid Infrastructure home目录中必须解压后,但在配置ASMFD之前执行。
1.为了使用Oracle ASM Filter Driver来配置共享磁盘,以root用户来设置环境变量$ORACLE_HOME为Grid Home目录,设置环境变量$ORACLE_BASE为临时目录
# set ORACLE_HOME=/u01/app/oracle/12.2.0/grid # set ORACLE_BASE=/tmp
ORACLE_BASE变量被设置为临时目录可以避免在安装Oracle Grid Infrastructure之前在Grid Home目录中创建诊断或跟踪文件。在执行下面的操作之前,确保是在$ORACLE_HOME/bin目录中执行命令。
2.使用ASMCMD afd_label命令来为Oracle ASM Filter Driver来准备磁盘.
#asmcmd afd_label DATA1 /dev/disk1a --init
3.使用ASMCMD afd_lslbl命令来验证磁盘是否已经被标记可以为Oracle ASMFD所使用
#asmcmd afd_lslbl /dev/disk1a
查看某块磁盘
[rootd@cs1 ~]./asmcmd afd_lslbl /dev/asmdisk01 -------------------------------------------------------------------------------- Label Duplicate Path ================================================================================ CRS2 /dev/asmdisk01
列出已经标记可以为Oracle ASMFD所使用的所有磁盘
[grid@jytest1 ~]$ asmcmd afd_lslbl -------------------------------------------------------------------------------- Label Duplicate Path ================================================================================ CRS1 /dev/asmdisk02 CRS2 /dev/asmdisk01 DATA1 /dev/asmdisk03 DATA2 /dev/asmdisk04 FRA1 /dev/asmdisk07 TEST1 /dev/asmdisk05 TEST2 /dev/asmdisk06
4.当为Oracle ASMFD准备完磁盘后清除变量ORACLE_BASE
# unset ORACLE_BASE
5.运行安装脚本(gridSetup.sh)来安装Oracle Grid Infrastructure并启用Oracle ASM Filter Driver配置。
在安装Oracle Grid Infrastructure后配置Oracle ASM Filter Driver
如果在安装Grid Infrastructure时没有启用配置Oracle ASMFD,那么可以使用Oracle ASMFD来手动配置Oracle ASM设备。
为Oracle Grid Infrastructure Clusterware环境配置Oracle ASM,具体操作如下:
1.以Oracle Grid Infrastructure用户来更新Oracle ASM磁盘发现路径来使Oracle ASMFD来发现磁盘。
首先检查当前Oracle ASM磁盘发现路径并更新
[grid@cs1 ~]$ asmcmd dsget parameter:/dev/sd*, /dev/asm* profile:/dev/sd*,/dev/asm*
将’AFD:*’增加到发现磁盘路径中
[grid@cs1 ~]$ asmcmd dsset 'dev/sd*','/dev/asm*','AFD:*' [grid@cs1 ~]$ asmcmd dsget parameter:dev/sd*, /dev/asm*, AFD:* profile:dev/sd*,/dev/asm*,AFD:*
2.以Oracle Grid Infrastructure用户来获取cluster中的节点列表与角色
[grid@cs1 ~]$ olsnodes -a cs1 Hub cs2 Hub
3.在每个Hub与Leaf节点上,可以以回滚或非回滚模式来执行以下操作
3.1以root用户来停止Oracle Grid Infrastructure
# $ORACLE_HOME/bin/crsctl stop crs
如果命令返回错误,那么执行下面的命令来强制停止Oracle Grid Infrastructure
# $ORACLE_HOME/bin/crsctl stop crs -f
3.2在节点层面以root用户来配置Oracle ASMFD
# $ORACLE_HOME/bin/asmcmd afd_configure
3.3以Oracle Grid Infrastructure用户来验证Oracle ASMFD的状态
[grid@cs2 ~]$ asmcmd afd_state ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 'cs2.jy.net'
3.4以root用户来启动Oracle Clusterware stack
# $ORACLE_HOME/bin/crsctl start crs
3.5以Oracle Grid Infrastructure用户来设置Oracle ASMFD发现磁盘路径为步骤3.1中所检索到的原始Oracle ASM磁盘发现路径
[grid@cs1 ~]$ asmcmd dsset 'dev/sd*','/dev/asm*'
迁移不包含OCR或vote文件的磁盘组到Oracle ASMFD
1.以Oracle Grid Infrastructure用户来执行以下操作
2.列出已经存在的磁盘组
[grid@cs2 ~]$ asmcmd lsdg State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED EXTERN N 512 512 4096 4194304 40960 1544 0 1544 0 Y CRS/ MOUNTED EXTERN N 512 512 4096 4194304 40960 860 0 860 0 N DATA/ MOUNTED NORMAL N 512 512 4096 4194304 40960 40704 0 20352 0 N DN/
3.列出相关磁盘
[grid@cs2 ~]$ asmcmd lsdsk -G DN Path /dev/asmdisk03 /dev/asmdisk05
从下面的查询可以看到/dev/asmdisk03和/dev/asmdisk05的label字段为空
SQL> select group_number,disk_number,name,label,path from v$asm_disk; GROUP_NUMBER DISK_NUMBER NAME LABEL PATH ------------ ----------- ------------------------------ -------------------------------------------------- -------------------------------------------------- 0 0 CRS2 /dev/asmdisk01 0 1 CRS1 /dev/asmdisk02 0 2 DATA1 /dev/asmdisk04 3 0 DN_0000 /dev/asmdisk03 3 1 DN_0001 /dev/asmdisk05 1 0 CRS1 CRS1 AFD:CRS1 2 0 DATA1 DATA1 AFD:DATA1 1 1 CRS2 CRS2 AFD:CRS2
4.检查Oracle ASM是否是活动状态
[grid@cs2 ~]$ srvctl status asm ASM is running on cs1,cs2
5.在所有节点上停止数据库与dismount磁盘组
[grid@cs2 ~]$srvctl stop diskgroup -diskgroup DN -f
6.在每个Hub节点上执行以下命令来为磁盘组中的所有已经存在的磁盘进行标记
[grid@cs2 ~]$ asmcmd afd_label DN1 /dev/asmdisk03 --migrate [grid@cs2 ~]$ asmcmd afd_label DN2 /dev/asmdisk05 --migrate
7.在所有Hub节点上扫描磁盘
[grid@cs1 ~]$ asmcmd afd_scan [grid@cs2 ~]$ asmcmd afd_scan
8.在所有节点启动数据库并mount磁盘组
[grid@cs2 ~]$ srvctl start diskgroup -diskgroup DN
从下面的查询可以看到/dev/asmdisk03和/dev/asmdisk05的label字段分别显示为DN1和DN2
SQL> select group_number,disk_number,name,label,path from v$asm_disk; GROUP_NUMBER DISK_NUMBER NAME LABEL PATH ------------ ----------- ------------------------------ -------------------------------------------------- -------------------------------------------------- 0 0 CRS2 /dev/asmdisk01 0 1 DN2 /dev/asmdisk05 0 2 DN1 /dev/asmdisk03 0 3 CRS1 /dev/asmdisk02 0 4 DATA1 /dev/asmdisk04 1 1 CRS2 CRS2 AFD:CRS2 2 0 DATA1 DATA1 AFD:DATA1 1 0 CRS1 CRS1 AFD:CRS1 3 0 DN_0000 DN1 AFD:DN1 3 1 DN_0001 DN2 AFD:DN2
现在可以将原先的 udev rules 文件移除。当然,这要在所有节点中都运行。以后如果服务器再次重启,AFD 就会完全接管了。
[root@cs1 bin]# cd /etc/udev/rules.d/ [root@cs1 rules.d]# ls -lrt total 16 -rw-r--r--. 1 root root 709 Mar 6 2015 70-persistent-ipoib.rules -rw-r--r-- 1 root root 1416 Mar 9 12:23 99-my-asmdevices.rules -rw-r--r-- 1 root root 224 Mar 9 15:52 53-afd.rules -rw-r--r-- 1 root root 190 Mar 9 15:54 55-usm.rules [root@cs1 rules.d]# mv 99-my-asmdevices.rules 99-my-asmdevices.rules.bak [root@cs1 rules.d]# cat 53-afd.rules # # AFD devices KERNEL=="oracleafd/.*", OWNER="grid", GROUP="asmadmin", MODE="0775" KERNEL=="oracleafd/*", OWNER="grid", GROUP="asmadmin", MODE="0775" KERNEL=="oracleafd/disks/*", OWNER="grid", GROUP="asmadmin", MODE="0664" [root@cs1 rules.d]# ls -l /dev/oracleafd/disks total 20 -rwxrwx--- 1 grid oinstall 15 Aug 30 14:30 CRS1 -rwxrwx--- 1 grid oinstall 15 Aug 30 14:30 CRS2 -rwxrwx--- 1 grid oinstall 15 Aug 30 14:30 DATA1 -rwxrwx--- 1 grid oinstall 15 Aug 30 17:42 DN1 -rwxrwx--- 1 grid oinstall 15 Aug 30 17:42 DN2 [root@cs2 bin]# cd /etc/udev/rules.d/ [root@cs2 rules.d]# ls -lrt total 16 -rw-r--r--. 1 root root 709 Mar 6 2015 70-persistent-ipoib.rules -rw-r--r-- 1 root root 1416 Mar 9 12:23 99-my-asmdevices.rules -rw-r--r-- 1 root root 224 Mar 9 15:52 53-afd.rules -rw-r--r-- 1 root root 190 Mar 9 15:54 55-usm.rules [root@cs2 rules.d]# mv 99-my-asmdevices.rules 99-my-asmdevices.rules.bak [root@cs2 rules.d]# cat 53-afd.rules # # AFD devices KERNEL=="oracleafd/.*", OWNER="grid", GROUP="asmadmin", MODE="0775" KERNEL=="oracleafd/*", OWNER="grid", GROUP="asmadmin", MODE="0775" KERNEL=="oracleafd/disks/*", OWNER="grid", GROUP="asmadmin", MODE="0664" [root@cs2 rules.d]# ls -l /dev/oracleafd/disks total 20 -rwxrwx--- 1 grid oinstall 15 Aug 30 14:30 CRS1 -rwxrwx--- 1 grid oinstall 15 Aug 30 14:30 CRS2 -rwxrwx--- 1 grid oinstall 15 Aug 30 14:30 DATA1 -rwxrwx--- 1 grid oinstall 15 Aug 30 17:42 DN1 -rwxrwx--- 1 grid oinstall 15 Aug 30 17:42 DN2
其实,AFD 也在使用 udev
迁移包含OCR或vote文件的磁盘组到Oracle ASMFD
1.以root用户来列出包含OCR和vote文件的磁盘组
[root@cs1 ~]# cd /u01/app/product/12.2.0/crs/bin [root@cs1 bin]# sh ocrcheck -config Oracle Cluster Registry configuration is : Device/File Name : +CRS Device/File Name : +DATA [root@cs1 bin]# sh crsctl query css votedisk ## STATE File Universal Id File Name Disk group -- ----- ----------------- --------- --------- 1. ONLINE 750a78e1ae984fcdbfb4dbf44d337a77 (/dev/asmdisk02) [CRS] Located 1 voting disk(s).
2.以Oracle Grid Infrastructure用户来列出与磁盘组相关的磁盘
[grid@cs2 ~]$ asmcmd lsdsk -G CRS Path /dev/asmdisk01 /dev/asmdisk02
3.以root用户来在所有节点上停止数据库与Oracle Clusterware
[root@cs1 bin]# ./crsctl stop cluster -all CRS-2673: Attempting to stop 'ora.crsd' on 'cs2' CRS-2673: Attempting to stop 'ora.crsd' on 'cs1' CRS-2790: Starting shutdown of Cluster Ready Services-managed resources on server 'cs2' CRS-2790: Starting shutdown of Cluster Ready Services-managed resources on server 'cs1' CRS-2673: Attempting to stop 'ora.cs.db' on 'cs1' CRS-2673: Attempting to stop 'ora.qosmserver' on 'cs2' CRS-2673: Attempting to stop 'ora.cs.db' on 'cs2' CRS-2673: Attempting to stop 'ora.chad' on 'cs2' CRS-2673: Attempting to stop 'ora.gns' on 'cs2' CRS-2677: Stop of 'ora.gns' on 'cs2' succeeded CRS-2677: Stop of 'ora.cs.db' on 'cs2' succeeded CRS-2673: Attempting to stop 'ora.CRS.dg' on 'cs2' CRS-2673: Attempting to stop 'ora.DATA.dg' on 'cs2' CRS-2673: Attempting to stop 'ora.LISTENER.lsnr' on 'cs2' CRS-2673: Attempting to stop 'ora.LISTENER_SCAN2.lsnr' on 'cs2' CRS-2673: Attempting to stop 'ora.LISTENER_SCAN3.lsnr' on 'cs2' CRS-2673: Attempting to stop 'ora.cvu' on 'cs2' CRS-2673: Attempting to stop 'ora.gns.vip' on 'cs2' CRS-2677: Stop of 'ora.cs.db' on 'cs1' succeeded CRS-2677: Stop of 'ora.CRS.dg' on 'cs2' succeeded CRS-2673: Attempting to stop 'ora.LISTENER.lsnr' on 'cs1' CRS-2673: Attempting to stop 'ora.LISTENER_SCAN1.lsnr' on 'cs1' CRS-2677: Stop of 'ora.DATA.dg' on 'cs2' succeeded CRS-2673: Attempting to stop 'ora.asm' on 'cs2' CRS-2677: Stop of 'ora.asm' on 'cs2' succeeded CRS-2677: Stop of 'ora.LISTENER.lsnr' on 'cs1' succeeded CRS-2673: Attempting to stop 'ora.ASMNET1LSNR_ASM.lsnr' on 'cs2' CRS-2677: Stop of 'ora.LISTENER_SCAN1.lsnr' on 'cs1' succeeded CRS-2673: Attempting to stop 'ora.scan1.vip' on 'cs1' CRS-2677: Stop of 'ora.LISTENER.lsnr' on 'cs2' succeeded CRS-2677: Stop of 'ora.LISTENER_SCAN3.lsnr' on 'cs2' succeeded CRS-2677: Stop of 'ora.LISTENER_SCAN2.lsnr' on 'cs2' succeeded CRS-2677: Stop of 'ora.scan1.vip' on 'cs1' succeeded CRS-2673: Attempting to stop 'ora.cs2.vip' on 'cs2' CRS-2673: Attempting to stop 'ora.scan2.vip' on 'cs2' CRS-2673: Attempting to stop 'ora.scan3.vip' on 'cs2' CRS-2677: Stop of 'ora.gns.vip' on 'cs2' succeeded CRS-2677: Stop of 'ora.scan3.vip' on 'cs2' succeeded CRS-2677: Stop of 'ora.cs2.vip' on 'cs2' succeeded CRS-2677: Stop of 'ora.qosmserver' on 'cs2' succeeded CRS-2677: Stop of 'ora.scan2.vip' on 'cs2' succeeded CRS-2677: Stop of 'ora.ASMNET1LSNR_ASM.lsnr' on 'cs2' succeeded CRS-2673: Attempting to stop 'ora.chad' on 'cs1' CRS-2677: Stop of 'ora.cvu' on 'cs2' succeeded CRS-2677: Stop of 'ora.chad' on 'cs2' succeeded CRS-2673: Attempting to stop 'ora.ons' on 'cs2' CRS-2677: Stop of 'ora.ons' on 'cs2' succeeded CRS-2673: Attempting to stop 'ora.net1.network' on 'cs2' CRS-2677: Stop of 'ora.net1.network' on 'cs2' succeeded CRS-2792: Shutdown of Cluster Ready Services-managed resources on 'cs2' has completed CRS-2677: Stop of 'ora.crsd' on 'cs2' succeeded CRS-2673: Attempting to stop 'ora.ctssd' on 'cs2' CRS-2673: Attempting to stop 'ora.evmd' on 'cs2' CRS-2673: Attempting to stop 'ora.storage' on 'cs2' CRS-2677: Stop of 'ora.storage' on 'cs2' succeeded CRS-2673: Attempting to stop 'ora.asm' on 'cs2' CRS-2677: Stop of 'ora.ctssd' on 'cs2' succeeded CRS-2677: Stop of 'ora.evmd' on 'cs2' succeeded CRS-2677: Stop of 'ora.chad' on 'cs1' succeeded CRS-2673: Attempting to stop 'ora.mgmtdb' on 'cs1' CRS-2677: Stop of 'ora.mgmtdb' on 'cs1' succeeded CRS-2673: Attempting to stop 'ora.MGMTLSNR' on 'cs1' CRS-2673: Attempting to stop 'ora.CRS.dg' on 'cs1' CRS-2673: Attempting to stop 'ora.DATA.dg' on 'cs1' CRS-2677: Stop of 'ora.CRS.dg' on 'cs1' succeeded CRS-2677: Stop of 'ora.DATA.dg' on 'cs1' succeeded CRS-2673: Attempting to stop 'ora.asm' on 'cs1' CRS-2677: Stop of 'ora.MGMTLSNR' on 'cs1' succeeded CRS-2673: Attempting to stop 'ora.cs1.vip' on 'cs1' CRS-2677: Stop of 'ora.cs1.vip' on 'cs1' succeeded CRS-2677: Stop of 'ora.asm' on 'cs2' succeeded CRS-2673: Attempting to stop 'ora.cluster_interconnect.haip' on 'cs2' CRS-2677: Stop of 'ora.cluster_interconnect.haip' on 'cs2' succeeded CRS-2673: Attempting to stop 'ora.cssd' on 'cs2' CRS-2677: Stop of 'ora.cssd' on 'cs2' succeeded CRS-2677: Stop of 'ora.asm' on 'cs1' succeeded CRS-2673: Attempting to stop 'ora.ASMNET1LSNR_ASM.lsnr' on 'cs1' CRS-2677: Stop of 'ora.ASMNET1LSNR_ASM.lsnr' on 'cs1' succeeded CRS-2673: Attempting to stop 'ora.ons' on 'cs1' CRS-2677: Stop of 'ora.ons' on 'cs1' succeeded CRS-2673: Attempting to stop 'ora.net1.network' on 'cs1' CRS-2677: Stop of 'ora.net1.network' on 'cs1' succeeded CRS-2792: Shutdown of Cluster Ready Services-managed resources on 'cs1' has completed CRS-2677: Stop of 'ora.crsd' on 'cs1' succeeded CRS-2673: Attempting to stop 'ora.ctssd' on 'cs1' CRS-2673: Attempting to stop 'ora.evmd' on 'cs1' CRS-2673: Attempting to stop 'ora.storage' on 'cs1' CRS-2677: Stop of 'ora.storage' on 'cs1' succeeded CRS-2673: Attempting to stop 'ora.asm' on 'cs1' CRS-2677: Stop of 'ora.ctssd' on 'cs1' succeeded CRS-2677: Stop of 'ora.evmd' on 'cs1' succeeded CRS-2677: Stop of 'ora.asm' on 'cs1' succeeded CRS-2673: Attempting to stop 'ora.cluster_interconnect.haip' on 'cs1' CRS-2677: Stop of 'ora.cluster_interconnect.haip' on 'cs1' succeeded CRS-2673: Attempting to stop 'ora.cssd' on 'cs1' CRS-2677: Stop of 'ora.cssd' on 'cs1' succeeded
4.以Oracle Grid Infrastructure用户来执行下面的命令为每个Hub节点上的磁盘组中的磁盘进行标记
[grid@cs2 ~]$ asmcmd afd_label DN1 /dev/asmdisk03 [grid@cs2 ~]$ asmcmd afd_label DN2 /dev/asmdisk05
5.以Oracle Grid Infrastructure用户来执行下面的命令对每个Hub节点进行磁盘重新扫描
[grid@cs1 ~]$ asmcmd afd_scan [grid@cs2 ~]$ asmcmd afd_scan
6.以root用户来在所有节点上启用Oracle Clusterware stack并mount OCR与vote文件磁盘与数据库
[root@cs1 bin]# ./crsctl start cluster -all CRS-2672: Attempting to start 'ora.cssdmonitor' on 'cs1' CRS-2672: Attempting to start 'ora.evmd' on 'cs1' CRS-2672: Attempting to start 'ora.cssdmonitor' on 'cs2' CRS-2672: Attempting to start 'ora.evmd' on 'cs2' CRS-2676: Start of 'ora.cssdmonitor' on 'cs1' succeeded CRS-2672: Attempting to start 'ora.cssd' on 'cs1' CRS-2672: Attempting to start 'ora.diskmon' on 'cs1' CRS-2676: Start of 'ora.diskmon' on 'cs1' succeeded CRS-2676: Start of 'ora.evmd' on 'cs1' succeeded CRS-2676: Start of 'ora.cssdmonitor' on 'cs2' succeeded CRS-2672: Attempting to start 'ora.cssd' on 'cs2' CRS-2672: Attempting to start 'ora.diskmon' on 'cs2' CRS-2676: Start of 'ora.diskmon' on 'cs2' succeeded CRS-2676: Start of 'ora.evmd' on 'cs2' succeeded CRS-2676: Start of 'ora.cssd' on 'cs1' succeeded CRS-2672: Attempting to start 'ora.ctssd' on 'cs1' CRS-2672: Attempting to start 'ora.cluster_interconnect.haip' on 'cs1' CRS-2676: Start of 'ora.cssd' on 'cs2' succeeded CRS-2672: Attempting to start 'ora.ctssd' on 'cs2' CRS-2672: Attempting to start 'ora.cluster_interconnect.haip' on 'cs2' CRS-2676: Start of 'ora.ctssd' on 'cs1' succeeded CRS-2676: Start of 'ora.ctssd' on 'cs2' succeeded CRS-2676: Start of 'ora.cluster_interconnect.haip' on 'cs1' succeeded CRS-2672: Attempting to start 'ora.asm' on 'cs1' CRS-2676: Start of 'ora.cluster_interconnect.haip' on 'cs2' succeeded CRS-2672: Attempting to start 'ora.asm' on 'cs2' CRS-2676: Start of 'ora.asm' on 'cs2' succeeded CRS-2672: Attempting to start 'ora.storage' on 'cs2' CRS-2676: Start of 'ora.asm' on 'cs1' succeeded CRS-2672: Attempting to start 'ora.storage' on 'cs1' CRS-2676: Start of 'ora.storage' on 'cs1' succeeded CRS-2672: Attempting to start 'ora.crsd' on 'cs1' CRS-2676: Start of 'ora.crsd' on 'cs1' succeeded CRS-2676: Start of 'ora.storage' on 'cs2' succeeded CRS-2672: Attempting to start 'ora.crsd' on 'cs2' CRS-2676: Start of 'ora.crsd' on 'cs2' succeeded
判断Oracle ASM Filter Driver是否已经配置
可以通过判断Oracle ASM实例的SYS_ASMFD_PROPERTIES的AFD_STATE参数值来判断Oracle ASMFD是否被配置。也可以使用ASMCMD afd_state命令来检查Oracle ASMFD的状态
[grid@cs1 ~]$ asmcmd afd_state ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'DISABLED' on host 'cs1.jy.net' [grid@cs2 ~]$ asmcmd afd_state ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 'cs2.jy.net'
下面的查询如果AFD_STATE参数值等于NOT AVAILABLE就表示Oracle ASMFD没有被配置
SQL> select sys_context('SYS_ASMFD_PROPERTIES', 'AFD_STATE') from dual; SYS_CONTEXT('SYS_ASMFD_PROPERTIES','AFD_STATE') --------------------------------------------------------------------------- CONFIGURED
设置Oracle ASM Filter Driver的AFD_DISKSTRING参数
AFD_DISKSTRING参数来指定Oracle ASMFD磁盘发现路径来标识由Oracle ASMFD来管理的磁盘。也可以使用ASMCMD afd_dsset和afd_dsget命令来设置和显示AFD_DISKSTRING参数:
[grid@cs1 ~]$ asmcmd afd_dsset '/dev/sd*','/dev/asm*','AFD:*' [grid@cs2 ~]$ asmcmd afd_dsset '/dev/sd*','/dev/asm*','AFD:*' [grid@cs1 ~]$ asmcmd dsget parameter:dev/sd*, /dev/asm*, AFD:* profile:dev/sd*,/dev/asm*,AFD:* [grid@cs2 ~]$ asmcmd dsget parameter:dev/sd*, /dev/asm*, AFD:* profile:dev/sd*,/dev/asm*,AFD:*
可以使用alter system语句来设置AFD_DISKSTRING。标识已经被创建在磁盘头中通过Oracle ASMFD磁盘发现路径来识别磁盘
SQL> ALTER SYSTEM AFD_DISKSTRING SET 'dev/sd*','/dev/asm*','AFD:*'; System altered. SQL> SELECT SYS_CONTEXT('SYS_ASMFD_PROPERTIES', 'AFD_DISKSTRING') FROM DUAL; SYS_CONTEXT('SYS_ASMFD_PROPERTIES','AFD_DISKSTRING') ----------------------------------------------------------------------------------- dev/sd*,/dev/asm*,AFD:*
为Oracle ASM Filter Driver磁盘设置Oracle ASM ASM_DISKSTRING参数
可以更新Oracle ASM磁盘发现路径来增加或删除Oracle ASMFD 磁盘标识名到ASM_DISKSTRING参数,可以使用alter system语句或asmcmd dsset命令
SQL> show parameter asm_diskstring NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ asm_diskstring string dev/sd*, /dev/asm*, AFD:* [grid@cs1 ~]$ asmcmd dsset 'dev/sd*','/dev/asm*','AFD:*' [grid@cs2 ~]$ asmcmd dsset 'dev/sd*','/dev/asm*','AFD:*'
测试Filter功能
首先检查filter功能是否开启
[grid@cs1 ~]$ asmcmd afd_state ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 'cs1.jy.net' [grid@jytest1 ~]$ asmcmd afd_lsdsk -------------------------------------------------------------------------------- Label Filtering Path ================================================================================ CRS1 ENABLED /dev/asmdisk02 CRS2 ENABLED /dev/asmdisk01 DATA1 ENABLED /dev/asmdisk03 DATA2 ENABLED /dev/asmdisk04 FRA1 ENABLED /dev/asmdisk07 TEST1 ENABLED /dev/asmdisk05 TEST2 ENABLED /dev/asmdisk06
上面的结果显示filter功能已经开启,如果要禁用filter功能执行asmcmd afd_filter -d
[grid@cs1 ~]$ asmcmd afd_filter -d [grid@cs1 ~]$ asmcmd afd_state ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 'jytest1.jydba.net' [grid@cs1 ~]$ asmcmd afd_lsdsk There are no labelled devices.
如果要开启filter功能执行asmcmd afd_filter -e
[grid@jytest1 ~]$ asmcmd afd_lsdsk -------------------------------------------------------------------------------- Label Filtering Path ================================================================================ CRS1 ENABLED /dev/asmdisk02 CRS2 ENABLED /dev/asmdisk01 DATA1 ENABLED /dev/asmdisk03 DATA2 ENABLED /dev/asmdisk04 FRA1 ENABLED /dev/asmdisk07 TEST1 ENABLED /dev/asmdisk05 TEST2 ENABLED /dev/asmdisk06
先用 KFED 读取一下TEST磁盘组的AFD:TEST1的磁盘头,验证一下确实无误
[grid@jytest1 ~]$ kfed read AFD:TEST1 kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 0 ; 0x004: blk=0 kfbh.block.obj: 2147483648 ; 0x008: disk=0 kfbh.check: 3275580027 ; 0x00c: 0xc33d627b kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfdhdb.driver.provstr: ORCLDISKTEST1 ; 0x000: length=13 kfdhdb.driver.reserved[0]: 1414743380 ; 0x008: 0x54534554 kfdhdb.driver.reserved[1]: 49 ; 0x00c: 0x00000031 kfdhdb.driver.reserved[2]: 0 ; 0x010: 0x00000000 kfdhdb.driver.reserved[3]: 0 ; 0x014: 0x00000000 kfdhdb.driver.reserved[4]: 0 ; 0x018: 0x00000000 kfdhdb.driver.reserved[5]: 0 ; 0x01c: 0x00000000 kfdhdb.compat: 203424000 ; 0x020: 0x0c200100 kfdhdb.dsknum: 0 ; 0x024: 0x0000 kfdhdb.grptyp: 2 ; 0x026: KFDGTP_NORMAL kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER kfdhdb.dskname: TEST1 ; 0x028: length=5 kfdhdb.grpname: TEST ; 0x048: length=4 kfdhdb.fgname: TEST1 ; 0x068: length=5 kfdhdb.fgname: DN1 ; 0x068: length=3
下面直接用dd尝试将磁盘头清零。dd 命令本身没有任何错误返回。
[root@cs1 ~]# dd if=/dev/zero of=/dev/asmdisk03 bs=1024 count=10000 10000+0 records in 10000+0 records out 10240000 bytes (10 MB) copied, 1.24936 s, 8.2 MB/s
备份磁盘的前1024字节并清除,普通用户没权限读
[root@jytest1 ~]# dd if=/dev/asmdisk05 of=asmdisk05_header bs=1024 count=1 1+0 records in 1+0 records out 1024 bytes (1.0 kB) copied, 0.000282638 s, 3.6 MB/s [root@jytest1 ~]# ls -lrt -rw-r--r-- 1 root root 1024 Aug 31 01:22 asmdisk05_header [root@jytest1 ~]# dd if=/dev/zero of=/dev/asmdisk05 bs=1024 count=1 1+0 records in 1+0 records out 1024 bytes (1.0 kB) copied, 0.000318516 s, 3.2 MB/s
再用 KFED 读取一下TEST磁盘组的AFD:TEST1的磁盘头,验证一下确实无误
[grid@jytest1 ~]$ kfed read AFD:TEST1 kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 0 ; 0x004: blk=0 kfbh.block.obj: 2147483648 ; 0x008: disk=0 kfbh.check: 3275580027 ; 0x00c: 0xc33d627b kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfdhdb.driver.provstr: ORCLDISKTEST1 ; 0x000: length=13 kfdhdb.driver.reserved[0]: 1414743380 ; 0x008: 0x54534554 kfdhdb.driver.reserved[1]: 49 ; 0x00c: 0x00000031 kfdhdb.driver.reserved[2]: 0 ; 0x010: 0x00000000 kfdhdb.driver.reserved[3]: 0 ; 0x014: 0x00000000 kfdhdb.driver.reserved[4]: 0 ; 0x018: 0x00000000 kfdhdb.driver.reserved[5]: 0 ; 0x01c: 0x00000000 kfdhdb.compat: 203424000 ; 0x020: 0x0c200100 kfdhdb.dsknum: 0 ; 0x024: 0x0000 kfdhdb.grptyp: 2 ; 0x026: KFDGTP_NORMAL kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER kfdhdb.dskname: TEST1 ; 0x028: length=5 kfdhdb.grpname: TEST ; 0x048: length=4 kfdhdb.fgname: TEST1 ; 0x068: length=5
测试dismount磁盘组TEST,再mount磁盘组TEST都能成功
[grid@jytest1 ~]$ asmcmd umount TEST [grid@jytest1 ~]$ asmcmd lsdg State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED EXTERN N 512 512 4096 4194304 40960 264 0 264 0 Y CRS/ MOUNTED EXTERN N 512 512 4096 4194304 40960 24732 0 24732 0 N DATA/ MOUNTED EXTERN N 512 512 4096 4194304 40960 18452 0 18452 0 N FRA/ [grid@jytest1 ~]$ asmcmd mount TEST [grid@jytest1 ~]$ asmcmd lsdg State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED EXTERN N 512 512 4096 4194304 40960 264 0 264 0 Y CRS/ MOUNTED EXTERN N 512 512 4096 4194304 40960 24732 0 24732 0 N DATA/ MOUNTED EXTERN N 512 512 4096 4194304 40960 18452 0 18452 0 N FRA/ MOUNTED NORMAL N 512 512 4096 4194304 40960 11128 0 5564 0 N TEST/
现在对磁盘/dev/asmdisk05禁用filter功能
[grid@jytest1 ~]$ asmcmd afd_lsdsk -------------------------------------------------------------------------------- Label Filtering Path ================================================================================ CRS1 ENABLED /dev/asmdisk02 CRS2 ENABLED /dev/asmdisk01 DATA1 ENABLED /dev/asmdisk03 DATA2 ENABLED /dev/asmdisk04 FRA1 ENABLED /dev/asmdisk07 TEST1 ENABLED /dev/asmdisk05 TEST2 ENABLED /dev/asmdisk06 [grid@jytest1 ~]$ asmcmd afd_filter -d /dev/asmdisk05 [grid@jytest1 ~]$ asmcmd afd_lsdsk -------------------------------------------------------------------------------- Label Filtering Path ================================================================================ CRS1 ENABLED /dev/asmdisk02 CRS2 ENABLED /dev/asmdisk01 DATA1 ENABLED /dev/asmdisk03 DATA2 ENABLED /dev/asmdisk04 FRA1 ENABLED /dev/asmdisk07 TEST1 DISABLED /dev/asmdisk05 TEST2 ENABLED /dev/asmdisk06
清除磁盘的前1024字节
[root@jytest1 ~]# dd if=/dev/zero of=/dev/asmdisk05 bs=1024 count=1 1+0 records in 1+0 records out 1024 bytes (1.0 kB) copied, 0.000318516 s, 3.2 MB/s [grid@jytest1 ~]$ asmcmd umount TEST [grid@jytest1 ~]$ asmcmd mount TEST ORA-15032: not all alterations performed ORA-15017: diskgroup "TEST" cannot be mounted ORA-15040: diskgroup is incomplete (DBD ERROR: OCIStmtExecute) [grid@jytest1 ~]$ kfed read AFD:TEST1 kfbh.endian: 0 ; 0x000: 0x00 kfbh.hard: 0 ; 0x001: 0x00 kfbh.type: 0 ; 0x002: KFBTYP_INVALID kfbh.datfmt: 0 ; 0x003: 0x00 kfbh.block.blk: 0 ; 0x004: blk=0 kfbh.block.obj: 0 ; 0x008: file=0 kfbh.check: 0 ; 0x00c: 0x00000000 kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 000000000 00000000 00000000 00000000 00000000 [................] Repeat 255 times KFED-00322: invalid content encountered during block traversal: [kfbtTraverseBlock][Invalid OSM block type][][0]
可以看到当filter功能被禁用时就失去了保护功能
使用之前备份的磁盘前1024字节信息来恢复磁盘头
[root@jytest1 ~]# dd if=asmdisk05_header of=/dev/asmdisk05 bs=1024 count=1 1+0 records in 1+0 records out 1024 bytes (1.0 kB) copied, 0.000274822 s, 3.7 MB/s [grid@jytest1 ~]$ kfed read /dev/asmdisk05 kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 0 ; 0x004: blk=0 kfbh.block.obj: 2147483648 ; 0x008: disk=0 kfbh.check: 1645917758 ; 0x00c: 0x621ab63e kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfdhdb.driver.provstr: ORCLDISKTEST1 ; 0x000: length=13 kfdhdb.driver.reserved[0]: 1414743380 ; 0x008: 0x54534554 kfdhdb.driver.reserved[1]: 49 ; 0x00c: 0x00000031 kfdhdb.driver.reserved[2]: 0 ; 0x010: 0x00000000 kfdhdb.driver.reserved[3]: 0 ; 0x014: 0x00000000 kfdhdb.driver.reserved[4]: 0 ; 0x018: 0x00000000 kfdhdb.driver.reserved[5]: 0 ; 0x01c: 0x00000000 kfdhdb.compat: 203424000 ; 0x020: 0x0c200100 kfdhdb.dsknum: 0 ; 0x024: 0x0000 kfdhdb.grptyp: 2 ; 0x026: KFDGTP_NORMAL kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER kfdhdb.dskname: TEST1 ; 0x028: length=5 kfdhdb.grpname: TEST ; 0x048: length=4 kfdhdb.fgname: TEST1 ; 0x068: length=5
再次mount磁盘组TEST
[grid@jytest1 ~]$ asmcmd lsdg State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED EXTERN N 512 512 4096 4194304 40960 264 0 264 0 Y CRS/ MOUNTED EXTERN N 512 512 4096 4194304 40960 24732 0 24732 0 N DATA/ MOUNTED EXTERN N 512 512 4096 4194304 40960 18452 0 18452 0 N FRA/ [grid@jytest1 ~]$ asmcmd mount TEST [grid@jytest1 ~]$ asmcmd lsdg State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED EXTERN N 512 512 4096 4194304 40960 264 0 264 0 Y CRS/ MOUNTED EXTERN N 512 512 4096 4194304 40960 24732 0 24732 0 N DATA/ MOUNTED EXTERN N 512 512 4096 4194304 40960 18452 0 18452 0 N FRA/ MOUNTED NORMAL N 512 512 4096 4194304 40960 11120 0 5560 0 N TEST/
设置,清除与扫描Oracle ASM Filter Driver Labels
给由Oracle ASMFD管理的磁盘设置一个标识,在标识设置后,指定的磁盘将会由Oracle ASMFD来管理。可以使用ASMCMD afd_label,afd_unlabel与afd_scan来增加,删除和扫描标识查看已经标识过的磁盘可以看到磁盘/dev/asmdisk03和 /dev/asmdisk05没有被标识。
[grid@cs1 ~]$ asmcmd afd_lsdsk -------------------------------------------------------------------------------- Label Filtering Path ================================================================================ CRS1 ENABLED /dev/asmdisk02 CRS2 ENABLED /dev/asmdisk01 DATA1 ENABLED /dev/asmdisk04 SQL> select group_number,disk_number,name,label,path from v$asm_disk; GROUP_NUMBER DISK_NUMBER NAME LABEL PATH ------------ ----------- ------------------------------ -------------------------------------------------- -------------------------------------------------- 0 0 CRS1 AFD:CRS1 0 1 /dev/asmdisk05 0 2 DATA1 AFD:DATA1 0 3 /dev/asmdisk03 0 4 CRS2 AFD:CRS2 1 0 CRS1 CRS1 /dev/asmdisk02 1 1 CRS2 CRS2 /dev/asmdisk01 2 0 DATA1 DATA1 /dev/asmdisk04
设置标识
[grid@cs2 ~]$ asmcmd afd_label DN1 /dev/asmdisk03 [grid@cs2 ~]$ asmcmd afd_label DN2 /dev/asmdisk05
查看已经标识过的磁盘可以看到磁盘/dev/asmdisk03和 /dev/asmdisk05已经被标识
[grid@cs1 ~]$ asmcmd afd_lsdsk -------------------------------------------------------------------------------- Label Filtering Path ================================================================================ CRS1 ENABLED /dev/asmdisk02 CRS2 ENABLED /dev/asmdisk01 DATA1 ENABLED /dev/asmdisk04 DN1 ENABLED /dev/asmdisk03 DN2 ENABLED /dev/asmdisk05 SQL> select group_number,disk_number,name,label,path from v$asm_disk; GROUP_NUMBER DISK_NUMBER NAME LABEL PATH ------------ ----------- ------------------------------ -------------------------------------------------------------- -------------------------------------------------- 0 0 CRS1 AFD:CRS1 0 1 DN2 /dev/asmdisk05 0 2 DN1 AFD:DN1 0 3 DATA1 AFD:DATA1 0 4 DN1 /dev/asmdisk03 0 6 CRS2 AFD:CRS2 0 5 DN2 AFD:DN2 1 1 CRS2 CRS2 /dev/asmdisk01 1 0 CRS1 CRS1 /dev/asmdisk02 2 0 DATA1 DATA1 /dev/asmdisk04
清除标识
[grid@cs1 ~]$ asmcmd afd_unlabel 'DN1' [grid@cs1 ~]$ asmcmd afd_unlabel 'DN2'
注意在清除标识时,如果标识所标记的磁盘已经用来创建磁盘组了那么是不能清除的,例如
[grid@cs1 ~]$ asmcmd afd_unlabel 'TEST1' disk AFD:TEST1 is already provisioned for ASM No devices to be unlabeled. ASMCMD-9514: ASM disk label clear operation failed.
扫描标识
[grid@cs1 ~]$ asmcmd afd_scan
查看已经标识过的磁盘可以看到 /dev/asmdisk03和 /dev/asmdisk05的标识已经清除了
[grid@cs1 ~]$ asmcmd afd_lsdsk -------------------------------------------------------------------------------- Label Filtering Path ================================================================================ CRS1 ENABLED /dev/asmdisk02 CRS2 ENABLED /dev/asmdisk01 DATA1 ENABLED /dev/asmdisk04 SQL> select group_number,disk_number,name,label,path from v$asm_disk; GROUP_NUMBER DISK_NUMBER NAME LABEL PATH ------------ ----------- ------------------------------ -------------------------------------------------------------- -------------------------------------------------- 0 0 CRS1 AFD:CRS1 0 1 /dev/asmdisk05 0 2 DATA1 AFD:DATA1 0 3 /dev/asmdisk03 0 4 CRS2 AFD:CRS2 1 1 CRS2 CRS2 /dev/asmdisk01 1 0 CRS1 CRS1 /dev/asmdisk02 2 0 DATA1 DATA1 /dev/asmdisk04