LVM 磁盘结构
程序员文章站
2024-01-31 09:04:40
...
复杂度3/5
机密度4/5
最后更新2021/05/17
VG由一堆PV组成,每个PV的头是ipl_rec,无论这个PV能不能boot,只要是AIX的盘(曾经标记过PVID),都在最初0字节标记0xc9c2d4c1,这个是EBCIDIC编码的IBMA,这个编码可比ASCII早了好久,但不知基于什么考虑(本人未仔细研究过),好多本来连续的字母,编码却插了个空位,无形中增加了编码复杂性,所以现在除了IBM自家大机还在使用,别的地方完全被ASCII编码一统天下。
后面偏移120字节的地方就是著名的PVID了,每个PV都有一个唯一的PVID,PVID的编码是与识别(其实是PV添加)它的机器的系列号,以及当前时间有关,因此通过PVID大概就能知道这个盘(PV)是被哪台机器加入到VG或者assign的。
如果PV被加如到VG中,则会有LVM信息写入,LVM从磁盘头偏移0x0E00开始:
00000E00 LVM___ID VGID__W1 VGID__W2 VGID__W3
00000E10 VGID__W4 PPSA_LEN PVM__LEN MWCDBLEN
00000E20 VGI__LEN PVI__LEN LVCBILEN LVEA_LEN
00000E30 PPEA_LEN RESA_LEN PV___NUM VERnPPSZ
00000E40 PPSAPSN0 PPSAPSN0 PPSAPSN1 PPSAPSN1
00000E50 PVM_PSN0 PVM_PSN0 PVM_PSN1 PVM_PSN1
00000E60 MWC_PSN0 MWC_PSN0 MWC_PSN1 MWC_PSN1
00000E70 VGI_PSN0 VGI_PSN0 VGI_PSN1 VGI_PSN1
00000E80 PVI_PSN0 PVI_PSN0 PVI_PSN1 PVI_PSN1
00000E90 LVCBPSN0 LVCBPSN0 LVCBPSN1 LVCBPSN1
00000EA0 LVEAPSN0 LVEAPSN0 LVEAPSN1 LVEAPSN1
00000EB0 PPEAPSN0 PPEAPSN0 PPEAPSN1 PPEAPSN1
00000EC0 VGSAPSN0 VGSAPSN0 VGSAPSN1 VGSAPSN1
00000ED0 VGDAPSN0 VGDAPSN0 VGDAPSN1 VGDAPSN1
00000EE0 VGSA_LEN VGDA_LEN LTG_SIZE BBR__LEN
00000EF0 BBR_PSN0 BBR_PSN0 RESERVED RESERVED
。。。。
依次是:
- LVM ID,又是个常数标识:0x5F4C564D,这回换ASCII码了,"_LVM"
- VGID,PV所在VG的VGID,全尺寸的,总共128bytes,开始64bytes可能是0
- VGSA长度,名字却叫做PPSA_LEN,也对,因为实际标记的是PP状态,并不是VG状态
- PV missing标记的长度
- MWC dirty bits的长度
- VG info的长度
- PV info的长度
- LVCB的长度
- LV头长度
- PP头长度
- LVM元数据长度
- 庵是第几个PV
- VG结构版本(original,big,scale那些)
- pp size,既2的几次方,就是factor的最大值
下面是VGSA: - VGSA(PPSA)所在扇区(两个,分别是主备),前面有长度,这里有起点,VGSA定位了
- PV Missing信息所在扇区(还是两个)
下面是VGDA: - VG INFO所在扇区(主备两个)
- PVINFO所在扇区(主备两个)
- LVCB所在扇区(主备)
- 第一个LV所在扇区(主备)
- 第一个PP所在扇区(主备)
- VGSA所在扇区(主备)前面都按顺序排下来啦,为啥还要指明?为了冗余备份校验?
- VGDA所在扇区(主备)
- VGSA长度(又来一次?)
- VGDA长度
- LTG大小(2的几次方)
- BB(bad block重定位区域长度)
- BB所在扇区