ASM管理命令行三工具:KFOD、KFED和AMDU

0    171    1

Tags:

👉 本文共约12071个字,系统预计阅读时间或需46分钟。

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,这部分工具已经成为默认设置,可以直接使用。

本篇主要介绍三个工具的基本使用和功能介绍。

1**kfod工具**

与图形化界面不同,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

2****KFED

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,也就是将这个块的信息写回到头块位置上。

3****AMDU

AMDU是笔者个人觉得最像是官方工具的一个,全称为:ASM Metadata Dump Utility。AMDU最大的作用在于可以将ASM Disk Group和DISK所有可用元数据信息导出,并且整理为可读的格式内容。

AMDU最大的一个好处,在于其工作不受到Disk Group是否mount访问的影响。这个工具之所以被正式公布,主要在于Oracle Support在进行远程支持的时候,需要客户提供上载文件。

工具帮助参数信息如下:

[grid@NCR-Standby-Asm ~]$ amdu help=y

a/usize AU size for corrupt disks

-ausize : This option must be set when -baddisks is set. It

must be a power of 2. This size is required to scan a disk looking

for metadata, and it is normally read from the disk header. The

value applies to all disks that do not have a valid header. The

value from the disk header will be used if a valid header is

found.

ba/ddisks Include disks with bad headers

-baddisks : Normally disks with bad disk headers, or that

look like they were never part of a disk group, will not be

scanned. This option forces them to be scanned anyway and to be

considered part of the given diskgroup. This is most useful when

a disk header has been damaged. The disk will still need to have

a valid allocation table to drive the scan unless -fullscan is

used. In any case at least one block in the first two AUs must be

valid so that the disk number can be determined. The options

-ausize and -blksize are required since these values are normally

fetched from the disk header. If the diskgroup uses external

redundancy then -external should be specified. These values will

be compared against any valid disks found in the diskgroup and

they must be the same.

bl/ksize ASM block size for corrupt disks

-blksize : This option must be set when -baddisks is set. It

must be a power of 2. This size is required to scan a disk looking

for metadata, and it is normally read from the disk header. The

value applies to all disks that do not have a valid header. The

value from the disk header will be used if a valid header is

found.

c/ompare Compare file mirrors

-compare: This option only applies to file extraction from a normal or

high redundancy disk group. Every extent that is mirrored on more

than one discovered disk will have all sides of its mirror

compared. If they are not identical a message will be reported

on standard error and the report file. The message will indicate

which copy was extracted. A count of the blocks that are not

identical will be in the report file.

dir/ectory Directory from previous dump

-directory : This option completely eliminates the discovery

phase of operation. It specifies the name of a dump directory from

a previous run of AMDU. The report file and map files are read

instead of doing a discovery and scan. The parsing of these ASCII

files is very dependent on them being exactly as written by AMDU.

AMDU is unlikely to work properly if they have been modified by

a text editor, or if some of the files are missing or truncated.

Note that the directory may be a copy FTPed from another

machine. The other machine may even be a different platform

with a different endianess.

dis/kstring Diskstring for discovery

-diskstring : By default the null string is used for

discovery. The null string should discover all disks the user has

access to. Many installations specify an asm_diskstring parameter

for their ASM instance. If so that parameter value should be given

here. Multiple discovery strings can be specified by multiple

occurrences of -diskstring . Beware of shell syntax

conflicts with discovery strings. Diskstrings are usually the same

syntax the shell uses for expanding path names on command lines so

they will most likely need to be enclosed in single quotes.

du/mp Diskgroups to dump

-dump : This option specifies the name of a diskgroup to

have its metadata dumped. This option may be specified multiple

times to dump multiple diskgroups. If the diskgroup name is ALL

then all diskgroups encountered will be dumped. The diskgroup name

is not case sensitive, but will be converted to uppercase for all

reports. If this option is not specified then no map or image

files will be created, but -extract and -print may still work.

exc/lude Disks to exclude

-exclude : Multiple exclude options may be specified. These

strings are used for discovery just like the values for diskstring.

Only shallow discovery is done on these diskstrings. Any disks

found in the exclude discovery will not be accessed. If they are

also discovered using the -diskstring strings, then the report will

include the information from shallow discovery along with a message

indicating the disk was excluded.

exte/rnal Assume external redundancy

-external: Normally AMDU determines the diskgroup redundancy from the

disk headers. However this is not possible with the -baddisks

option. It is assumed that the redundancy of the -baddisks

diskgroup is normal or high unless this option is given to specify

external redundancy.

extr/act Files to extract

-extract .: This extracts the numbered file

from the named diskgroup, case insensitive. This option may be

specified multiple times to extract multiple files. The extracted

file is placed in the dump directory under the name

_.f where is the diskgroup name

in uppercase, and is the file number. The -output option

may be used to write the file to any location. The extracted file

will appear to have the same contents it would have if accessed

through the database. If some portion of the file is unavailable

then that portion of the output file will be filled with

0xBADFDA7A, and a message will appear on stderr.

fi/ledump Dump files rather than extract

-filedump: This option causes the file objects in the command line to

have their blocks dumped to the image files rather than extracted.

This can be combined with the -novirtual option to selectively

dump only some of the metadata files. It may also be used to dump

user files (number >= 256) so that all mirrored copies can be

examined.

fo/rmer Include dropped disks

-former: Normally disks marked as former are not scanned, but this

option will scan them and include their contents in the output.

This is useful when it is necessary to look at the contents of a

disk that was dropped. Note that dropped normal disks will not have

any entries in their allocation tables and thus only the physically

addressed extents will be dumped. Force dropped disks will not have

status former in their disk headers and are not affected by this

option. However if DROP DISKGROUP is used, the disks will have the

contents as of the time of the drop, and will be in status former.

Thus this option is useful for extracting files from a dropped

diskgroup.

fu/llscan Scan entire disk

-fullscan: This option reads every AU on the disk and looks at the

contents of the AU rather than limiting the AU's read based on the

allocation table. This is useful when the allocation table is

corrupt or needs recovery. An AU will be written to the image file

if it starts with a block that contains a valid ASM block header.

The file and extent information for the map will be extracted from

the block header. Physically addressed metadata will be dumped

regardless of its contents. This option is incompatible with

extracting a file. It is an error to specify -extract with this

option. Note that this option is likely to find old garbage

metadata in unallocated AU's since there is no means of

determining what is allocated. Thus there may be many different

copies of the same block, possibly of different versions.

h/ex Always print block contents in hex

-hex: This prints the block contents in hex without attempting to print

them as ASM metadata. This is useful when the block is known to not

be ASM metadata. It avoids the ASM block header dump and ensures

the block is not accidentally interpreted as ASM metadata. This

option requires at least one -print option.

noa/cd Do not dump ACD

-noacd: This option limits the dumping of the Active Change Directory

to just the control blocks that contain the checkpoint. There is

126 MB of ACD per ASM instance (42 MB for external redundancy). It

is normally of no interest if there has been a clean shutdown or

no updates for a while. This option avoids dumping a lot of

unimportant data. The blocks will still be read and checked for

corruption. The map file will still contain entries for the ACD

extents, but the block counts will be zero.

nod/ir Do not create a dump directory

-nodir: No dump directory is created, and no files are created in it.

The directory name is not written to standard out. The report file

is written to standard out before any block printouts from any

-print options. This option conflicts with -filedump. It is an

error to specify this and extract a file to the dump directory.

noe/xtract Do not create extracted file

-noextract: This prevents files from being extracted to an output

file, but the file will be read and any errors in selecting the

correct output will be reported. This is most useful in

combination with the -compare option.

noh/eart Do not check for heartbeat

-noheart: Normally the heartbeat block will be saved at discovery time

and checked when the disk is scanned. A sleep is added between

discovery and scanning to ensure there is time for the heartbeat

to be written. If the heartbeat block changes then it is most

likely that the diskgroup containing this disk is mounted by an

active ASM instance. An error and warning is generated but

operation proceeds normally. This option suppresses this check

and avoids the sleep.

noi/mage Do not create image files

-noimage: No image files will be created n the dump directory. All

the reads specified by the read options will still be done. The

map files may be used to find blocks on the disks themselves. In

the map file, the count of blocks dumped, the image file sequence

number, and the byte offset in the image file will all always be

zero (C00000 S0000 B0000000000)

nom/ap Do not create map or image files

-nomap: No map file is created and no image file is created. The only

output is the report file. The -noimage option is assumed if this

is set since an image file without a map is useless. The options

-noscan and -noread also result in no map or image files, but

-nomap still reads the metadata to check for I/O errors and corrupt

blocks.

nop/rint Do no print block contents

-noprint: This suppresses the printout of the block contents for

blocks printed with the -print option. It is useful for getting

just the block reports without a lot of data. This option requires

at least one -print option.

norea/d Shallow discovery only

-noread: This eliminates any reading of any disks at all. Only shallow

discovery will be done. The report will end after the discovery

section. It is an error to specify this option and specify a file

to extract or blocks to print. It is an error to specify this

and -fullscan.

norep/ort Do not generate a report

-noreport: This suppresses the generation of the report file. It is

most useful in combination with -nodir and -print to get block

printouts without a lot of clutter. It is unnecessary to include

this with -directory since no report is generated then anyway.

nosc/an Deep discovery only

-noscan: This eliminates any reading of any disks after deep

discovery. This results in just doing a deep discovery using the

disksting parameter. The report will end after the discovery

section. It is an error to specify this option and specify a file

to extract. It is an error to specify this and -fullscan.

nosu/bdir Do not create a dump directory

-nosubdir: No dump directory is created, but files are still created.

The directory name is not written to standard out. The report file

and any other dump or extract files are written to the current

directory or to the directory indicated by -parentdir. This means

that if multiple AMDU dumps are requested using this option, the

report file will always correspond to the last dump requested.

nov/irtual Do not dump virtual metadata

-novirtual: This option eliminates reading of any virtual metadata.

Only the physically addressed metadata will be read. This

implicitly eliminates the ACD and extent maps so -noacd and

-noxmap will be assumed.

nox/map Do not dump extent maps

-noxmap: This option eliminates reading of the indirect extents

containing the file extent maps. This is the bulk of the metadata

in most diskgroups. Even the entries in the map file will be

eliminated.

o/utput Files to create for extract

-output : This option specifies a different file for

writing an extracted file. The file will be overwritten if it

already exists. This option requires that exactly one file is

extracted via the -extract option.

pa/rent Parent for dump directory

-parent : By default the dump directory is created in the

current directory, but another directory can be specified using

this option. The parent directory for the dump directory must

already exist.

pr/int Block to print

-print : This option prints one or more blocks to standard

out. This option may be specified multiple times to print multiple

s. The printout contains information about how each

block was read as well as a formatted printout. Multiple blocks

matching the same may be found when scanning the

disks. For example there may be multiple disks that have headers

for the same diskgroup and disk number. If the block is from a

mirrored file then multiple copies should exist on different disks.

If multiple copies of the same block have identical contents then

only one formatted printout of the contents will be generated, but

a header will be printed for each copy. A may include

a count of sequential blocks to print. A may specify

a block either by disk or file.

::= | .C

::= | |

​ | |

::=

​ .N.A.B

::=

​ .D.A.B

::=

​ .F.X.B

::=

​ .F.V

::=

​ .F.M

r/egistry Dump registry files

-registry: The ASM registries will be read and dumped to the image

file. There will be no block consistency checks since these files

do not have ASM cache headers. To dump one specific registry

specify -filedump and include the file object for the registry

(e.g. DATA.255).

s/pfile Extract usable spfile

-spfile: This causes extract to render the resulting file in a form

that is directly usable by startup. Without this option, AMDU

will extract the file as a regular ASM file including all ASM

specific headers and such

每次执行amdu命令,就会在当前目录上创建出一个带有当前时间信息的文件夹结构。

[grid@NCR-Standby-Asm ~]$ amdu

amdu_2015_06_05_10_15_47/

[grid@NCR-Standby-Asm ~]$ ls -l | grep amdu

drwxr-xr-x 2 grid oinstall 4096 Jun 5 10:15 amdu_2015_06_05_10_15_47

进入其中,可以查看report.txt文件,作为信息收集结果。

[grid@NCR-Standby-Asm ~]$ cd amdu_2015_06_05_10_15_47/

[grid@NCR-Standby-Asm amdu_2015_06_05_10_15_47]$ ls -l

total 8

-rw-r--r-- 1 grid oinstall 5350 Jun 5 10:15 report.txt

[grid@NCR-Standby-Asm amdu_2015_06_05_10_15_47]$ more report.txt

--amdu--

*** AMDU Settings ****

ORACLE_HOME = /u01/app/grid/product/11.2.0/grid

System name: Linux

Node name: NCR-Standby-Asm

Release: 2.6.32-431.el6.x86_64

Version: #1 SMP Sun Nov 10 22:19:54 EST 2013

Machine: x86_64

amdu run: 05-JUN-15 10:15:47

Endianess: 1

--------------------------------- Operations ---------------------------------

------------------------------- Disk Selection -------------------------------

-diskstring ''

------------------------------ Reading Control -------------------------------

------------------------------- Output Control -------------------------------

***** DISCOVERY **

----------------------------- DISK REPORT N0001 ------------------------------

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
ASM管理命令行三工具:KFOD、KFED和AMDU后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章
验证码:
请关注本站微信公众号,回复“小麦苗博客”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部