Partner and Status Table(PST)位于asm磁盘的第二个AU(AU1),也属于Physically addressed metadata,PST对于ASM非常重要,它记录了该磁盘组所有磁盘的磁盘号、磁盘之间的partner关系、failgroup信息、PST心跳信息以及磁盘状态,磁盘的第二个AU(AU1)为PST保留,但并不是磁盘组内的所有磁盘都有PST,磁盘组冗余级别不同,PST的个数也不同,如下:
- External Redundancy一般有一个PST
- Normal Redundancy至多有个3个PST
- High Redundancy 至多有5个PST
PST元数据由ASM实例的GMON进程维护,当mount diskgroup时,GMON进程会读取diskgroup中所有磁盘去找到PST,通过PST确认哪些磁盘是ONLINE可以使用的,哪些是OFFLINE不能使用的。当NORMAL或者HIGH Redundancy的磁盘组有磁盘发生offline或者drop时,GMON会去更新PST,并且最新版本的PST会在磁盘之间发生迁移。
磁盘第二个AU(AU1)的第一个block时PST header block,它属于PST的元数据,描述了PST的副本数量以及分布情况
没有PST的磁盘AU1的第一个block显示如下
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[grid@rac1 trace]$ kfed read /dev/asmdisk-data5 aun=1 kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 13 ; 0x002: KFBTYP_PST_NONE kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 2147483648 ; 0x004: blk=0 (indirect) kfbh.block.obj: 2147483649 ; 0x008: disk=1 kfbh.check: 17662464 ; 0x00c: 0x010d8200 kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 |
拥有PST的磁盘AU1的第一个block显示如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
[grid@rac1 trace]$ kfed read /dev/asmdisk-data3 aun=1 kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 17 ; 0x002: KFBTYP_PST_META kfbh.datfmt: 2 ; 0x003: 0x02 kfbh.block.blk: 256 ; 0x004: blk=256 kfbh.block.obj: 2147483650 ; 0x008: disk=2 kfbh.check: 1074756307 ; 0x00c: 0x400f7ad3 kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfdpHdrPairBv1.first.super.time.hi:33107154 ; 0x000: HOUR=0x12 DAYS=0x6 MNTH=0xb YEAR=0x7e4 kfdpHdrPairBv1.first.super.time.lo:3385185280 ; 0x004: USEC=0x0 MSEC=0x175 SECS=0x1c MINS=0x32 kfdpHdrPairBv1.first.super.last: 2 ; 0x008: 0x00000002 kfdpHdrPairBv1.first.super.next: 2 ; 0x00c: 0x00000002 kfdpHdrPairBv1.first.super.copyCnt: 3 ; 0x010: 0x03 --3个PST副本,分布在disk 0,1,2上 kfdpHdrPairBv1.first.super.version: 1 ; 0x011: 0x01 kfdpHdrPairBv1.first.super.ub2spare: 0 ; 0x012: 0x0000 kfdpHdrPairBv1.first.super.incarn: 1 ; 0x014: 0x00000001 kfdpHdrPairBv1.first.super.copy[0]: 0 ; 0x018: 0x0000 -- disk 0 kfdpHdrPairBv1.first.super.copy[1]: 1 ; 0x01a: 0x0001 -- disk 1 kfdpHdrPairBv1.first.super.copy[2]: 2 ; 0x01c: 0x0002 -- disk 2 kfdpHdrPairBv1.first.super.copy[3]: 0 ; 0x01e: 0x0000 kfdpHdrPairBv1.first.super.copy[4]: 0 ; 0x020: 0x0000 kfdpHdrPairBv1.first.super.dtaSz: 3 ; 0x022: 0x0003 |
- super.time.hi:最近一次更新PST的时间(年、月、日、时)
- super.time.lo:最近一次更新PST的时间(分、秒、毫秒、微妙)
- super.last:最近一次更新的PST版本号
- super.next:下一个可用的PST版本号
- super.copyCnt:拥有PST的磁盘个数
- super.copy[n]:PST副本列表,描述PST分布在哪些磁盘上
- super.incarn:PST副本列表的当前版本号,当PST迁移到其他磁盘上时,该值将变为super.last
- super.dtaSz:该磁盘组的磁盘数(包含offline和online)
除了PST header block之外,还有PST数据实时记录了磁盘组每一块磁盘的状态以及磁盘之间的PARTNER关系
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
[grid@rac1 trace]$ kfed read /dev/asmdisk-data3 aun=1 blkn=3 kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 18 ; 0x002: KFBTYP_PST_DTA kfbh.datfmt: 2 ; 0x003: 0x02 kfbh.block.blk: 259 ; 0x004: blk=259 kfbh.block.obj: 2147483650 ; 0x008: disk=2 kfbh.check: 3504163057 ; 0x00c: 0xd0dd48f1 kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfdpDtaEv1[0].status: 127 ; 0x000: I=1 V=1 V=1 P=1 P=1 A=1 D=1 kfdpDtaEv1[0].fgNum: 1 ; 0x002: 0x0001 kfdpDtaEv1[0].addTs: 2462919836 ; 0x004: 0x92cd2c9c kfdpDtaEv1[0].partner[0]: 49154 ; 0x008: P=1 P=1 PART=0x2 kfdpDtaEv1[0].partner[1]: 49153 ; 0x00a: P=1 P=1 PART=0x1 kfdpDtaEv1[0].partner[2]: 10000 ; 0x00c: P=0 P=0 PART=0x2710 kfdpDtaEv1[0].partner[3]: 0 ; 0x00e: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[4]: 0 ; 0x010: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[5]: 0 ; 0x012: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[6]: 0 ; 0x014: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[7]: 0 ; 0x016: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[8]: 0 ; 0x018: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[9]: 0 ; 0x01a: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[10]: 0 ; 0x01c: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[11]: 0 ; 0x01e: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[12]: 0 ; 0x020: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[13]: 0 ; 0x022: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[14]: 0 ; 0x024: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[15]: 0 ; 0x026: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[16]: 0 ; 0x028: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[17]: 0 ; 0x02a: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[18]: 0 ; 0x02c: P=0 P=0 PART=0x0 kfdpDtaEv1[0].partner[19]: 0 ; 0x02e: P=0 P=0 PART=0x0 kfdpDtaEv1[1].status: 127 ; 0x030: I=1 V=1 V=1 P=1 P=1 A=1 D=1 kfdpDtaEv1[1].fgNum: 2 ; 0x032: 0x0002 kfdpDtaEv1[1].addTs: 2462919836 ; 0x034: 0x92cd2c9c kfdpDtaEv1[1].partner[0]: 49152 ; 0x038: P=1 P=1 PART=0x0 kfdpDtaEv1[1].partner[1]: 49154 ; 0x03a: P=1 P=1 PART=0x2 kfdpDtaEv1[1].partner[2]: 10000 ; 0x03c: P=0 P=0 PART=0x2710 kfdpDtaEv1[1].partner[3]: 0 ; 0x03e: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[4]: 0 ; 0x040: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[5]: 0 ; 0x042: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[6]: 0 ; 0x044: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[7]: 0 ; 0x046: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[8]: 0 ; 0x048: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[9]: 0 ; 0x04a: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[10]: 0 ; 0x04c: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[11]: 0 ; 0x04e: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[12]: 0 ; 0x050: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[13]: 0 ; 0x052: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[14]: 0 ; 0x054: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[15]: 0 ; 0x056: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[16]: 0 ; 0x058: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[17]: 0 ; 0x05a: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[18]: 0 ; 0x05c: P=0 P=0 PART=0x0 kfdpDtaEv1[1].partner[19]: 0 ; 0x05e: P=0 P=0 PART=0x0 |
- kfdpDtaEv1[n].status:该磁盘状态,正常online可读写的磁盘状态为0x7f也就是127
- kfdpDtaEv1[n].fgNum:该磁盘所属failgroup number
- kfdpDtaEv1[n].addTs:该磁盘加入磁盘组的时间戳
- kfdpDtaEv1[n].partner[i]:该磁盘的partner列表,该列表最大为20个slot,最多只能有8个slot为active状态,也就是说该磁盘最多只能与8块盘互为partner
为了保护NORMAL和HIGH冗余磁盘partner之间的安全和数据一致性,oracle设计了一个PST的心跳块位于拥有PST的磁盘AU1的最后一个块上,当PST心跳延时超过“_asm_hbeatiowait”(默认15s)时,磁盘组将被强制dismount
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[grid@rac1 trace]$ kfed read /dev/asmdisk-data3 aun=1 blkn=255 kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 19 ; 0x002: KFBTYP_HBEAT kfbh.datfmt: 2 ; 0x003: 0x02 kfbh.block.blk: 511 ; 0x004: blk=511 kfbh.block.obj: 2147483650 ; 0x008: disk=2 kfbh.check: 3600100627 ; 0x00c: 0xd6952d13 kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfdpHbeatB.instance: 1 ; 0x000: 0x00000001 kfdpHbeatB.ts.hi: 33115651 ; 0x004: HOUR=0x3 DAYS=0x10 MNTH=0x3 YEAR=0x7e5 kfdpHbeatB.ts.lo: 2698943488 ; 0x008: USEC=0x0 MSEC=0x3a7 SECS=0xd MINS=0x28 kfdpHbeatB.rnd[0]: 1529444524 ; 0x00c: 0x5b2978ac kfdpHbeatB.rnd[1]: 1274815798 ; 0x010: 0x4bfc2536 kfdpHbeatB.rnd[2]: 4254773072 ; 0x014: 0xfd9aaf50 kfdpHbeatB.rnd[3]: 418287143 ; 0x018: 0x18ee8e27 |