合 ASM管理命令行三工具:KFOD、KFED和AMDU
简介
ASM(Automatic Storage Management)是Oracle目前主推的软集群存储策略。一般而言,管理ASM的工具包括使用sqlplus命令行、ASMCA图形化界面。此外,ASM Disk的配置和创建,可以通过oracleasm程序命令行进行配置。进入11g之后,集群件GI的crsctl和srvctl也可以提供ASM实例Instance和Disk Group级别的修改。
一般情况下,ASM安装管理借助上述工具就够了,况且Oracle Restate和Cluster ware可以确保ASM组建的HA架构。
一些特殊场景,如磁盘数据损坏、底层修复和ASM盘发现,需要额外的一些命令行工具。ASM工具包括:kfod、kfed和AMDU。在早期的ASM版本(10gR2)中,一部分工具还需要额外的重新编译和链接才能使用。在11g,这部分工具已经成为默认设置,可以直接使用。
本篇主要介绍三个工具的基本使用和功能介绍。
kfod工具
在Oracle ASM和Database安装过程中,kfod是会自动被调用,用于进行磁盘发现过程(Disk Discovery)。如果在安装Grid过程没有成功,那么kfod也会在安装stage文件夹中被找到。目录地址为:
1 2 3 4 5 6 7 8 9 10 11 12 13 | [grid@orclalhr ~]$ $ORACLE_HOME/bin/kfod disk=asm s=true ds=true c=true -------------------------------------------------------------------------------- Disk Size Header Path Disk Group User Group ================================================================================ 1: 1000 Mb MEMBER /dev/raw/raw1 DATA oracle dba 2: 1000 Mb MEMBER /dev/raw/raw2 DATA oracle dba 3: 1000 Mb MEMBER /dev/raw/raw3 DATA oracle dba 4: 1000 Mb MEMBER /dev/raw/raw4 DATA oracle dba 5: 1000 Mb MEMBER /dev/raw/raw5 DATA oracle dba -------------------------------------------------------------------------------- ORACLE_SID ORACLE_HOME HOST_NAME ================================================================================ +ASM /u01/app/11.2.0/grid orclalhr |
与图形化界面不同,kfod属于底层的功能命令行工具。最常用的场景是从操作系统层面刺激磁盘的扫描动作,用于辅助ASM发现可用的ASM DISK。Oracle官方门户中,对于kfod的描述包括如下几个方面:
ü Oracle ASM和Database安装过程中,kfod是会自动被调用,用于进行磁盘发现过程(Disk Discovery);
ü 如果在安装Grid过程没有成功,kfod也会在安装stage文件夹中被找到。目录地址为:/grid/stage/ext/bin/。如果有这样的情况,Oracle就要求我们设置环境变量LD_LIBRARY_PATH到/grid/stage/ext/bin/;
简单的说,kfod查看检索的意义更大,并不像其他有破坏性工具那样存在很大风险。使用帮助命令参数,可以看到kfod的功能说明。
[grid@NCR-Standby-Asm ~]$ kfod help
KFOD-00101: LRM error [107] while parsing command line arguments
_asm_a/llow_only_raw_disks KFOD allow only raw devices [_asm_allow_only_raw_disks=TRUE/(FALSE)]
_asm_l/ibraries ASM Libraries[_asm_libraries=lib1,lib2,...]
_asms/id ASM Instance[_asmsid=sid]
a/sm_diskstring ASM Diskstring [asm_diskstring=discoverystring, discoverystring ...]
c/luster KFOD cluster [cluster=TRUE/(FALSE)]
db/_unique_name db_unique_name for ASM instance[db_unique_name=dbname]
di/sks Disks to discover [disks=raw,asm,badsize,all]
ds/cvgroup Include group name [dscvgroup=TRUE/(FALSE)]
g/roup Disks in diskgroup [group=diskgroup]
h/ostlist hostlist[hostlist=host1,host2,...]
metadata_a/usize AU Size for Metadata Size Calculation
metadata_c/lients Client Count for Metadata Size Calculation
metadata_d/isks Disk Count for Metadata Size Calculation
metadata_n/odes Node Count for Metadata Size Calculation
metadata_r/edundancy Redundancy for Metadata Size Calculation
n/ohdr KFOD header suppression [nohdr=TRUE/(FALSE)]
o/p KFOD options type [OP=DISKS/CANDIDATES/MISSING/GROUPS/INSTS/VERSION/CLIENTS/RM/RMVERS/DFLTDSTR/GPNPDSTR/METADATA/ALL]
p/file ASM parameter file [pfile=parameterfile]
s/tatus Include disk header status [status=TRUE/(FALSE)]
v/erbose KFOD verbose errors [verbose=TRUE/(FALSE)]
几个常见的操作方法:
--查看ASM配置基本情况
[grid@NCR-Standby-Asm ~]$ kfod
--------------------------------------------------------------------------------
ORACLE_SID ORACLE_HOME
================================================================
+ASM /u01/app/grid/product/11.2.0/grid
--查看ASM Disk情况
[grid@NCR-Standby-Asm ~]$ kfod di=all
--------------------------------------------------------------------------------
Disk Size Path User Group
================================================================================
1: 20489 Mb ORCL:DATA1
2: 20489 Mb ORCL:DATA2
3: 20489 Mb ORCL:DATA3
4: 20489 Mb ORCL:DATA5
5: 20442 Mb ORCL:DATA6
--------------------------------------------------------------------------------
ORACLE_SID ORACLE_HOME
================================================================================
+ASM /u01/app/grid/product/11.2.0/grid
--特定diskgroup情况
[grid@NCR-Standby-Asm ~]$ kfod status=true g=data
--------------------------------------------------------------------------------
Disk Size Path
================================================================================
0 20489 Mb ORCL:DATA1
1 20489 Mb ORCL:DATA2
2 20489 Mb ORCL:DATA3
[grid@NCR-Standby-Asm ~]$ kfod status=true g=reco
--------------------------------------------------------------------------------
Disk Size Path
================================================================================
0 20489 Mb ORCL:DATA5
1 20442 Mb ORCL:DATA6
kfed
kfed(Kernel File Metadata Editor)的使用场景比较严峻,就是当ASM Diskgroup不能成功MOUNT的时候,通过kfed来分析ASM磁盘头信息,来诊断问题。从Oracle 11.1开始,kfed就已经正式成为安装组件的一部分。与kfod的区别是,kfed只有在完全安装完之后,才能使用,在ASM安装阶段无法使用。其使用示例如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [grid@orclalhr ~]$ kfed read /dev/raw/raw1 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: 2147483652 ; 0x008: disk=4 kfbh.check: 213759916 ; 0x00c: 0x0cbdb7ac 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: ORCLDISK ; 0x000: length=8 kfdhdb.driver.reserved[0]: 0 ; 0x008: 0x00000000 kfdhdb.driver.reserved[1]: 0 ; 0x00c: 0x00000000 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 。。。。。。。省略部分输出。。。。。。。。。 |
KFED的全称为Kernel File Metadata Editor。KFED的使用场景比较严峻,就是当ASM Diskgroup不能成功mount的时候,通过KFED来分析ASM磁盘头信息,来诊断问题。
从Oracle 11.1开始,KFED就已经正式成为安装组件的一部分。一些旧的版本中,就需要手工进行build构建。与Kfod的区别是,KFED只有在完全安装完之后,才能使用,在stage阶段无法使用。
KFED帮助信息如下:
[grid@NCR-Standby-Asm ~]$ kfed
as/mlib ASM Library [asmlib='lib']
aun/um AU number to examine or update [AUNUM=number]
aus/z Allocation Unit size in bytes [AUSZ=number]
blkn/um Block number to examine or update [BLKNUM=number]
blks/z Metadata block size in bytes [BLKSZ=number]
ch/ksum Update checksum before each write [CHKSUM=YES/NO]
cn/t Count of AUs to process [CNT=number]
de/v ASM device to examine or update [DEV=string]
dm/pall Don't suppress repeated lines when dumping corrupt blocks [DMPALL=YES/NO]
o/p KFED operation type [OP=READ/WRITE/MERGE/REPAIR/NEW/FORM/FIND/STRUCT]
p/rovnm Name for provisioning purposes [PROVNM=string]
s/eek AU number to seek to [SEEK=number]
te/xt File name for translated block text [TEXT=string]
ty/pe ASM metadata block type number [TYPE=number]
最常用的场景,是借助kfed去读ASM Disk的磁盘头信息。
[grid@NCR-Standby-Asm ~]$ kfed read /dev/sdb1
KFED-00303: unable to open file '/dev/sdb1'
[grid@NCR-Standby-Asm ~]$ env | grep ORACLE_HOME
ORACLE_HOME=/u01/app/grid/product/11.2.0/grid
[root@NCR-Standby-Asm ~]# cd /u01/app/grid/product/11.2.0/grid
[root@NCR-Standby-Asm grid]# cd bin/
[root@NCR-Standby-Asm bin]# ls -l | grep kfed
-rwxr-x--x 1 grid oinstall 2403791 May 25 15:28 kfed
-rwxr-x--x 1 grid oinstall 2403783 May 5 09:21 kfedO
[root@NCR-Standby-Asm bin]# ./kfed read /dev/sdb1
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: 586307481 ; 0x00c: 0x22f25799
kfbh.fcn.base: 0 ; 0x010: 0x00000000
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
(篇幅原因,有省略……)
kfdhdb.acdb.aba.seq: 0 ; 0x1d4: 0x00000000
kfdhdb.acdb.aba.blk: 0 ; 0x1d8: 0x00000000
kfdhdb.acdb.ents: 0 ; 0x1dc: 0x0000
kfdhdb.acdb.ub2spare: 0 ; 0x1de: 0x0000
针对ASM Disk头块损坏的问题,Oracle推出了自动backup策略,备份块就在510位置上。
[root@NCR-Standby-Asm bin]# ./kfed read /dev/sdb1 blkn=510
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 254 ; 0x004: blk=254
kfbh.block.obj: 2147483648 ; 0x008: disk=0
kfbh.check: 586307431 ; 0x00c: 0x22f25767
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: ORCLDISKDATA1 ; 0x000: length=13
自动命令repair,也就是将这个块的信息写回到头块位置上。
AMDU
amdu(ASM Metadata Dump Utility)最大的作用在于可以将ASM磁盘组和ASM磁盘所有可用元数据信息导出,并且整理为可读的格式内容,其工作不受到磁盘组是否MOUNT访问的影响。这个工具之所以被正式公布,主要在于Oracle Support在进行远程支持的时候,需要客户提供上载文件。
AMDU最大的作用在于可以将ASM Disk Group和DISK所有可用元数据信息导出,并且整理为可读的格式内容。
AMDU最大的一个好处,在于其工作不受到Disk Group是否mount访问的影响。这个工具之所以被正式公布,主要在于Oracle Support在进行远程支持的时候,需要客户提供上载文件。