oracle的asm查看软件,ASM的文件管理深入解析(内含开源的ASM文件挖掘研究版程序)...

第五章  磁盘头格式

位于每个磁盘第一个AU,AU编号0,可以用如下Kfed命令读取:

[oracle@red1 disks]$ kfed read /dev/oracleasm/disks/VOL1 aun=0 blkn=0|more

kfbh.endian:                          1 ; 0x000: 0x01

kfbh.hard:                          130 ; 0x001: 0x82

kfbh.type:                            1 ; 0x002: KFBTYP_DISKHEAD

……………………

具体内容如下:

00 endian_kfbh:

Little Endian = 1

Big Endian = 0

01 hard_kfbh:

KFBH_HARD      0x02     /* expected magic number */

KFBH_HARD_4K   0x80     /* 4K metadata block size */

KFBH_HARD_8K   0xa0     /* 8K metadata block size */

KFBH_HARD_16K  0xc0     /* 16K metadata block size */

KFBH_HARD_32K  0xe0     /* 32K metadata block size */

02 type_kfbh:

磁盘头总是KFBTYP_DISKHEAD

03 datfmt_kfbh:

04 to 07 block_kfbh.blk:

磁盘头总是为0

08 to 0B block_kfbh.obj:

Since this is a little endian architecture this represents the number "0x80000000". The high order byte will always be 0x80 and the lower bytes represent the disk number which is 0x0 here meaning this is the first disk in the diskgroup.

0C to 0F check_kfbh:

校验码,写到磁盘前计算。

10 to 13 fcn_kfbh.base

14 to 17 fcn_kfbh.wrap

18 to 1B fspare1_kfbh

1C to 1f fspare2_kfbh

磁盘头无意义。

20 to 27 driver_kfdhdb.driver_kfdhdb:

没有使用Lib包的时候显示为ORCLDISK。

28 to 3F driver_kfdhdb.reserved_kfddrb:

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

为0。

40 to 43 compat_kfdhdb:

版本号

44 and 45 dsknum_kfdhdb:

可以看到占两个字节:

kfdhdb.dsknum:                        0 ; 0x024: 0x0000

一个DG中,最多只能有65536块盘。

46 grptyp_kfdhdb:

冗余策略:

KFDGTP_INVALID     ((kfdgtp)0)  /* Illegal value                     */

KFDGTP_EXTERNAL    ((kfdgtp)1)  /* External redundancy               */

KFDGTP_NORMAL      ((kfdgtp)2)  /* Normal redundancy                 */

KFDGTP_HIGH        ((kfdgtp)3)  /* High redundancy                   */

47 hdrsts_kfdhdb:

KFDHDR_INVALID     ((kfdhdr)0)  /*   Illegal value                   */

KFDHDR_UNKNOWN     ((kfdhdr)1)  /*   Disk header block unreadable    */

KFDHDR_CANDIDATE   ((kfdhdr)2)  /*   No OSM or OS disk header found  */

KFDHDR_MEMBER      ((kfdhdr)3)  /*   Normal member of the group      */

KFDHDR_FORMER      ((kfdhdr)4)  /*   Disk dropped cleanly from group */

KFDHDR_CONFLICT    ((kfdhdr)5)  /*   Header conflicts                */

KFDHDR_INCOMPAT    ((kfdhdr)6)  /*   Written by incompatible software*/

KFDHDR_PROVISIONED ((kfdhdr)7)  /*   Disk was prepared beforehand    */

参见V$asm_disk

48 to 67 dskname_kfdhdb

68 to 87 grpname_kfhdb:

88 to A7 fgname_kfdhdb:

A8 to C7 capname_kfdhdb:

未使用

kfdhdb.crestmp.hi:             32956296 ; 0x0a8: HOUR=0x8 DAYS=0x1c MNTH=0x7 YEAR=0x7db

kfdhdb.crestmp.lo:            978288640 ; 0x0ac: USEC=0x0 MSEC=0x3e0 SECS=0x24 MINS=0xe

创建时的时间戳

kfdhdb.mntstmp.hi:             32956352 ; 0x0b0: HOUR=0x0 DAYS=0x1e MNTH=0x7 YEAR=0x7db

kfdhdb.mntstmp.lo:             95641600 ; 0x0b4: USEC=0x0 MSEC=0xd8 SECS=0x1b MINS=0x1

Mount时的时间戳

kfdhdb.secsize:                     512 ; 0x0b8: 0x0200

扇区大小

kfdhdb.blksize:                    4096 ; 0x0ba: 0x1000

块大小

kfdhdb.ausize:                  1048576 ; 0x0bc: 0x00100000

AU大小。

kfdhdb.mfact:                    113792 ; 0x0c0: 0x0001bc80

版本相关,无意义

kfdhdb.dsksize:                     102 ; 0x0c4: 0x00000066

本磁盘包含的AU数量。kfdhdb.ausize * dsksize_kfdhdb = disk size

kfdhdb.pmcnt:                         2 ; 0x0c8: 0x00000002

AU的物理地址空间。

kfdhdb.fstlocn:                       1 ; 0x0cc: 0x00000001

说明第一个AU后,是用户可用空间。

kfdhdb.altlocn:                       2 ; 0x0d0: 0x00000002

说明文件目录开始自第二个AU

kfdhdb.f1b1locn:                      2 ; 0x0d4: 0x00000002

File Directory block 1 Allocation Unit number

第六章    PST - Partnership and Status Table

位于每个磁盘第二个AU,AU编号为1。

PST - Partnership and Status Table contains the status information about

the ASM disks in a disk group - disk number, status (either online or offline),

partner disk number, failure group info (11g) and heartbeat info.  AU number 1

in every disk within a disk group is reserved for PST.  Only a few disk actually

have a PST - in external redundancy group we only have one PST table, in normal

redundancy group (double mirroring) we have up to 3 PST and in high redundancy

we have up to 5 PST.  The GMON process is responsible for PST processing. See

kfdp source code for more informaiton.

kfbh.endian

Little endian = 1

Big endian = 0

kfbh.hard

H.A.R.D. magic # and block size

kfbh.type

metadata block type,对PST为KFBTYP_PST_META。

kfbh.datfmt

metadata block data format

kfbh.block

blk :T=0 NUMB=0x100,共四个字节,其中一个字节为T=0,剩余的为NUMB=0x100

obj -- Disk header should have TYPE=0x8 NUMB=

kfbh.check

校验码

kfbh.fcn.base:                        0 ; 0x010: 0x00000000

kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000

PST最后改变的时间。

kfdpHdrB.time.hi:              32956296 ; 0x000: HOUR=0x8 DAYS=0x1c MNTH=0x7 YEAR=0x7db

kfdpHdrB.time.lo:             978361344 ; 0x004: USEC=0x0 MSEC=0x27 SECS=0x25 MINS=0xe

PST最后被UPDATE的时间

kfdpHdrB.last:                        1 ; 0x008: 0x00000001

kfdpHdrB.next:                        1 ; 0x00c: 0x00000001

版本号:

kfdpHdrB.copyCnt:                     2 ; 0x010: 0x02

1:外部冗余。2:正常冗余。等等

kfdpHdrB.incarn:                      0 ; 0x014: 0x00000000

化身号,PST发生移动时增加

kfdpHdrB.copy[0]:                     0 ; 0x018: 0x0000

kfdpHdrB.copy[1]:                     2 ; 0x01a: 0x0002

kfdpHdrB.copy[2]:                     0 ; 0x01c: 0x0000

kfdpHdrB.copy[3]:                     0 ; 0x01e: 0x0000

kfdpHdrB.copy[4]:                     0 ; 0x020: 0x0000

冗余模式:

[0]    -- external redundancy

[0-2]  -- normal redundancy

[0-4]  -- high redundancy

kfdpHdrB.dtaSz:                       4 ; 0x022: 0x0004

kfdpHdrB.dtaSz

kf3.h    /* # dta entries in PST  */

This is the number of disks that it needs to keep track of.

第七章  目录结构

磁盘头中的kfdhdb.f1b1locn位,指明了文件目录的开始位置。

下面读取sdd中2号Au的1号块(第三个Au的第二个块),1号块中是1号文件的AU分布。2号块中是2号文件的AU分布。以此类推。每个块是4096字节,第一个块被占作别用,一个AU可以保存255个文件。所以,此DG的0号磁盘、2号AU中保存1至255个文件的AU分布。256号文件在第二个AU中。

$ kfed read /dev/sdd aun=2 blkn=1 | more

kfbh.endian:                          1 ; 0x000: 0x01

kfbh.hard:                          130 ; 0x001: 0x82

kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR // block type = file directory block...

kfffdb.node.incarn:         1 ; 0x000: A=1 NUMM=0x0 // 文件化身号。参见V$ASM_ALIAS.FILE_INCARNATION

kfffdb.node.frlist.number:   4294967295 ; 0x004: 0xffffffff

kfffdb.node.frlist.incarn:            0 ; 0x008: A=0 NUMM=0x0

kfffdb.hibytes:                       0 ; 0x00c: 0x00000000 // 文件大小

kfffdb.lobytes:                 2097152 ; 0x010: 0x00200000 // 文件大小(此处是2M,两个AU)

kfffdb.xtntcnt:                       2 ; 0x014: 0x00000002 // 文件一共有两个区

kfffdb.xtnteof:                       2 ; 0x018: 0x00000002 // 在EOF标志前有两个区

kfffdb.blkSize:                    4096 ; 0x01c: 0x00001000 // 标准ASM块大小

kfffdb.flags:                         1 ; 0x020: O=1 S=0 S=0 D=0 C=0 I=0 R=0 A=0

// Flag definitions

O - File is original, not snapshot

S - File is striped

S - Strict allocation policy

D - File is damaged

C - File creation is committed

I - File has empty indirect block

R - File has known at-risk value

A - The at-risk value itsefl

kfffdb.fileType:                     15 ; 0x021: 0x0f //文件类型为元数据

kfffdb.dXrs:                         17 ; 0x022: SCHE=0x1 NUMB=0x1 // 直接区冗余方案

kfffdb.iXrs:                         17 ; 0x023: SCHE=0x1 NUMB=0x1 // 间接区冗余方案

kfffdb.dXsiz[0]:             4294967295 ; 0x024: 0xffffffff // # 直接区的大小

kfffdb.dXsiz[1]:                      0 ; 0x028: 0x00000000

kfffdb.dXsiz[2]:                      0 ; 0x02c: 0x00000000

kfffdb.iXsiz[0]:             4294967295 ; 0x030: 0xffffffff // # 间接区的大小

kfffdb.iXsiz[1]:                      0 ; 0x034: 0x00000000

kfffdb.iXsiz[2]:                      0 ; 0x038: 0x00000000

kfffdb.xtntblk:                       2 ; 0x03c: 0x0002 // 直接区和间接区的总数

kfffdb.break:                       300 ; 0x03e: 0x012c // 间接区的索引

kfffdb.priZn:                         0 ; 0x040: 0x00 // Primary extent allocation zone

kfffdb.secZn:                         0 ; 0x041: 0x00 // Secondary extent allocation zone

kfffdb.ub2spare:                      0 ; 0x042: 0x0000 // Spare

kfffdb.alias[0]:             4294967295 ; 0x044: 0xffffffff // No alias pointers for this file

kfffdb.alias[1]:             4294967295 ; 0x048: 0xffffffff

kfffdb.strpwdth:                      0 ; 0x04c: 0x00 // Stripe width in extents

kfffdb.strpsz:                        0 ; 0x04d: 0x00 // Stripe size in 2^N bytes

kfffdb.usmsz:                         0 ; 0x04e: 0x0000 // User metadata size

kfffdb.crets.hi:               32855344 ; 0x050: HOUR=0x10 DAYS=0x9 MNTH=0x5 YEAR=0x7d5

kfffdb.crets.lo:               28766208 ; 0x054: USEC=0x0 MSEC=0x1bc SECS=0x1b MINS=0x0

// 文件的创建日期: 9 May 2005 16:00:27

kfffdb.modts.hi:               32855344 ; 0x058: HOUR=0x10 DAYS=0x9 MNTH=0x5 YEAR=0x7d5

kfffdb.modts.lo:               28766208 ; 0x05c: USEC=0x0 MSEC=0x1bc SECS=0x1b MINS=0x0

// 文件的修改日期

kfffdb.spare[0]:                      0 ; 0x060: 0x00000000 // Pad to leave room for 360 kfxp

...

kfffdb.spare[15]:                     0 ; 0x09c: 0x00000000

kfffdb.usm:                             ; 0x0a0: length=0 // User metadata

接下来是1号文件的AU分布

kfffde[0].xptr.au:                    2 ; 0x4a0: 0x00000002

kfffde[0].xptr.disk:                  0 ; 0x4a4: 0x0000

kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 C=0 S=0

kfffde[0].xptr.chk:                  40 ; 0x4a7: 0x28

kfffde[1].xptr.au:                   92 ; 0x4a8: 0x0000005c

kfffde[1].xptr.disk:                  0 ; 0x4ac: 0x0000

kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 C=0 S=0

kfffde[1].xptr.chk:                 118 ; 0x4af: 0x76

kfffde[2].xptr.au:           4294967295 ; 0x4b0: 0xffffffff // no more extents

kfffde[2].xptr.disk:              65535 ; 0x4b4: 0xffff

kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 C=0 S=0

kfffde[2].xptr.chk:                  42 ; 0x4b7: 0x2a

...

第八章  重要的文件

一、1号文件,文件目录。记录所有其他文件的AU分布

二、2号文件,磁盘目录。记录所有磁盘状态

其中的标志位信息如下:kfddde[0].state:

#define KFDSTA_INVALID ((kfdsta)0)  /* Illegal value */

#define KFDSTA_UNKNOWN ((kfdsta)1)  /* ASM disk state not known */

#define KFDSTA_NORMAL ((kfdsta)2)   /* Happy disk */

#define KFDSTA_UNUSED ((kfdsta)3)   /* Unused State - Open */

#define KFDSTA_DROPPING ((kfdsta)4) /* Disk being dropped from group */

#define KFDSTA_HUNG ((kfdsta)5)     /* Disk drop operation hung */

#define KFDSTA_FORCING ((kfdsta)6)  /* Disk beinng drop forced */

#define KFDSTA_DROPPED ((kfdsta)7)  /* Disk no longer part of group */

#define KFDSTA_ADDING ((kfdsta)8)   /* Disk being globally validated */

三、3号文件,ACD

四、4号文件:COD。相当于ASM中的回滚段

五、5号文件:模版目录

六、别名目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值