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的映射关系
如上是从物理磁盘到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