Linux文件系统-LVM逻辑卷

1. LVM逻辑卷是什么

LVM(Logical Volume Manager)卷组管理器,通过对底层物理磁盘的封装,可以将多块物理磁盘组合成逻辑资源池,提供给上层应用使用(如文件系统). LVM的好处是,可以跨物理硬盘为文件系统提供容量,并且可以动态进行分区容量的调整,而不会损坏原有的文件系统.

2. LVM基本原理

2.1 LVM基本概念

物理磁盘:物理存储介质,可以是整块物理存储或一个分区.

物理卷PV(physical volume):LVM要使用物理磁盘,在物理磁盘的头部写入lvm标签头,就创建了一个PV,PV是组成VG的基本单元.

卷组VG(Volume Group):VG相当于非LVM系统中的物理硬盘,一个卷组VG由一个或多个PV组成,形成一个存储资源池.

逻辑卷LV(logical volume):LV相当于非LVM系统中的硬盘分区,LV建立在卷组VG之上,文件系统建立在LV之上.

物理块PE(physical Extent):创建LV时可以分配的最小存储单元,大小可以指定,默认为4MB

2.1 物理磁盘到LV的映射关系

物理磁盘到LV映射关系图

如上是从物理磁盘到lvm逻辑卷的创建过程及映射关系,lv01、lv02被创建后,通过device-mapper映射为逻辑块设备(块设备路径/dev/vg01/lv01、/dev/vg01/lv02),供文件系统使用,通过mkfs.ext4 /dev/vg01/lv02可创建ext4文件系统.

3. LVM 元数据分析

元数据主要是两部分,PV header + metadata,位置一般是在PV的0~2048 sector中,从2048 sector开始是数据区域.

3.1 PV header

通过pvcreate创建pv时,会将pv header写入物理磁盘,位置一般是在磁盘的第二个sector(512B/sector),lvm扫描磁盘时,通过pv header来识别PV.
pv header主要信息包括,pv uuid、元数据位置和metadata位置.

pv header实例:

[root@localhost ~]# pvcreate /dev/vdb1
  Physical volume "/dev/vdb1" successfully created.
[root@localhost ~]# hexdump -C /dev/vdb1 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200  4c 41 42 45 4c 4f 4e 45  01 00 00 00 00 00 00 00  |LABELONE........|
00000210  ba 8b 91 47 20 00 00 00  4c 56 4d 32 20 30 30 31  |...G ...LVM2 001|
00000220  72 36 58 64 4f 53 36 65  46 55 59 4d 38 30 76 4b  |r6XdOS6eFUYM80vK|
00000230  73 59 41 49 42 65 54 41  49 71 77 36 42 65 33 73  |sYAIBeTAIqw6Be3s|
00000240  00 00 80 0c 00 00 00 00  00 00 10 00 00 00 00 00  |................|
00000250  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000260  00 00 00 00 00 00 00 00  00 10 00 00 00 00 00 00  |................|
00000270  00 f0 0f 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000280  00 00 00 00 00 00 00 00  02 00 00 00 00 00 00 00  |................|
00000290  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00001000  16 d6 8e db 20 4c 56 4d  32 20 78 5b 35 41 25 72  |.... LVM2 x[5A%r|
00001010  30 4e 2a 3e 01 00 00 00  00 10 00 00 00 00 00 00  |0N*>............|
00001020  00 f0 0f 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00001030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

3.2 metadata

metadata记录的是vg和lv的配置信息,以ASCII码的方式写入metadata区域;vg和lv的每次配置变更,都会以追加的方式写入metadata区域,并打上时间戳,该区域写满后,新的变更记录会覆盖最早的一次记录. 进行vgscan时,猜测应该是通过读取最新一次的配置记录,进行激活.
vg配置信息,主要是包含的pv信息.
lv配置信息,主要是lv的起始位置和PE大小.

实例:
pvcreate /dev/vdb1
pvcreate /dev/vdb2
pvcreate /dev/vdb3
vgcreate /dev/vdb1 /dev/vdb2 /dev/vdb3
vgcreate wan /dev/vdb1 /dev/vdb2 /dev/vdb3
lvcreate -L 300M -n lv01 wan

[root@192 ~]# hexdump -C /dev/vdb1
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200  4c 41 42 45 4c 4f 4e 45  01 00 00 00 00 00 00 00  |LABELONE........|
00000210  54 7e d8 46 20 00 00 00  4c 56 4d 32 20 30 30 31  |T~.F ...LVM2 001|
00000220  72 36 58 64 4f 53 36 65  46 55 59 4d 38 30 76 4b  |r6XdOS6eFUYM80vK|
00000230  73 59 41 49 42 65 54 41  49 71 77 36 42 65 33 73  |sYAIBeTAIqw6Be3s|
00000240  00 00 80 0c 00 00 00 00  00 00 10 00 00 00 00 00  |................|
00000250  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000260  00 00 00 00 00 00 00 00  00 10 00 00 00 00 00 00  |................|
00000270  00 f0 0f 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000280  00 00 00 00 00 00 00 00  02 00 00 00 01 00 00 00  |................|
00000290  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00001000  81 0f 5a 87 20 4c 56 4d  32 20 78 5b 35 41 25 72  |..Z. LVM2 x[5A%r|
00001010  30 4e 2a 3e 01 00 00 00  00 10 00 00 00 00 00 00  |0N*>............|
00001020  00 f0 0f 00 00 00 00 00  00 08 00 00 00 00 00 00  |................|
00001030  a5 05 00 00 00 00 00 00  df d4 f3 28 00 00 00 00  |...........(....|
00001040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00001200  77 61 6e 20 7b 0a 69 64  20 3d 20 22 49 67 43 57  |wan {.id = "IgCW|
00001210  6a 4b 2d 6c 4f 6f 31 2d  35 54 36 57 2d 7a 73 5a  |jK-lOo1-5T6W-zsZ|
00001220  37 2d 52 30 32 45 2d 6f  49 67 67 2d 33 4a 64 66  |7-R02E-oIgg-3Jdf|
00001230  62 33 22 0a 73 65 71 6e  6f 20 3d 20 31 0a 66 6f  |b3".seqno = 1.fo|
00001240  72 6d 61 74 20 3d 20 22  6c 76 6d 32 22 0a 73 74  |rmat = "lvm2".st|
00001250  61 74 75 73 20 3d 20 5b  22 52 45 53 49 5a 45 41  |atus = ["RESIZEA|
00001260  42 4c 45 22 2c 20 22 52  45 41 44 22 2c 20 22 57  |BLE", "READ", "W|
00001270  52 49 54 45 22 5d 0a 66  6c 61 67 73 20 3d 20 5b  |RITE"].flags = [|
00001280  5d 0a 65 78 74 65 6e 74  5f 73 69 7a 65 20 3d 20  |].extent_size = |
00001290  38 31 39 32 0a 6d 61 78  5f 6c 76 20 3d 20 30 0a  |8192.max_lv = 0.|
000012a0  6d 61 78 5f 70 76 20 3d  20 30 0a 6d 65 74 61 64  |max_pv = 0.metad|
000012b0  61 74 61 5f 63 6f 70 69  65 73 20 3d 20 30 0a 0a  |ata_copies = 0..|
000012c0  70 68 79 73 69 63 61 6c  5f 76 6f 6c 75 6d 65 73  |physical_volumes|
000012d0  20 7b 0a 0a 70 76 30 20  7b 0a 69 64 20 3d 20 22  | {..pv0 {.id = "|
000012e0  72 36 58 64 4f 53 2d 36  65 46 55 2d 59 4d 38 30  |r6XdOS-6eFU-YM80|
000012f0  2d 76 4b 73 59 2d 41 49  42 65 2d 54 41 49 71 2d  |-vKsY-AIBe-TAIq-|
00001300  77 36 42 65 33 73 22 0a  64 65 76 69 63 65 20 3d  |w6Be3s".device =|
00001310  20 22 2f 64 65 76 2f 76  64 62 31 22 0a 0a 73 74  | "/dev/vdb1"..st|
00001320  61 74 75 73 20 3d 20 5b  22 41 4c 4c 4f 43 41 54  |atus = ["ALLOCAT|
00001330  41 42 4c 45 22 5d 0a 66  6c 61 67 73 20 3d 20 5b  |ABLE"].flags = [|
00001340  5d 0a 64 65 76 5f 73 69  7a 65 20 3d 20 34 30 39  |].dev_size = 409|
00001350  36 30 30 0a 70 65 5f 73  74 61 72 74 20 3d 20 32  |600.pe_start = 2|
00001360  30 34 38 0a 70 65 5f 63  6f 75 6e 74 20 3d 20 34  |048.pe_count = 4|
00001370  39 0a 7d 0a 0a 70 76 31  20 7b 0a 69 64 20 3d 20  |9.}..pv1 {.id = |
00001380  22 32 36 5a 4f 55 6d 2d  34 6a 76 75 2d 48 4c 4f  |"26ZOUm-4jvu-HLO|
00001390  77 2d 42 47 65 6a 2d 66  72 35 75 2d 79 58 36 34  |w-BGej-fr5u-yX64|
000013a0  2d 30 4c 52 46 32 78 22  0a 64 65 76 69 63 65 20  |-0LRF2x".device |
000013b0  3d 20 22 2f 64 65 76 2f  76 64 62 32 22 0a 0a 73  |= "/dev/vdb2"..s|
000013c0  74 61 74 75 73 20 3d 20  5b 22 41 4c 4c 4f 43 41  |tatus = ["ALLOCA|
000013d0  54 41 42 4c 45 22 5d 0a  66 6c 61 67 73 20 3d 20  |TABLE"].flags = |
000013e0  5b 5d 0a 64 65 76 5f 73  69 7a 65 20 3d 20 34 30  |[].dev_size = 40|
000013f0  39 36 30 30 0a 70 65 5f  73 74 61 72 74 20 3d 20  |9600.pe_start = |
00001400  32 30 34 38 0a 70 65 5f  63 6f 75 6e 74 20 3d 20  |2048.pe_count = |
00001410  34 39 0a 7d 0a 0a 70 76  32 20 7b 0a 69 64 20 3d  |49.}..pv2 {.id =|
00001420  20 22 38 59 75 66 74 43  2d 71 4a 37 4b 2d 36 4f  | "8YuftC-qJ7K-6O|
00001430  53 6c 2d 79 75 68 67 2d  76 5a 4b 72 2d 70 5a 4b  |Sl-yuhg-vZKr-pZK|
00001440  70 2d 78 37 55 68 66 36  22 0a 64 65 76 69 63 65  |p-x7Uhf6".device|
00001450  20 3d 20 22 2f 64 65 76  2f 76 64 62 33 22 0a 0a  | = "/dev/vdb3"..|
00001460  73 74 61 74 75 73 20 3d  20 5b 22 41 4c 4c 4f 43  |status = ["ALLOC|
00001470  41 54 41 42 4c 45 22 5d  0a 66 6c 61 67 73 20 3d  |ATABLE"].flags =|
00001480  20 5b 5d 0a 64 65 76 5f  73 69 7a 65 20 3d 20 34  | [].dev_size = 4|
00001490  30 39 36 30 30 0a 70 65  5f 73 74 61 72 74 20 3d  |09600.pe_start =|
000014a0  20 32 30 34 38 0a 70 65  5f 63 6f 75 6e 74 20 3d  | 2048.pe_count =|
000014b0  20 34 39 0a 7d 0a 7d 0a  0a 0a 7d 0a 23 20 47 65  | 49.}.}...}.# Ge|
000014c0  6e 65 72 61 74 65 64 20  62 79 20 4c 56 4d 32 20  |nerated by LVM2 |
000014d0  76 65 72 73 69 6f 6e 20  32 2e 30 32 2e 31 38 30  |version 2.02.180|
000014e0  28 32 29 20 28 32 30 31  38 2d 30 37 2d 31 39 29  |(2) (2018-07-19)|
000014f0  3a 20 54 75 65 20 4d 61  72 20 32 39 20 32 30 3a  |: Tue Mar 29 20:|
00001500  35 32 3a 31 35 20 32 30  32 32 0a 0a 63 6f 6e 74  |52:15 2022..cont|
00001510  65 6e 74 73 20 3d 20 22  54 65 78 74 20 46 6f 72  |ents = "Text For|
00001520  6d 61 74 20 56 6f 6c 75  6d 65 20 47 72 6f 75 70  |mat Volume Group|
00001530  22 0a 76 65 72 73 69 6f  6e 20 3d 20 31 0a 0a 64  |".version = 1..d|
00001540  65 73 63 72 69 70 74 69  6f 6e 20 3d 20 22 22 0a  |escription = "".|
00001550  0a 63 72 65 61 74 69 6f  6e 5f 68 6f 73 74 20 3d  |.creation_host =|
00001560  20 22 31 39 32 2e 31 36  38 2e 31 32 32 2e 38 32  | "192.168.122.82|
00001570  22 09 23 20 4c 69 6e 75  78 20 31 39 32 2e 31 36  |".# Linux 192.16|
00001580  38 2e 31 32 32 2e 38 32  20 33 2e 31 30 2e 30 2d  |8.122.82 3.10.0-|
00001590  39 35 37 2e 65 6c 37 2e  78 38 36 5f 36 34 20 23  |957.el7.x86_64 #|
000015a0  31 20 53 4d 50 20 46 72  69 20 4a 61 6e 20 31 31  |1 SMP Fri Jan 11|
000015b0  20 31 37 3a 33 34 3a 35  30 20 43 53 54 20 32 30  | 17:34:50 CST 20|
000015c0  31 39 20 78 38 36 5f 36  34 0a 63 72 65 61 74 69  |19 x86_64.creati|
000015d0  6f 6e 5f 74 69 6d 65 20  3d 20 31 36 34 38 35 35  |on_time = 164855|
000015e0  38 33 33 35 09 23 20 54  75 65 20 4d 61 72 20 32  |8335.# Tue Mar 2|
000015f0  39 20 32 30 3a 35 32 3a  31 35 20 32 30 32 32 0a  |9 20:52:15 2022.|
00001600  0a 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00001610  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00001800  77 61 6e 20 7b 0a 69 64  20 3d 20 22 49 67 43 57  |wan {.id = "IgCW|
00001810  6a 4b 2d 6c 4f 6f 31 2d  35 54 36 57 2d 7a 73 5a  |jK-lOo1-5T6W-zsZ|
00001820  37 2d 52 30 32 45 2d 6f  49 67 67 2d 33 4a 64 66  |7-R02E-oIgg-3Jdf|
00001830  62 33 22 0a 73 65 71 6e  6f 20 3d 20 32 0a 66 6f  |b3".seqno = 2.fo|
00001840  72 6d 61 74 20 3d 20 22  6c 76 6d 32 22 0a 73 74  |rmat = "lvm2".st|
00001850  61 74 75 73 20 3d 20 5b  22 52 45 53 49 5a 45 41  |atus = ["RESIZEA|
00001860  42 4c 45 22 2c 20 22 52  45 41 44 22 2c 20 22 57  |BLE", "READ", "W|
00001870  52 49 54 45 22 5d 0a 66  6c 61 67 73 20 3d 20 5b  |RITE"].flags = [|
00001880  5d 0a 65 78 74 65 6e 74  5f 73 69 7a 65 20 3d 20  |].extent_size = |
00001890  38 31 39 32 0a 6d 61 78  5f 6c 76 20 3d 20 30 0a  |8192.max_lv = 0.|
000018a0  6d 61 78 5f 70 76 20 3d  20 30 0a 6d 65 74 61 64  |max_pv = 0.metad|
000018b0  61 74 61 5f 63 6f 70 69  65 73 20 3d 20 30 0a 0a  |ata_copies = 0..|
000018c0  70 68 79 73 69 63 61 6c  5f 76 6f 6c 75 6d 65 73  |physical_volumes|
000018d0  20 7b 0a 0a 70 76 30 20  7b 0a 69 64 20 3d 20 22  | {..pv0 {.id = "|
000018e0  72 36 58 64 4f 53 2d 36  65 46 55 2d 59 4d 38 30  |r6XdOS-6eFU-YM80|
000018f0  2d 76 4b 73 59 2d 41 49  42 65 2d 54 41 49 71 2d  |-vKsY-AIBe-TAIq-|
00001900  77 36 42 65 33 73 22 0a  64 65 76 69 63 65 20 3d  |w6Be3s".device =|
00001910  20 22 2f 64 65 76 2f 76  64 62 31 22 0a 0a 73 74  | "/dev/vdb1"..st|
00001920  61 74 75 73 20 3d 20 5b  22 41 4c 4c 4f 43 41 54  |atus = ["ALLOCAT|
00001930  41 42 4c 45 22 5d 0a 66  6c 61 67 73 20 3d 20 5b  |ABLE"].flags = [|
00001940  5d 0a 64 65 76 5f 73 69  7a 65 20 3d 20 34 30 39  |].dev_size = 409|
00001950  36 30 30 0a 70 65 5f 73  74 61 72 74 20 3d 20 32  |600.pe_start = 2|
00001960  30 34 38 0a 70 65 5f 63  6f 75 6e 74 20 3d 20 34  |048.pe_count = 4|
00001970  39 0a 7d 0a 0a 70 76 31  20 7b 0a 69 64 20 3d 20  |9.}..pv1 {.id = |
00001980  22 32 36 5a 4f 55 6d 2d  34 6a 76 75 2d 48 4c 4f  |"26ZOUm-4jvu-HLO|
00001990  77 2d 42 47 65 6a 2d 66  72 35 75 2d 79 58 36 34  |w-BGej-fr5u-yX64|
000019a0  2d 30 4c 52 46 32 78 22  0a 64 65 76 69 63 65 20  |-0LRF2x".device |
000019b0  3d 20 22 2f 64 65 76 2f  76 64 62 32 22 0a 0a 73  |= "/dev/vdb2"..s|
000019c0  74 61 74 75 73 20 3d 20  5b 22 41 4c 4c 4f 43 41  |tatus = ["ALLOCA|
000019d0  54 41 42 4c 45 22 5d 0a  66 6c 61 67 73 20 3d 20  |TABLE"].flags = |
000019e0  5b 5d 0a 64 65 76 5f 73  69 7a 65 20 3d 20 34 30  |[].dev_size = 40|
000019f0  39 36 30 30 0a 70 65 5f  73 74 61 72 74 20 3d 20  |9600.pe_start = |
00001a00  32 30 34 38 0a 70 65 5f  63 6f 75 6e 74 20 3d 20  |2048.pe_count = |
00001a10  34 39 0a 7d 0a 0a 70 76  32 20 7b 0a 69 64 20 3d  |49.}..pv2 {.id =|
00001a20  20 22 38 59 75 66 74 43  2d 71 4a 37 4b 2d 36 4f  | "8YuftC-qJ7K-6O|
00001a30  53 6c 2d 79 75 68 67 2d  76 5a 4b 72 2d 70 5a 4b  |Sl-yuhg-vZKr-pZK|
00001a40  70 2d 78 37 55 68 66 36  22 0a 64 65 76 69 63 65  |p-x7Uhf6".device|
00001a50  20 3d 20 22 2f 64 65 76  2f 76 64 62 33 22 0a 0a  | = "/dev/vdb3"..|
00001a60  73 74 61 74 75 73 20 3d  20 5b 22 41 4c 4c 4f 43  |status = ["ALLOC|
00001a70  41 54 41 42 4c 45 22 5d  0a 66 6c 61 67 73 20 3d  |ATABLE"].flags =|
00001a80  20 5b 5d 0a 64 65 76 5f  73 69 7a 65 20 3d 20 34  | [].dev_size = 4|
00001a90  30 39 36 30 30 0a 70 65  5f 73 74 61 72 74 20 3d  |09600.pe_start =|
00001aa0  20 32 30 34 38 0a 70 65  5f 63 6f 75 6e 74 20 3d  | 2048.pe_count =|
00001ab0  20 34 39 0a 7d 0a 7d 0a  0a 6c 6f 67 69 63 61 6c  | 49.}.}..logical|
00001ac0  5f 76 6f 6c 75 6d 65 73  20 7b 0a 0a 6c 76 30 31  |_volumes {..lv01|
00001ad0  20 7b 0a 69 64 20 3d 20  22 6d 33 6b 56 67 33 2d  | {.id = "m3kVg3-|
00001ae0  4e 69 75 74 2d 75 63 7a  36 2d 35 32 37 69 2d 48  |Niut-ucz6-527i-H|
00001af0  30 74 6d 2d 6c 43 55 63  2d 56 66 73 63 69 67 22  |0tm-lCUc-Vfscig"|
00001b00  0a 73 74 61 74 75 73 20  3d 20 5b 22 52 45 41 44  |.status = ["READ|
00001b10  22 2c 20 22 57 52 49 54  45 22 2c 20 22 56 49 53  |", "WRITE", "VIS|
00001b20  49 42 4c 45 22 5d 0a 66  6c 61 67 73 20 3d 20 5b  |IBLE"].flags = [|
00001b30  5d 0a 63 72 65 61 74 69  6f 6e 5f 74 69 6d 65 20  |].creation_time |
00001b40  3d 20 31 36 34 38 35 35  38 34 30 31 0a 63 72 65  |= 1648558401.cre|
00001b50  61 74 69 6f 6e 5f 68 6f  73 74 20 3d 20 22 31 39  |ation_host = "19|
00001b60  32 2e 31 36 38 2e 31 32  32 2e 38 32 22 0a 73 65  |2.168.122.82".se|
00001b70  67 6d 65 6e 74 5f 63 6f  75 6e 74 20 3d 20 32 0a  |gment_count = 2.|
00001b80  0a 73 65 67 6d 65 6e 74  31 20 7b 0a 73 74 61 72  |.segment1 {.star|
00001b90  74 5f 65 78 74 65 6e 74  20 3d 20 30 0a 65 78 74  |t_extent = 0.ext|
00001ba0  65 6e 74 5f 63 6f 75 6e  74 20 3d 20 34 39 0a 0a  |ent_count = 49..|
00001bb0  74 79 70 65 20 3d 20 22  73 74 72 69 70 65 64 22  |type = "striped"|
00001bc0  0a 73 74 72 69 70 65 5f  63 6f 75 6e 74 20 3d 20  |.stripe_count = |
00001bd0  31 0a 0a 73 74 72 69 70  65 73 20 3d 20 5b 0a 22  |1..stripes = [."|
00001be0  70 76 30 22 2c 20 30 0a  5d 0a 7d 0a 73 65 67 6d  |pv0", 0.].}.segm|
00001bf0  65 6e 74 32 20 7b 0a 73  74 61 72 74 5f 65 78 74  |ent2 {.start_ext|
00001c00  65 6e 74 20 3d 20 34 39  0a 65 78 74 65 6e 74 5f  |ent = 49.extent_|
00001c10  63 6f 75 6e 74 20 3d 20  32 36 0a 0a 74 79 70 65  |count = 26..type|
00001c20  20 3d 20 22 73 74 72 69  70 65 64 22 0a 73 74 72  | = "striped".str|
00001c30  69 70 65 5f 63 6f 75 6e  74 20 3d 20 31 0a 0a 73  |ipe_count = 1..s|
00001c40  74 72 69 70 65 73 20 3d  20 5b 0a 22 70 76 31 22  |tripes = [."pv1"|
00001c50  2c 20 30 0a 5d 0a 7d 0a  7d 0a 7d 0a 0a 7d 0a 23  |, 0.].}.}.}..}.#|
00001c60  20 47 65 6e 65 72 61 74  65 64 20 62 79 20 4c 56  | Generated by LV|
00001c70  4d 32 20 76 65 72 73 69  6f 6e 20 32 2e 30 32 2e  |M2 version 2.02.|
00001c80  31 38 30 28 32 29 20 28  32 30 31 38 2d 30 37 2d  |180(2) (2018-07-|
00001c90  31 39 29 3a 20 54 75 65  20 4d 61 72 20 32 39 20  |19): Tue Mar 29 |
00001ca0  32 30 3a 35 33 3a 32 31  20 32 30 32 32 0a 0a 63  |20:53:21 2022..c|
00001cb0  6f 6e 74 65 6e 74 73 20  3d 20 22 54 65 78 74 20  |ontents = "Text |
00001cc0  46 6f 72 6d 61 74 20 56  6f 6c 75 6d 65 20 47 72  |Format Volume Gr|
00001cd0  6f 75 70 22 0a 76 65 72  73 69 6f 6e 20 3d 20 31  |oup".version = 1|
00001ce0  0a 0a 64 65 73 63 72 69  70 74 69 6f 6e 20 3d 20  |..description = |
00001cf0  22 22 0a 0a 63 72 65 61  74 69 6f 6e 5f 68 6f 73  |""..creation_hos|
00001d00  74 20 3d 20 22 31 39 32  2e 31 36 38 2e 31 32 32  |t = "192.168.122|
00001d10  2e 38 32 22 09 23 20 4c  69 6e 75 78 20 31 39 32  |.82".# Linux 192|
00001d20  2e 31 36 38 2e 31 32 32  2e 38 32 20 33 2e 31 30  |.168.122.82 3.10|
00001d30  2e 30 2d 39 35 37 2e 65  6c 37 2e 78 38 36 5f 36  |.0-957.el7.x86_6|
00001d40  34 20 23 31 20 53 4d 50  20 46 72 69 20 4a 61 6e  |4 #1 SMP Fri Jan|
00001d50  20 31 31 20 31 37 3a 33  34 3a 35 30 20 43 53 54  | 11 17:34:50 CST|
00001d60  20 32 30 31 39 20 78 38  36 5f 36 34 0a 63 72 65  | 2019 x86_64.cre|
00001d70  61 74 69 6f 6e 5f 74 69  6d 65 20 3d 20 31 36 34  |ation_time = 164|
00001d80  38 35 35 38 34 30 31 09  23 20 54 75 65 20 4d 61  |8558401.# Tue Ma|
00001d90  72 20 32 39 20 32 30 3a  35 33 3a 32 31 20 32 30  |r 29 20:53:21 20|
00001da0  32 32 0a 0a 00 00 00 00  00 00 00 00 00 00 00 00  |22..............|
00001db0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0c800000

将PV的前2048个sector通过dd拷贝出来,用cat查看如下.

[root@192 ~]# dd if=/dev/vdb1 of=vginfo.txt bs=512 count=2048
记录了2048+0 的读入
记录了2048+0 的写出
1048576字节(1.0 MB)已复制,0.00340714 秒,308 MB/秒
[root@192 ~]# 
[root@192 ~]# 
[root@192 ~]# cat vginfo.txt 
LABELONET~�F LVM2 001r6XdOS6eFUYM80vKsYAIBeTAIqw6Be3s�
                                                      ��Z� LVM2 x[5A%r0N*>����(wan {
id = "IgCWjK-lOo1-5T6W-zsZ7-R02E-oIgg-3Jdfb3"
seqno = 1
format = "lvm2"
status = ["RESIZEABLE", "READ", "WRITE"]
flags = []
extent_size = 8192
max_lv = 0
max_pv = 0
metadata_copies = 0

physical_volumes {

pv0 {
id = "r6XdOS-6eFU-YM80-vKsY-AIBe-TAIq-w6Be3s"
device = "/dev/vdb1"

status = ["ALLOCATABLE"]
flags = []
dev_size = 409600
pe_start = 2048
pe_count = 49
}

pv1 {
id = "26ZOUm-4jvu-HLOw-BGej-fr5u-yX64-0LRF2x"
device = "/dev/vdb2"

status = ["ALLOCATABLE"]
flags = []
dev_size = 409600
pe_start = 2048
pe_count = 49
}

pv2 {
id = "8YuftC-qJ7K-6OSl-yuhg-vZKr-pZKp-x7Uhf6"
device = "/dev/vdb3"

status = ["ALLOCATABLE"]
flags = []
dev_size = 409600
pe_start = 2048
pe_count = 49
}
}


}
# Generated by LVM2 version 2.02.180(2) (2018-07-19): Tue Mar 29 20:52:15 2022

contents = "Text Format Volume Group"
version = 1

description = ""

creation_host = "192.168.122.82"    # Linux 192.168.122.82 3.10.0-957.el7.x86_64 #1 SMP Fri Jan 11 17:34:50 CST 2019 x86_64
creation_time = 1648558335  # Tue Mar 29 20:52:15 2022

wan {
id = "IgCWjK-lOo1-5T6W-zsZ7-R02E-oIgg-3Jdfb3"
seqno = 2
format = "lvm2"
status = ["RESIZEABLE", "READ", "WRITE"]
flags = []
extent_size = 8192
max_lv = 0
max_pv = 0
metadata_copies = 0

physical_volumes {

pv0 {
id = "r6XdOS-6eFU-YM80-vKsY-AIBe-TAIq-w6Be3s"
device = "/dev/vdb1"

status = ["ALLOCATABLE"]
flags = []
dev_size = 409600
pe_start = 2048
pe_count = 49
}

pv1 {
id = "26ZOUm-4jvu-HLOw-BGej-fr5u-yX64-0LRF2x"
device = "/dev/vdb2"

status = ["ALLOCATABLE"]
flags = []
dev_size = 409600
pe_start = 2048
pe_count = 49
}

pv2 {
id = "8YuftC-qJ7K-6OSl-yuhg-vZKr-pZKp-x7Uhf6"
device = "/dev/vdb3"

status = ["ALLOCATABLE"]
flags = []
dev_size = 409600
pe_start = 2048
pe_count = 49
}
}

logical_volumes {

lv01 {
id = "m3kVg3-Niut-ucz6-527i-H0tm-lCUc-Vfscig"
status = ["READ", "WRITE", "VISIBLE"]
flags = []
creation_time = 1648558401
creation_host = "192.168.122.82"
segment_count = 2

segment1 {
start_extent = 0
extent_count = 49

type = "striped"
stripe_count = 1

stripes = [
"pv0", 0
]
}
segment2 {
start_extent = 49
extent_count = 26

type = "striped"
stripe_count = 1

stripes = [
"pv1", 0
]
}
}
}

}
# Generated by LVM2 version 2.02.180(2) (2018-07-19): Tue Mar 29 20:53:21 2022

contents = "Text Format Volume Group"
version = 1

description = ""

creation_host = "192.168.122.82"    # Linux 192.168.122.82 3.10.0-957.el7.x86_64 #1 SMP Fri Jan 11 17:34:50 CST 2019 x86_64
creation_time = 1648558401  # Tue Mar 29 20:53:21 2022

4. LVM基本使用方法

4.1 LV创建

假设我们有一块磁盘 /dev/sdb1 作为应用数据盘使用,以此为例创建lvm分区

先创建物理卷PV,命令: pvcreate /dev/sdb1

创建卷组VG,卷组命名为kylin,命令:vgcreate kylin /dev/sdb1

在VG中创建逻辑分区LV,命令:lvcreate -L 30G -n test kylin

创建逻辑分区后,进行格式化,然后便可以挂载使用.

mkfs.ext4 /dev/kylin/test

mount /dev/kylin/test /data

4.2 LV扩容

假设我们在上述基础上,又获得一块磁盘/dev/sdc1进行扩容,将磁盘容量增加到LV分区/dev/kylin/test中,具体操作如下.

先创建物理卷PV,命令: pvcreate /dev/sdc1

将/dev/sdc1添加进VG kylin,命令:vgextend kylin /dev/sdc1

增加LV分区容量,命令:lvextend -L +30G /dev/kylin/test

5. LVM修复

lvm卷组配置备份
lvm的配置信息默认在/etc/lvm/backup、/etc/lvm/archive/两个目录存在备份,当lvm元数据损坏,lvm卷组读取异常时,可通过备份文件进行恢复.
/etc/lvm/backup: 保留了当前配置的备份
/etc/lvm/archive/:保留了每次配置更新前的备份

[root@localhost ~]# ll /etc/lvm/backup/
总用量 8
-rw------- 1 root root 1701 Mar 28 17:05 nlas
-rw------- 1 root root 1923 Mar 29 20:53 wan
[root@localhost ~]# 
[root@localhost ~]# ll /etc/lvm/archive/
总用量 12
-rw------- 1 root root 2963 Mar 29 14:56 wan_00000-1002723500.vg
-rw------- 1 root root 1347 Mar 29 20:52 wan_00001-2075374212.vg
-rw------- 1 root root 1333 Mar 29 20:53 wan_00002-640979874.vg

实例演示
逻辑卷/dev/wan/lv01

[root@localhost archive]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   30G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   29G  0 part 
  ├─nlas-root 253:0    0   26G  0 lvm  /
  └─nlas-swap 253:1    0    3G  0 lvm  [SWAP]
vdb           252:16   0    1G  0 disk 
├─vdb1        252:17   0  200M  0 part 
│ └─wan-lv01  253:2    0  300M  0 lvm  
├─vdb2        252:18   0  200M  0 part 
│ └─wan-lv01  253:2    0  300M  0 lvm  
├─vdb3        252:19   0  200M  0 part 
└─vdb4        252:20   0  423M  0 part 

在/dev/wan/lv01上创建文件系统

[root@localhost archive]# mkfs.ext4 /dev/wan/lv01 
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
76912 inodes, 307200 blocks
15360 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33947648
38 block groups
8192 blocks per group, 8192 fragments per group
2024 inodes per group
Superblock backups stored on blocks: 
    8193, 24577, 40961, 57345, 73729, 204801, 221185

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

挂载并创建文件

[root@localhost archive]# mount /dev/wan/lv01 /mnt/
[root@localhost archive]# cd /mnt/
[root@localhost mnt]# touch test01 test02
[root@localhost mnt]# echo 1111 >> test01
[root@localhost mnt]# echo 1111 >> test02

覆盖/dev/vdb1、/dev/vdb2的lvm元数据,并重启系统,vg已不能识别

dd if=/dev/zero of=/dev/vdb1 bs=512 seek=8 count=100
dd if=/dev/zero of=/dev/vdb2 bs=512 seek=8 count=100

[root@localhost ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   30G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   29G  0 part 
  ├─nlas-root 253:0    0   26G  0 lvm  /
  └─nlas-swap 253:1    0    3G  0 lvm  [SWAP]
vdb           252:16   0    1G  0 disk 
├─vdb1        252:17   0  200M  0 part 
├─vdb2        252:18   0  200M  0 part 
├─vdb3        252:19   0  200M  0 part 
└─vdb4        252:20   0  423M  0 part 
[root@localhost ~]# pvscan 
  WARNING: Device for PV r6XdOS-6eFU-YM80-vKsY-AIBe-TAIq-w6Be3s not found or rejected by a filter.
  WARNING: Device for PV 26ZOUm-4jvu-HLOw-BGej-fr5u-yX64-0LRF2x not found or rejected by a filter.
  Couldn't find device with uuid r6XdOS-6eFU-YM80-vKsY-AIBe-TAIq-w6Be3s.
  Couldn't find device with uuid 26ZOUm-4jvu-HLOw-BGej-fr5u-yX64-0LRF2x.
  PV [unknown]   VG wan             lvm2 [196.00 MiB / 0    free]
  PV [unknown]   VG wan             lvm2 [196.00 MiB / 92.00 MiB free]
  PV /dev/vdb3   VG wan             lvm2 [196.00 MiB / 196.00 MiB free]
  PV /dev/vda2   VG nlas            lvm2 [<29.00 GiB / 0    free]
  Total: 4 [29.57 GiB] / in use: 4 [29.57 GiB] / in no VG: 0 [0   ]

通过pvcreate命令修复pv header 和metadata数据.

[root@localhost ~]# pvcreate  /dev/vdb1 -f -u r6XdOS6eFUYM80vKsYAIBeTAIqw6Be3s --restorefile /etc/lvm/backup/wan
  Couldn't find device with uuid r6XdOS-6eFU-YM80-vKsY-AIBe-TAIq-w6Be3s.
  Couldn't find device with uuid 26ZOUm-4jvu-HLOw-BGej-fr5u-yX64-0LRF2x.
  WARNING: Device for PV r6XdOS-6eFU-YM80-vKsY-AIBe-TAIq-w6Be3s not found or rejected by a filter.
  WARNING: Device for PV 26ZOUm-4jvu-HLOw-BGej-fr5u-yX64-0LRF2x not found or rejected by a filter.
  Physical volume "/dev/vdb1" successfully created.

[root@localhost ~]# pvcreate  /dev/vdb2 -f -u 26ZOUm-4jvu-HLOw-BGej-fr5u-yX64-0LRF2x --restorefile /etc/lvm/backup/wan
  Couldn't find device with uuid 26ZOUm-4jvu-HLOw-BGej-fr5u-yX64-0LRF2x.
  WARNING: Device for PV 26ZOUm-4jvu-HLOw-BGej-fr5u-yX64-0LRF2x not found or rejected by a filter.
  Physical volume "/dev/vdb2" successfully created.

激活逻辑卷

[root@localhost ~]# vgscan 
  Reading volume groups from cache.
  Found volume group "wan" using metadata type lvm2
  Found volume group "nlas" using metadata type lvm2
[root@localhost ~]# lsblk 
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   30G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   29G  0 part 
  ├─nlas-root 253:0    0   26G  0 lvm  /
  └─nlas-swap 253:1    0    3G  0 lvm  [SWAP]
vdb           252:16   0    1G  0 disk 
├─vdb1        252:17   0  200M  0 part 
├─vdb2        252:18   0  200M  0 part 
├─vdb3        252:19   0  200M  0 part 
└─vdb4        252:20   0  423M  0 part 
[root@localhost ~]# vgchange -ay
  1 logical volume(s) in volume group "wan" now active
  2 logical volume(s) in volume group "nlas" now active
[root@localhost ~]# lsblk 
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   30G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   29G  0 part 
  ├─nlas-root 253:0    0   26G  0 lvm  /
  └─nlas-swap 253:1    0    3G  0 lvm  [SWAP]
vdb           252:16   0    1G  0 disk 
├─vdb1        252:17   0  200M  0 part 
│ └─wan-lv01  253:2    0  300M  0 lvm  
├─vdb2        252:18   0  200M  0 part 
│ └─wan-lv01  253:2    0  300M  0 lvm  
├─vdb3        252:19   0  200M  0 part 
└─vdb4        252:20   0  423M  0 part 

挂载/dev/wan/lv01成功,说明成功修复

[root@localhost ~]# mount /dev/wan/lv01 /mnt/
[root@localhost ~]# ll /mnt/
总用量 14
drwx------ 2 root root 12288 Mar 30 11:23 lost+found
-rw-r--r-- 1 root root     5 Mar 30 11:30 test01
-rw-r--r-- 1 root root     5 Mar 30 11:30 test02
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容