经常有朋友问我ASM的文件结构。以便于碰到ASM故障时能够处理。ASM是一个十分复杂的体系,不过其文件分配表的结构确是十分简单的。如果有朋友有兴趣写个工具,从ASM中读取文件,也是很容易实现的。
首先我们简单了解一下AU的概念,AU是分配单元,ASM的存储是以AU为单位分配的。
第二,ASM里的所有数据都是以文件形式组织的。每个文件包含N个AU(除了METADATA文件外)。
首先我们要了解的是DISK HEADER,每个DG的DISK都有一个HEAD,其位置是文件头部(如果以0为第一个块的话,那就是0号块),DISKHEADER其实就是每个DISK的AU 0的BLOCK 0。我们使用kfed来看看:
[grid@localhost ~]$ kfed read /dev/oracleasm/disks/ASMDISK1 aun=0
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD ---DISKHEAD
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 0 ; 0x004: T=0 NUMB=0x0
kfbh.block.obj: 2147483648 ; 0x008: TYPE=0x8 NUMB=0x0
kfbh.check: 592378382 ; 0x
kfbh.fcn.base: 0 ; 0x010: 0x00000000
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x
kfdhdb.driver.provstr: ORCLDISKASMDISK1 ; 0x000: length=16 ---使用ASMLIB
kfdhdb.driver.reserved[0]: 1145918273 ; 0x008: 0x444d5341
kfdhdb.driver.reserved[1]: 827020105 ; 0x
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 ; 0x
kfdhdb.compat: 186646528 ; 0x020: 0x0b200000
kfdhdb.dsknum: 0 ; 0x024: 0x0000
kfdhdb.grptyp: 2 ; 0x026: KFDGTP_NORMAL ----冗余模式为NORMAL
kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER
kfdhdb.dskname: DATA_0000 ; 0x028: length=9 ---DISK NAME
kfdhdb.grpname: DATA ; 0x048: length=4 ----DG NAME
kfdhdb.fgname: DATA_0000 ; 0x068: length=9 ---FAIL GROUP NAME
kfdhdb.capname: ; 0x088: length=0
kfdhdb.crestmp.hi: 32958036 ; 0x
kfdhdb.crestmp.lo: 1372083200 ; 0x
kfdhdb.mntstmp.hi: 32958761 ; 0x0b0: HOUR=0x9 DAYS=0x9 MNTH=0xa YEAR=0x7db
kfdhdb.mntstmp.lo: 2195050496 ; 0x0b4: USEC=0x0 MSEC=0x174 SECS=0x2d MINS=0x20
kfdhdb.secsize: 512 ; 0x0b8: 0x0200
kfdhdb.blksize: 4096 ; 0x0ba: 0x1000 -----块大小4096
kfdhdb.ausize: 1048576 ; 0x0bc: 0x00100000
kfdhdb.mfact: 113792 ; 0x
kfdhdb.dsksize: 7640 ; 0x
kfdhdb.pmcnt: 2 ; 0x
kfdhdb.fstlocn: 1 ; 0x0cc: 0x00000001
kfdhdb.altlocn: 2 ; 0x0d0: 0x00000002
kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 ----指出1号文件(FILEDIR)的第一个块在AU上
kfdhdb.redomirrors[0]: 0 ; 0x0d8: 0x0000
kfdhdb.redomirrors[1]: 0 ; 0x0da: 0x0000
kfdhdb.redomirrors[2]: 0 ; 0x0dc: 0x0000
kfdhdb.redomirrors[3]: 0 ; 0x0de: 0x0000
kfdhdb.dbcompat: 168820736 ; 0x0e0: 0x
kfdhdb.grpstmp.hi: 32958036 ; 0x0e4: HOUR=0x14 DAYS=0x12 MNTH=0x9 YEAR=0x7db
kfdhdb.grpstmp.lo: 1371925504 ; 0x0e8: USEC=0x0 MSEC=0x17b SECS=0x
kfdhdb.vfstart: 0 ; 0x0ec: 0x00000000
kfdhdb.vfend: 0 ; 0x
kfdhdb.spfile: 59 ; 0x
kfdhdb.spfflg: 1 ; 0x
kfdhdb.ub4spare[0]: 0 ; 0x0fc: 0x00000000
kfdhdb.ub4spare[1]: 0 ; 0x100: 0x00000000
kfdhdb.ub4spare[2]: 0 ; 0x104: 0x00000000
kfdhdb.ub4spare[3]: 0 ; 0x108: 0x00000000
于是我们查看一下AU=2的块:
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 5 ; 0x002: KFBTYP_LISTHEAD
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 0 ; 0x004: T=0 NUMB=0x0
kfbh.block.obj: 1 ; 0x008: TYPE=0x0 NUMB=0x1
kfbh.check: 4277826449 ; 0x
kfbh.fcn.base: 3982 ; 0x010: 0x
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x
我们可以看到,这个块的类型是LISTHEAD,这是1号文件(FILE DIR)的文件头。这个文件的块大小是4096,里面保存了文件的分配表的信息。每个文件的分配表占用一个BLOCK(4096字节),1号文件(FILE DIR)的文件分配表在AU 2 BLOCK 1里,我们来看一下:
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 4 ; 0x002: KFBTYP_FILEDIR ----这个块是FILEDIR块
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 1 ; 0x004: T=0 NUMB=0x1
kfbh.block.obj: 1 ; 0x008: TYPE=0x0 NUMB=0x1 ----1号文件
kfbh.check: 3992216370 ; 0x
kfbh.fcn.base: 458 ; 0x010: 0x000001ca
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x
kfffdb.node.incarn: 1 ; 0x000: A=1 NUMM=0x0
kfffdb.node.frlist.number: 4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes: 0 ; 0x
kfffdb.lobytes: 2097152 ; 0x010: 0x00200000 ------文件大小低字节
kfffdb.xtntcnt: 6 ; 0x014: 0x00000006 ------EXTENT的数量6个(有冗余是3个)
kfffdb.xtnteof: 6 ; 0x018: 0x00000006 ------文件尾部的指针
kfffdb.blkSize: 4096 ; 0x
kfffdb.flags: 1 ; 0x020: O=1 S=0 S=0 D=
kfffdb.fileType: 15 ; 0x021: 0x
kfffdb.dXrs: 19 ; 0x022: SCHE=0x1 NUMB=0x3
kfffdb.iXrs: 19 ; 0x023: SCHE=0x1 NUMB=0x3
kfffdb.dXsiz[0]: 4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]: 0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]: 0 ; 0x
kfffdb.iXsiz[0]: 4294967295 ; 0x030: 0xffffffff -----扩展分配表项的地址,这个说明没由扩展的
kfffdb.iXsiz[1]: 0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]: 0 ; 0x038: 0x00000000
kfffdb.xtntblk: 6 ; 0x
kfffdb.break: 60 ; 0x03e: 0x
kfffdb.priZn: 0 ; 0x040: KFDZN_COLD
kfffdb.secZn: 0 ; 0x041: KFDZN_COLD
kfffdb.ub2spare: 0 ; 0x042: 0x0000
kfffdb.alias[0]: 4294967295 ; 0x044: 0xffffffff
kfffdb.alias[1]: 4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth: 0 ; 0x
kfffdb.strpsz: 0 ; 0x04d: 0x00
kfffdb.usmsz: 0 ; 0x04e: 0x0000
kfffdb.crets.hi: 32958036 ; 0x050: HOUR=0x14 DAYS=0x12 MNTH=0x9 YEAR=0x7db
kfffdb.crets.lo: 1372204032 ; 0x054: USEC=0x0 MSEC=0x28b SECS=0x
kfffdb.modts.hi: 32958036 ; 0x058: HOUR=0x14 DAYS=0x12 MNTH=0x9 YEAR=0x7db
kfffdb.modts.lo: 1372204032 ; 0x
kfffdb.dasz[0]: 0 ; 0x060: 0x00
kfffdb.dasz[1]: 0 ; 0x061: 0x00
kfffdb.dasz[2]: 0 ; 0x062: 0x00
kfffdb.dasz[3]: 0 ; 0x063: 0x00
kfffdb.permissn: 0 ; 0x064: 0x00
kfffdb.ub1spar1: 0 ; 0x065: 0x00
kfffdb.ub2spar2: 0 ; 0x066: 0x0000
kfffdb.user.entnum: 0 ; 0x068: 0x0000
kfffdb.user.entinc: 0 ; 0x
kfffdb.group.entnum: 0 ; 0x
kfffdb.group.entinc: 0 ; 0x06e: 0x0000
kfffdb.spare[0]: 0 ; 0x070: 0x00000000
kfffdb.spare[1]: 0 ; 0x074: 0x00000000
kfffdb.spare[2]: 0 ; 0x078: 0x00000000
kfffdb.spare[3]: 0 ; 0x
kfffdb.spare[4]: 0 ; 0x080: 0x00000000
kfffdb.spare[5]: 0 ; 0x084: 0x00000000
kfffdb.spare[6]: 0 ; 0x088: 0x00000000
kfffdb.spare[7]: 0 ; 0x
kfffdb.spare[8]: 0 ; 0x090: 0x00000000
kfffdb.spare[9]: 0 ; 0x094: 0x00000000
kfffdb.spare[10]: 0 ; 0x098: 0x00000000
kfffdb.spare[11]: 0 ; 0x
kfffdb.usm: ; 0x
kfffde[0].xptr.au: 2 ; 0x
kfffde[0].xptr.disk: 0 ; 0x
kfffde[0].xptr.flags: 0 ; 0x
kfffde[0].xptr.chk: 40 ; 0x
kfffde[1].xptr.au: 2 ; 0x
kfffde[1].xptr.disk: 1 ; 0x
kfffde[1].xptr.flags: 0 ; 0x4ae: L=0 E=0 D=0 S=0
kfffde[1].xptr.chk: 41 ; 0x4af: 0x29
kfffde[2].xptr.au: 4294967294 ; 0x4b0: 0xfffffffe --------该项目是空的
kfffde[2].xptr.disk: 65534 ; 0x4b4: 0xfffe
kfffde[2].xptr.flags: 0 ; 0x4b6: L=0 E=0 D=0 S=0
kfffde[2].xptr.chk: 42 ; 0x4b7: 0x
kfffde[3].xptr.au: 60 ; 0x4b8: 0x
kfffde[3].xptr.disk: 1 ; 0x4bc: 0x0001
kfffde[3].xptr.flags: 0 ; 0x4be: L=0 E=0 D=0 S=0
kfffde[3].xptr.chk: 23 ; 0x4bf: 0x17
kfffde[4].xptr.au: 60 ; 0x
kfffde[4].xptr.disk: 0 ; 0x
kfffde[4].xptr.flags: 0 ; 0x
kfffde[4].xptr.chk: 22 ; 0x
kfffde[5].xptr.au: 4294967294 ; 0x
kfffde[5].xptr.disk: 65534 ; 0x4cc: 0xfffe
kfffde[5].xptr.flags: 0 ; 0x4ce: L=0 E=0 D=0 S=0
kfffde[5].xptr.chk: 42 ; 0x4cf: 0x
kfffde[6].xptr.au: 4294967295 ; 0x4d0: 0xffffffff ----后面全部为空了(EOF是6)
--More--
这个文件的第一个AU(AU 2)中的FILE DIR包含的都是ASM METADATA,文件名从1-255。256以后的数据文件都包含在第二个AU中(AU 60)。在这个数据库中,SYSAUX的ASM文件号是257,因此这个文件的FILE DIR是AU 60的BLOCK 1。
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 4 ; 0x002: KFBTYP_FILEDIR ----FILEDIR
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 257 ; 0x004: T=0 NUMB=0x101 ---文件号257
kfbh.block.obj: 1 ; 0x008: TYPE=0x0 NUMB=0x1
kfbh.check: 939601142 ; 0x
kfbh.fcn.base: 3973 ; 0x010: 0x
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x
kfffdb.node.incarn: 762214283 ; 0x000: A=1 NUMM=0x16b73bc5
kfffdb.node.frlist.number: 4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes: 0 ; 0x
kfffdb.lobytes: 723525632 ; 0x010: 0x2b202000 --文件大小
kfffdb.xtntcnt: 1382 ; 0x014: 0x00000566 --扩展的大小
kfffdb.xtnteof: 1382 ; 0x018: 0x00000566
kfffdb.blkSize: 8192 ; 0x
kfffdb.flags: 17 ; 0x020: O=1 S=0 S=0 D=
kfffdb.fileType: 12 ; 0x021: 0x
kfffdb.dXrs: 18 ; 0x022: SCHE=0x1 NUMB=0x2
kfffdb.iXrs: 19 ; 0x023: SCHE=0x1 NUMB=0x3
kfffdb.dXsiz[0]: 4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]: 0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]: 0 ; 0x
kfffdb.iXsiz[0]: 4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]: 0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]: 0 ; 0x038: 0x00000000
kfffdb.xtntblk: 63 ; 0x
kfffdb.break: 60 ; 0x03e: 0x
kfffdb.priZn: 0 ; 0x040: KFDZN_COLD
kfffdb.secZn: 0 ; 0x041: KFDZN_COLD
kfffdb.ub2spare: 0 ; 0x042: 0x0000
kfffdb.alias[0]: 213 ; 0x044: 0x000000d5
kfffdb.alias[1]: 4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth: 1 ; 0x
kfffdb.strpsz: 20 ; 0x04d: 0x14
kfffdb.usmsz: 0 ; 0x04e: 0x0000
kfffdb.crets.hi: 32958038 ; 0x050: HOUR=0x16 DAYS=0x12 MNTH=0x9 YEAR=0x7db
kfffdb.crets.lo: 761643008 ; 0x054: USEC=0x0 MSEC=0x170 SECS=0x16 MINS=0xb
kfffdb.modts.hi: 32958804 ; 0x058: HOUR=0x14 DAYS=0xa MNTH=0xa YEAR=0x7db
kfffdb.modts.lo: 0 ; 0x
kfffdb.dasz[0]: 0 ; 0x060: 0x00
kfffdb.dasz[1]: 0 ; 0x061: 0x00
kfffdb.dasz[2]: 0 ; 0x062: 0x00
kfffdb.dasz[3]: 0 ; 0x063: 0x00
kfffdb.permissn: 0 ; 0x064: 0x00
kfffdb.ub1spar1: 0 ; 0x065: 0x00
kfffdb.ub2spar2: 0 ; 0x066: 0x0000
kfffdb.user.entnum: 0 ; 0x068: 0x0000
kfffdb.user.entinc: 0 ; 0x
kfffdb.group.entnum: 0 ; 0x
kfffdb.group.entinc: 0 ; 0x06e: 0x0000
kfffdb.spare[0]: 0 ; 0x070: 0x00000000
kfffdb.spare[1]: 0 ; 0x074: 0x00000000
kfffdb.spare[2]: 0 ; 0x078: 0x00000000
kfffdb.spare[3]: 0 ; 0x
kfffdb.spare[4]: 0 ; 0x080: 0x00000000
kfffdb.spare[5]: 0 ; 0x084: 0x00000000
kfffdb.spare[6]: 0 ; 0x088: 0x00000000
kfffdb.spare[7]: 0 ; 0x
kfffdb.spare[8]: 0 ; 0x090: 0x00000000
kfffdb.spare[9]: 0 ; 0x094: 0x00000000
kfffdb.spare[10]: 0 ; 0x098: 0x00000000
kfffdb.spare[11]: 0 ; 0x
kfffdb.usm: ; 0x
kfffde[0].xptr.au: 753 ; 0x
kfffde[0].xptr.disk: 0 ; 0x
kfffde[0].xptr.flags: 0 ; 0x
kfffde[0].xptr.chk: 217 ; 0x
kfffde[1].xptr.au: 753 ; 0x
kfffde[1].xptr.disk: 1 ; 0x
kfffde[1].xptr.flags: 0 ; 0x4ae: L=0 E=0 D=0 S=0
kfffde[1].xptr.chk: 216 ; 0x4af: 0xd8
kfffde[2].xptr.au: 754 ; 0x4b0: 0x
kfffde[2].xptr.disk: 1 ; 0x4b4: 0x0001
kfffde[2].xptr.flags: 0 ; 0x4b6: L=0 E=0 D=0 S=0
kfffde[2].xptr.chk: 219 ; 0x4b7: 0xdb
kfffde[3].xptr.au: 754 ; 0x4b8: 0x
kfffde[3].xptr.disk: 0 ; 0x4bc: 0x0000
kfffde[3].xptr.flags: 0 ; 0x4be: L=0 E=0 D=0 S=0
kfffde[3].xptr.chk: 218 ; 0x4bf: 0xda
kfffde[4].xptr.au: 755 ; 0x
kfffde[4].xptr.disk: 0 ; 0x
kfffde[4].xptr.flags: 0 ; 0x
kfffde[4].xptr.chk: 219 ; 0x
kfffde[5].xptr.au: 755 ; 0x
kfffde[5].xptr.disk: 1 ; 0x4cc: 0x0001
kfffde[5].xptr.flags: 0 ; 0x4ce: L=0 E=0 D=0 S=0
kfffde[5].xptr.chk: 218 ; 0x4cf: 0xda
kfffde[6].xptr.au: 756 ; 0x4d0: 0x
DISK 0 ,AU 753是该文件的第一个AU,我们把这个文件DD出来看看:
[grid@localhost asmtest]$ dd if=/dev/oracleasm/disks/ASMDISK2 of=test1.dump bs=1024k skip=753 count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00336261 seconds, 312 MB/s
可以看出0x2152位置是文件名,说明我们DD出来的块确是是SYSAUX这个文件。
是不是很简单,不过有些细心的人会有疑问了,一个4096字节的块,只能包含60个AU项,如果有冗余,只能包含
kfffde[61].xptr.au: 783 ; 0x688: 0x
kfffde[61].xptr.disk: 0 ; 0x
kfffde[61].xptr.flags: 0 ; 0x68e: L=0 E=0 D=0 S=0
kfffde[61].xptr.chk: 38 ; 0x
我们来看看783:
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 12 ; 0x002: KFBTYP_INDIRECT
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 2147483648 ; 0x004: T=1 NUMB=0x0
kfbh.block.obj: 257 ; 0x008: TYPE=0x0 NUMB=0x101
kfbh.check: 2166261598 ; 0x
kfbh.fcn.base: 1440 ; 0x010: 0x
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x
kffixb.dxsn: 30 ; 0x000: 0x0000001e
kffixb.xtntblk: 480 ; 0x004: 0x01e0
kffixb.dXrs: 18 ; 0x006: SCHE=0x1 NUMB=0x2
kffixb.ub1spare: 0 ; 0x007: 0x00
kffixb.ub4spare: 0 ; 0x008: 0x00000000
kffixe[0].xptr.au: 784 ; 0x
kffixe[0].xptr.disk: 0 ; 0x010: 0x0000
kffixe[0].xptr.flags: 0 ; 0x012: L=0 E=0 D=0 S=0
kffixe[0].xptr.chk: 57 ; 0x013: 0x39
kffixe[1].xptr.au: 784 ; 0x014: 0x00000310
kffixe[1].xptr.disk: 1 ; 0x018: 0x0001
kffixe[1].xptr.flags: 0 ; 0x
kffixe[1].xptr.chk: 56 ; 0x01b: 0x38
kffixe[2].xptr.au: 785 ; 0x
kffixe[2].xptr.disk: 1 ; 0x020: 0x0001
kffixe[2].xptr.flags: 0 ; 0x022: L=0 E=0 D=0 S=0
kffixe[2].xptr.chk: 57 ; 0x023: 0x39
kffixe[3].xptr.au: 785 ; 0x024: 0x00000311
kffixe[3].xptr.disk: 0 ; 0x028: 0x0000
kffixe[3].xptr.flags: 0 ; 0x
kffixe[3].xptr.chk: 56 ; 0x02b: 0x38
kffixe[4].xptr.au: 786 ; 0x
kffixe[4].xptr.disk: 0 ; 0x030: 0x0000
kffixe[4].xptr.flags: 0 ; 0x032: L=0 E=0 D=0 S=0
kffixe[4].xptr.chk: 59 ; 0x033: 0x3b
kffixe[5].xptr.au: 786 ; 0x034: 0x00000312
kffixe[5].xptr.disk: 1 ; 0x038: 0x0001
kffixe[5].xptr.flags: 0 ; 0x
kffixe[5].xptr.chk: 58 ; 0x03b: 0x
kffixe[6].xptr.au: 787 ; 0x
kffixe[6].xptr.disk: 1 ; 0x040: 0x0001
kffixe[6].xptr.flags: 0 ; 0x042: L=0 E=0 D=0 S=0
kffixe[6].xptr.chk: 59 ; 0x043: 0x3b
kffixe[7].xptr.au: 787 ; 0x044: 0x00000313
kffixe[7].xptr.disk: 0 ; 0x048: 0x0000
我们可以看到这个块的类型是INDIRECT,非直接文件目录。这个AU里包含了余下的AU信息。如果这个AU还放不下这个文件的AU信息,那么最后一条记录指向下一个INDIRECT的AU。
至此大家对ASM文件分配的方法应该有了一个大概的了解了吧。
其实了解了这些信息,基本上可以动手写一个从ASM中读取文件的工具了。这里还缺少一个信息,就是文件别名的信息,就是数据文件名和ASM文件号之间的关系。这个别名文件的ASM文件号是6
ALIAS文件的文件号是6:
[grid@localhost ~]$ kfed read /dev/oracleasm/disks/ASMDISK1 aun=2 blkn=6 |more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 6 ; 0x004: T=0 NUMB=0x6
kfbh.block.obj: 1 ; 0x008: TYPE=0x0 NUMB=0x1
kfbh.check: 3972293371 ; 0x
kfbh.fcn.base: 0 ; 0x010: 0x00000000
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x
kfffdb.node.incarn: 1 ; 0x000: A=1 NUMM=0x0
kfffdb.node.frlist.number: 4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes: 0 ; 0x
kfffdb.lobytes: 1048576 ; 0x010: 0x00100000
kfffdb.xtntcnt: 3 ; 0x014: 0x00000003
kfffdb.xtnteof: 3 ; 0x018: 0x00000003
kfffdb.blkSize: 4096 ; 0x
kfffdb.flags: 1 ; 0x020: O=1 S=0 S=0 D=
kfffdb.fileType: 15 ; 0x021: 0x
kfffdb.dXrs: 19 ; 0x022: SCHE=0x1 NUMB=0x3
kfffdb.iXrs: 19 ; 0x023: SCHE=0x1 NUMB=0x3
kfffdb.dXsiz[0]: 4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]: 0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]: 0 ; 0x
kfffdb.iXsiz[0]: 4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]: 0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]: 0 ; 0x038: 0x00000000
kfffdb.xtntblk: 3 ; 0x
kfffdb.break: 60 ; 0x03e: 0x
kfffdb.priZn: 0 ; 0x040: KFDZN_COLD
kfffdb.secZn: 0 ; 0x041: KFDZN_COLD
kfffdb.ub2spare: 0 ; 0x042: 0x0000
kfffdb.alias[0]: 4294967295 ; 0x044: 0xffffffff
kfffdb.alias[1]: 4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth: 0 ; 0x
kfffdb.strpsz: 0 ; 0x04d: 0x00
kfffdb.usmsz: 0 ; 0x04e: 0x0000
kfffdb.crets.hi: 32958036 ; 0x050: HOUR=0x14 DAYS=0x12 MNTH=0x9 YEAR=0x7db
kfffdb.crets.lo: 1372207104 ; 0x054: USEC=0x0 MSEC=0x28e SECS=0x
kfffdb.modts.hi: 32958036 ; 0x058: HOUR=0x14 DAYS=0x12 MNTH=0x9 YEAR=0x7db
kfffdb.modts.lo: 1372207104 ; 0x
kfffdb.dasz[0]: 0 ; 0x060: 0x00
kfffdb.dasz[1]: 0 ; 0x061: 0x00
kfffdb.dasz[2]: 0 ; 0x062: 0x00
kfffdb.dasz[3]: 0 ; 0x063: 0x00
kfffdb.permissn: 0 ; 0x064: 0x00
kfffdb.ub1spar1: 0 ; 0x065: 0x00
kfffdb.ub2spar2: 0 ; 0x066: 0x0000
kfffdb.user.entnum: 0 ; 0x068: 0x0000
kfffdb.user.entinc: 0 ; 0x
kfffdb.group.entnum: 0 ; 0x
kfffdb.group.entinc: 0 ; 0x06e: 0x0000
kfffdb.spare[0]: 0 ; 0x070: 0x00000000
kfffdb.spare[1]: 0 ; 0x074: 0x00000000
kfffdb.spare[2]: 0 ; 0x078: 0x00000000
kfffdb.spare[3]: 0 ; 0x
kfffdb.spare[4]: 0 ; 0x080: 0x00000000
kfffdb.spare[5]: 0 ; 0x084: 0x00000000
kfffdb.spare[6]: 0 ; 0x088: 0x00000000
kfffdb.spare[7]: 0 ; 0x
kfffdb.spare[8]: 0 ; 0x090: 0x00000000
kfffdb.spare[9]: 0 ; 0x094: 0x00000000
kfffdb.spare[10]: 0 ; 0x098: 0x00000000
kfffdb.spare[11]: 0 ; 0x
kfffdb.usm: ; 0x
kfffde[0].xptr.au: 49 ; 0x
kfffde[0].xptr.disk: 0 ; 0x
kfffde[0].xptr.flags: 0 ; 0x
kfffde[0].xptr.chk: 27 ; 0x
kfffde[1].xptr.au: 49 ; 0x
kfffde[1].xptr.disk: 1 ; 0x
kfffde[1].xptr.flags: 0 ; 0x4ae: L=0 E=0 D=0 S=0
kfffde[1].xptr.chk: 26 ; 0x4af: 0x
kfffde[2].xptr.au: 4294967294 ; 0x4b0: 0xfffffffe
kfffde[2].xptr.disk: 65534 ; 0x4b4: 0xfffe
kfffde[2].xptr.flags: 0 ; 0x4b6: L=0 E=0 D=0 S=0
kfffde[2].xptr.chk: 42 ; 0x4b7: 0x
kfffde[3].xptr.au: 4294967295 ; 0x4b8: 0xffffffff
kfffde[3].xptr.disk: 65535 ; 0x4bc: 0xffff
kfffde[3].xptr.flags: 0 ; 0x4be: L=0 E=0 D=0 S=0
kfffde[3].xptr.chk: 42 ; 0x4bf: 0x
kfffde[4].xptr.au: 4294967295 ; 0x
kfffde[4].xptr.disk: 65535 ; 0x
kfffde[4].xptr.flags: 0 ; 0x
kfffde[4].xptr.chk: 42 ; 0x
kfffde[5].xptr.au: 4294967295 ; 0x
kfffde[5].xptr.disk: 65535 ; 0x4cc: 0xffff
kfffde[5].xptr.flags: 0 ; 0x4ce: L=0 E=0 D=0 S=0
kfffde[5].xptr.chk: 42 ; 0x4cf: 0x
kfffde[6].xptr.au: 4294967295 ; 0x4d0: 0xffffffff
ALIAS文件的AU是49:
[grid@localhost ~]$ kfed read /dev/oracleasm/disks/ASMDISK1 aun=49 |more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 11 ; 0x002: KFBTYP_ALIASDIR
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 0 ; 0x004: T=0 NUMB=0x0
kfbh.block.obj: 6 ; 0x008: TYPE=0x0 NUMB=0x6
kfbh.check: 2830664843 ; 0x
kfbh.fcn.base: 462 ; 0x010: 0x000001ce
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x
kffdnd.bnode.incarn: 1 ; 0x000: A=1 NUMM=0x0
kffdnd.bnode.frlist.number: 4294967295 ; 0x004: 0xffffffff
kffdnd.bnode.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0
kffdnd.overfl.number: 4294967295 ; 0x
kffdnd.overfl.incarn: 0 ; 0x010: A=0 NUMM=0x0
kffdnd.parent.number: 0 ; 0x014: 0x00000000
kffdnd.parent.incarn: 1 ; 0x018: A=1 NUMM=0x0
kffdnd.fstblk.number: 0 ; 0x
kffdnd.fstblk.incarn: 1 ; 0x020: A=1 NUMM=0x0
kfade[0].entry.incarn: 1 ; 0x024: A=1 NUMM=0x0
kfade[0].entry.hash: 4004320810 ; 0x028: 0xeead
kfade[0].entry.refer.number: 1 ; 0x
kfade[0].entry.refer.incarn: 1 ; 0x030: A=1 NUMM=0x0
kfade[0].name: ASM ; 0x034: length=3
kfade[0].fnum: 4294967295 ; 0x064: 0xffffffff
kfade[0].finc: 4294967295 ; 0x068: 0xffffffff
kfade[0].flags: 4 ; 0x
kfade[0].ub1spare: 0 ; 0x06d: 0x00
kfade[0].ub2spare: 0 ; 0x06e: 0x0000
kfade[1].entry.incarn: 1 ; 0x070: A=1 NUMM=0x0
kfade[1].entry.hash: 185602149 ; 0x074: 0x0b101065
kfade[1].entry.refer.number: 3 ; 0x078: 0x00000003
kfade[1].entry.refer.incarn: 1 ; 0x
kfade[1].name: ORCL ; 0x080: length=4
kfade[1].fnum: 4294967295 ; 0x0b0: 0xffffffff
kfade[1].finc: 4294967295 ; 0x0b4: 0xffffffff
kfade[1].flags: 4 ; 0x0b8: U=0 S=0 S=1 U=
kfade[1].ub1spare: 0 ; 0x0b9: 0x00
kfade[1].ub2spare: 0 ; 0x0ba: 0x0000
kfade[2].entry.incarn: 0 ; 0x0bc: A=0 NUMM=0x0
kfade[2].entry.hash: 0 ; 0x
kfade[2].entry.refer.number: 0 ; 0x
kfade[2].entry.refer.incarn: 0 ; 0x
kfade[2].name: ; 0x0cc: length=0
kfade[2].fnum: 0 ; 0x0fc: 0x00000000
kfade[51].ub2spare: 0 ; 0xf92: 0x0000
kfade[52].entry.incarn: 0 ; 0xf94: A=0 NUMM=0x0
kfade[52].entry.hash: 0 ; 0xf98: 0x00000000
kfade[52].entry.refer.number: 0 ; 0xf
kfade[52].entry.refer.incarn: 0 ; 0xfa0: A=0 NUMM=0x0
kfade[52].name: ; 0xfa4: length=0
kfade[52].fnum: 0 ; 0xfd4: 0x00000000
kfade[52].finc: 0 ; 0xfd8: 0x00000000
kfade[52].flags: 0 ; 0xfdc: U=0 S=0 S=0 U=
kfade[52].ub1spare: 0 ; 0xfdd: 0x00
kfade[52].ub2spare: 0 ; 0xfde: 0x0000
这个AU的类型是ALIASDIR,存放别名的,每个AU可以放52个别名,
kfade[0].entry.incarn: 1 ; 0x024: A=1 NUMM=0x0
kfade[0].entry.hash: 2097622492 ; 0x028: 0x7d072ddc
kfade[0].entry.refer.number: 4294967295 ; 0x
kfade[0].entry.refer.incarn: 0 ; 0x030: A=0 NUMM=0x0
kfade[0].name: SYSTEM ; 0x034: length=6
kfade[0].fnum: 256 ; 0x064: 0x00000100
kfade[0].finc: 762214281 ; 0x068: 0x2d6e7789
kfade[0].flags: 18 ; 0x
kfade[0].ub1spare: 0 ; 0x06d: 0x00
kfade[0].ub2spare: 0 ; 0x06e: 0x0000