asm 元数据:
disk header
free space table (FST) --空闲AU位图,快速定位可用空间
Allocation Table (AT) --记录每个 AU 的分配情况与归属
Partnership and Status Table (PSP) --伙伴关系与状态表 --每个磁盘组独立一份,存放在所有磁盘的 AU1中
File directory --ASM 磁盘组里的 “数据字典”,记录所有文件的全部信息。
Disk directory
Active Change Directory (ACD)
asm 元数据中file信息:
file# 1 -- asm file 1,file directory block 1
file# 2 -- asm file 2,disk directory block 2
file# 3 -- asm file 3,active change directory ACD block 3
file# 4 -- asm file 4,continuing Operations Directory COD block 4
file# 5 -- asm file 5, templete directory block 5
file# 6 -- asm file 6, alias directory block 6
select number_kffxp file#,disk_kffxp disk#,count(disk_kffxp) extents
from x$kffxp
where group_kffxp=1 and disk_kffxp <> 65534
group by number_kffxp,disk_kffxp
order by 1;
FILE# DISK# EXTENTS
---------- ---------- ----------
1 0 1 --file directory,f1b1,这部分不完整抽取工具抽取不了文件
1 1 1
2 1 1 --disk directory
3 0 50 --acd
3 1 35
4 0 5
4 1 3
5 0 1 --template directory
6 0 1 --alias directory
8 0 1
9 0 1
256 0 446 --256是system01,之前的都是元数据
[grid@node1:/home/grid]$ kfed read /dev/asm_data_1 aun=0 blkn=0
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: 2101198618 ; 0x00c: 0x7d3dbf1a
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
kfdhdb.compat: 186647552 ; 0x020: 0x0b200400
kfdhdb.dsknum: 0 ; 0x024: 0x0000 --BLOCK 编号
kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL --磁盘组冗余方式
kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER --磁盘头的状态,3=可用
kfdhdb.dskname: DATA_0000 ; 0x028: length=9
kfdhdb.grpname: DATA ; 0x048: length=4 --磁盘组名字
kfdhdb.fgname: DATA_0000 ; 0x068: length=9
kfdhdb.capname: ; 0x088: length=0
kfdhdb.crestmp.hi: 33196006 ; 0x0a8: HOUR=0x6 DAYS=0x1f MNTH=0x1 YEAR=0x7ea --create 时间戳
kfdhdb.crestmp.lo: 2014724096 ; 0x0ac: USEC=0x0 MSEC=0x190 SECS=0x1 MINS=0x1e
kfdhdb.mntstmp.hi: 33196503 ; 0x0b0: HOUR=0x17 DAYS=0xe MNTH=0x2 YEAR=0x7ea --最后一次mount的时间戳信息
kfdhdb.mntstmp.lo: 2827626496 ; 0x0b4: USEC=0x0 MSEC=0x28a SECS=0x8 MINS=0x2a
kfdhdb.secsize: 512 ; 0x0b8: 0x0200 --扇区大小
kfdhdb.blksize: 4096 ; 0x0ba: 0x1000 --块大小
kfdhdb.ausize: 1048576 ; 0x0bc: 0x00100000 --au大小,默认1M
kfdhdb.mfact: 113792 ; 0x0c0: 0x0001bc80
kfdhdb.dsksize: 30720 ; 0x0c4: 0x00007800 --磁盘大小,单位是AU
kfdhdb.pmcnt: 2 ; 0x0c8: 0x00000002
kfdhdb.fstlocn: 1 ; 0x0cc: 0x00000001
kfdhdb.altlocn: 2 ; 0x0d0: 0x00000002
kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002 --第一个文件第一个block开始的位置--类似file directory的入口
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: 186647552 ; 0x0e0: 0x0b200400
kfdhdb.grpstmp.hi: 33196006 ; 0x0e4: HOUR=0x6 DAYS=0x1f MNTH=0x1 YEAR=0x7ea
kfdhdb.grpstmp.lo: 2014199808 ; 0x0e8: USEC=0x0 MSEC=0x390 SECS=0x0 MINS=0x1e
kfdhdb.vfstart: 0 ; 0x0ec: 0x00000000
--在file directory里查看某个数据文件的AU分布
----这里查看259 的au分布: users.259.1223967045
SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,path from v$asm_disk;
GROUP_NUMBER DISK_NUMBER NAME PATH
------------ ----------- ---------- ------------------------------
2 0 OCR_0000 /dev/asm_ocr_1
1 1 DATA_0001 /dev/asm_data_2
1 0 DATA_0000 /dev/asm_data_1
select disk_kffxp,au_kffxp,xnum_kffxp
from x$kffxp
where group_kffxp=1
and number_kffxp=281 order by 1;
DISK_KFFXP AU_KFFXP XNUM_KFFXP
---------- ---------- ----------
0 807 0
0 808 2
0 809 4
0 810 5
1 538 3
1 537 1
kfed read /dev/asm_data_1 | grep f1b1
--kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002
--一个au 1M,一个block 4k,最多存放1024/4=256个block,对于256个数据文件
--file directory 在AU=2的blkn=1上,查找下一个AU位置
--259-256=3 存在第三个block(如果au=4m,可以存放1024个block,对应1024个数据文件,就不需要减了)
--blkn=0是保留,所以从1开始
kfed read /dev/asm_data_1 aun=2 blkn=1 | more
...............
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 S=0
kfffde[0].xptr.chk: 40 ; 0x4a7: 0x28
kfffde[1].xptr.au: 41 ; 0x4a8: 0x00000029 --下一个AU=41,
kfffde[1].xptr.disk: 1 ; 0x4ac: 0x0001 --disk=1,第二个硬盘
......................
kfed read /dev/asm_data_2 aun=41 blkn=3 | more
........................
kfbh.block.blk: 259 ; 0x004: blk=259
kfffde[0].xptr.au: 807 ; 0x4a0: 0x00000327
kfffde[2].xptr.au: 808 ; 0x4b0: 0x00000328
kfffde[4].xptr.au: 809 ; 0x4c0: 0x00000329
kfffde[5].xptr.au: 810 ; 0x4c8: 0x0000032a
kfffde[6].xptr.au: 4294967295 ; 0x4d0: 0xffffffff
--对应完成
--查看别名信息:
--先确定f1b1 所在的AU,然后查看block 6
kfed read /dev/asm_data_1 aun=2 blkn=6 | more
--查看au指针,这里指向第一个文件的AU=29
kfffde[0].xptr.au: 29 ; 0x4a0: 0x0000001d --AU=29
kfffde[0].xptr.disk: 0 ; 0x4a4: 0x0000 --第1号文件
kfed read /dev/asm_data_1 aun=29 blkn=0 | more
kfbh.type: 11 ; 0x002: KFBTYP_ALIASDIR --别名目录
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




