欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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所在扇区