暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle ASM 磁盘头解析

3.1 kfed工具介绍

本节内容主要使用kfed工具研究asm diskheader的物理结构,无论asm磁盘组是否启动均可以使用kfed工具读取和修改asm元数据信息,语法如下图所示,

image.png

图3 kfed工具解析

3.2 磁盘头kfbh结构解析

使用kfed命令读取ASM磁盘头
$ kfed read aus=1M aun=0 blkn=0 dev=/dev/oracleasm/disks/data2
磁盘头元数据块共分为两部分,内部实现由C语言的两个结构体组成,通用元数据层(kfbh)和磁盘头元数据层(kfdhdb),偏移量0~31为通用元数据层共包含32 bytes,其它部分为磁盘头元数据层,根据元数据块类型不同,物理结构各有差异。
所有ASM元数据块均包含通用元数据层,前32 bytes结构一致,以磁盘头元数据块为例,
kfbh.endian: 1 ; 0x000: 0x01
endian结构体kfbh中的成员变量,代表服务器字节序,大端序为0,小端序为1,“1 ; 0x000: 0x01”代表偏移量为0x000的地址,存储的值为0x01,其二进制表示为“1”,说明数据库运行操作系统为小端序,其余成员变量解释如下图所示,

image.png

图3 kfbh结构解析

3.3 磁盘头kfdhdb结构解析

kfdhdb.fstlocn: 1 ; 0x0cc: 0x00000001
kfdhdb.altlocn: 2 ; 0x0d0: 0x00000002
kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002

kfdhdb.fstlocn存储指向KFBTYP_FREESPC所在当前AU的ASM块号;
kfdhdb. altlocn存储指向KFBTYP_ALLOCTBL所在当前AU的ASM块号
kfdhdb.f1b1locn存储指向ASM file 1 文件目录表,块类型代码为kfbh.type: 4 ; 0x002: KFBTYP_FILEDIR,因此文件目录表并非存储在固定位置,具体存储位置以kfdhdb.f1b1locn实际存储值为准。

kfdhdb.vfstart: 0 ; 0x0ec: 0x00000000
kfdhdb.vfend: 0 ; 0x0f0: 0x00000000
kfdhdb.spfile: 0 ; 0x0f4: 0x00000000
kfdhdb.spfflg: 0 ; 0x0f8: 0x00000000

kfdhdb.vfstart/ vfend指向表决盘存储的开始/结束AU,0表示未存储表决盘。
kfdhdb.spfile/ spfflg,表示该磁盘中是否存储ASM spfile,以及ASM spfile的存储位置,因此在ASM磁盘组未MOUNT的情况下,依然可以通过该值的信息,查找和加载spfile,从而启动asm实例。其它成员变量的解析如下图所示,

image.png

图4 kfdhdb结构解析

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • 3.1 kfed工具介绍
  • 3.2 磁盘头kfbh结构解析
  • 3.3 磁盘头kfdhdb结构解析