ASM 翻译系列第十弹:ASM Internal ASM DISK header
2017-02-22 11:24
543 查看
原文:
ASM disk header
作者: Bane Radulovic
译者:庄培培,沃趣科技数据库售前工程师,主要负责数据库平台架构方案设计、产品验证测试。
审校:魏兴华
责编:钱曙光
我们对一个LINUX平台上通过asmlib管理的磁盘的block 0,使用kfed工具进行输出观察。
上述kfed命令的输出结果显示这个asm块有两种类型的数据 以kfbh为前缀的块头信息和以kfdhdb为前缀的ASM磁盘头信息。实际上,每个ASM元数据块都会有块头信息和与块类型相匹配的一些相关数据。
重要的ASM磁盘头数据
能够看到与AU0的元数据块0相同的内容。当磁盘头被破坏或者丢失时,这个备份将是非常有用的。只需要运行kfed repair [磁盘名]命令即可修复,如果AU大小不是默认的1MB,还需要指定AU大小的具体值。 如果怀疑ASM的磁盘头出现故障,最好寻求Oracle技术支持人员的帮助,而不是独自进行操作。
ASM磁盘头中部分Exadata专用属性如下:
ASM磁盘名由磁盘组名 (DBFS_DG),存储节点磁盘标识(CD),存储节点磁盘编(3)号和存储节点名(exadatacel01)构成。
失败组的名字与存储节点的名字相同,Exadata环境中默认的AU大小是4MB。
Exadata的ASM磁盘头信息通过不暴露给数据库节点的方式进行保护。
ASM从11.1.0.7版本开始,ASM磁盘头通过维护一份在AU1备份的方式实现进一步的保护机制。
ASM disk header
作者: Bane Radulovic
译者:庄培培,沃趣科技数据库售前工程师,主要负责数据库平台架构方案设计、产品验证测试。
审校:魏兴华
责编:钱曙光
ASM disk header
ASM磁盘头可能是ASM元数据中最广为人知的部分。之前你可能认为当它被破坏或丢失时,只能寄希望于Oracle技术支持人员协助来恢复。在本节中将解释ASM磁盘头的重要性和它包含的信息。Block zero
ASM磁盘是以AU为单位进行格式化的,部分AU会存放ASM元数据,其他AU存放数据库中的相关数据(如数据文件、备份文件、归档文件等等)。包含ASM元数据的AU会以元数据块的方式进行格式化(一个元数据块的大小为4K)。AU0位于ASM磁盘的起始位置,它始终用于存储ASM元数据。AU0的第一个块,即block 0,就是ASM的磁盘头。ASM disk header contents
ASM 磁盘头的大部分内容仅与本磁盘相关,但也有部分信息与整个磁盘组相关,有些甚至于与整个cluster相关。我们对一个LINUX平台上通过asmlib管理的磁盘的block 0,使用kfed工具进行输出观察。
$ kfed read /dev/oracleasm/disks/ASMD1 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: T=0 NUMB=0x0 kfbh.block.obj: 2147483648 ; 0x008: TYPE=0x8 NUMB=0x0 kfbh.check: 473773689 ; 0x00c: 0x1c3d3679 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: ORCLDISKASMD1 ; 0x000: length=13 kfdhdb.driver.reserved[0]: 1145918273 ; 0x008: 0x444d5341 kfdhdb.driver.reserved[1]: 49 ; 0x00c: 0x00000031 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: 186646528 ; 0x020: 0x0b200000 kfdhdb.dsknum: 0 ; 0x024: 0x0000 kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER kfdhdb.dskname: ASMD1 ; 0x028: length=5 kfdhdb.grpname: DATA ; 0x048: length=4 kfdhdb.fgname: ASMD1 ; 0x068: length=5 ...
上述kfed命令的输出结果显示这个asm块有两种类型的数据 以kfbh为前缀的块头信息和以kfdhdb为前缀的ASM磁盘头信息。实际上,每个ASM元数据块都会有块头信息和与块类型相匹配的一些相关数据。
Important ASM metadata block 0 header data
数据类型 | 值 |
---|---|
kfbh.endian | 系统字序。0 - 大字序,1 - 小字序。 |
kfbh.type | ASM块类型。KFBTYP_DISKHEAD 表示这是一个ASM磁盘头类型块。 |
kfbh.block.blk | ASM块号。注意ASM磁盘头块的块编号是0 |
数据类型 | 值 |
---|---|
kfdhdb.driver.provstr | ASMLIB磁盘是ORCLDISK+磁盘名,非ASMLIB磁盘是ORCLDISK |
kfdhdb.dsknum | ASM磁盘编号 |
kfdhdb.grptyp | 磁盘级冗余级别 KFDGTP_EXTERNAL 代表 external级别,KFDGTP_NORMAL 代表 normal级别,KFDGTP_HIGH 代表 high级别。 |
kfdhdb.hdrsts | ASM磁盘头状态. V$ASM_DISK.HEADER_STATUS视图内包含所有可能的状态. |
kfdhdb.dskname | ASM磁盘名 |
kfdhdb.grpname | ASM磁盘组名 |
kfdhdb.fgname | ASM失败组名 |
kfdhdb.crestmp.hi | lo |
kfdhdb.mntstmp.hi | lo |
kfdhdb.secsize | 磁盘的扇区大小(bytes) |
kfdhdb.blksize | ASM元数据块的大小(bytes) |
kfdhdb.ausize | Alloocation unit的大小(bytes).默认的AU大小为1 MB |
kfdhdb.dsksize | 磁盘大小(以au为单位).本例中的磁盘大小为10239 MB |
kfdhdb.fstlocn | 指针指向ASM的空闲空间表.1代表本AU中的ASM 块1 |
kfdhdb.altlocn | 指针指向ASM的分配表.2 代表本AU中的ASM 块2 |
kfdhdb.f1b1locn | 指针指向ASM的文件目录.2代表本ASM磁盘的 AU 2 |
kfdhdb.dbcompat | 最小的数据库兼容版本. 0x0a100000 = 10.1 |
kfdhdb.grpstmp.hi | lo |
kfdhdb.vfstart | vfend |
kfdhdb.spfile | ASM spfile参数文件的AU号,本特性限于11.2或更高版本。 |
kfdhdb.spfflg | ASM spfile参数文件标识,如果这个值是1,ASM spfile参数文件则位于本磁盘的kfdhdb.spfile参数的AU,本特性限于11.2或更高版本。 |
ASM disk header backup
ASM从11.1.0.7版本开始,磁盘头块的信息会自动备份到AU1的倒数第二个ASM元数据块中。知道AU的块大小和ASM元数据块的大小后,就能找到倒数第二个块的块编号。通过kfed工具可以从块头中读取到这些信息,并计算出AU1的倒数第二个块的块编号。$ ausize=`kfed read /dev/oracleasm/disks/ASMD1 | grep ausize | tr -s ' ' | cut -d' ' -f2` $ blksize=`kfed read /dev/oracleasm/disks/ASMD1 | grep blksize | tr -s ' ' | cut -d' ' -f2` $ let n=$ausize/$blksize-2 $ echo $n 254
译者注:其实在10.2.0.5版本,ASM也会自动备份磁盘头的数据到AU 1的倒数第二个ASM元数据块中。
$ kfed read /dev/oracleasm/disks/ASMD1 aun=1 blkn=254 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: T=0 NUMB=0x0 kfbh.block.obj: 2147483648 ; 0x008: TYPE=0x8 NUMB=0x0 kfbh.check: 473773689 ; 0x00c: 0x1c3d3679 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: ORCLDISKASMD1 ; 0x000: length=13 ... kfdhdb.dsknum: 0 ; 0x024: 0x0000 kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER kfdhdb.dskname: ASMD1 ; 0x028: length=5 kfdhdb.grpname: DATA ; 0x048: length=4 kfdhdb.fgname: ASMD1 ; 0x068: length=5 ...
能够看到与AU0的元数据块0相同的内容。当磁盘头被破坏或者丢失时,这个备份将是非常有用的。只需要运行kfed repair [磁盘名]命令即可修复,如果AU大小不是默认的1MB,还需要指定AU大小的具体值。 如果怀疑ASM的磁盘头出现故障,最好寻求Oracle技术支持人员的帮助,而不是独自进行操作。
ASM disk header in Exadata
Exadata中的ASM磁盘并不是以设备名的方式给操作系统使用。它们使用专用的名称格式 o/[存储节点IP]/[磁盘名].kfed工具支持这种名称格式,所以kfed可以在exadata环境中使用。查看Exadata磁盘的ASM磁盘头:$ kfed read o/192.168.10.9/DBFS_DG_CD_03_exadatacel01 kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD ... kfdhdb.dskname:DBFS_DG_CD_03_EXADATACEL01 ; 0x028: length=26 kfdhdb.grpname: DBFS_DG ; 0x048: length=7 kfdhdb.fgname: EXADATACEL01 ; 0x068: length=12 ... kfdhdb.ausize: 4194304 ; 0x0bc: 0x00400000 ...
ASM磁盘头中部分Exadata专用属性如下:
ASM磁盘名由磁盘组名 (DBFS_DG),存储节点磁盘标识(CD),存储节点磁盘编(3)号和存储节点名(exadatacel01)构成。
失败组的名字与存储节点的名字相同,Exadata环境中默认的AU大小是4MB。
总结
ASM磁盘头包含ASM磁盘组正常运作和保持可用的重要元数据。 为防止ASM磁盘头的突然损坏和丢失,Oracle推荐通过磁盘分区的方式,就是将它“移动”到远离磁盘物理起始位置的方式实现对ASM磁盘头的保护。Exadata的ASM磁盘头信息通过不暴露给数据库节点的方式进行保护。
ASM从11.1.0.7版本开始,ASM磁盘头通过维护一份在AU1备份的方式实现进一步的保护机制。
相关文章推荐
- ASM 翻译系列第十七弹:ASM Internal ASM Disk Directory
- #ASM 翻译系列第三十四弹:ASM INTERNAL ASM Disk Group Attributes
- #ASM 翻译系列第十七弹:ASM Internal ASM Disk Directory
- #ASM 翻译系列第十六弹:ASM Internal ASM Active Change Directory
- #ASM 翻译系列第三十二弹:ASM INTERNAL Find block in ASM
- #ASM 翻译系列第十九弹:ASM Internal ASM Continuing Operations Directory
- #ASM 翻译系列第二十弹:ASM Internal ASM file number 7
- #ASM 翻译系列第二十二弹:ASM Internal ASM file number 8
- ASM 翻译系列第八弹:ASM Internal ASM file extent map
- #ASM 翻译系列第二十三弹:ASM Internal ASM files number 12 and 254
- #ASM 翻译系列第二十四弹:ASM Internal ASM files number 10 and 11
- ASM翻译系列第三弹:ASM disk的基础知识
- #ASM 翻译系列第二十七弹:ASM INTERNAL ASM METADATA BLOCK
- ASM 翻译系列第十二弹:ASM Internal amdu - ASM Metadata Dump Utility
- ###ASM 翻译系列第二十八弹:ASM INTERNAL Partnership and Status Table
- #ASM 翻译系列第二十九弹:ASM INTERNAL Free Space Table
- ASM 翻译系列第十四弹:ASM Internal Rebalancing act
- #ASM 翻译系列第十八弹:ASM Internal ASM file number 5
- #ASM 翻译系列第三十一弹:ASM INTERNAL How many allocation units per file
- asm disk header 的自动备份和恢复