Linux-lvm

名词解释

  • 物理卷(PV):物理卷是 LVM 管理的最底层单元,可以是整个磁盘,也可以是某个分区。初始化 PV 时,LVM 会在设备上写入元数据,以便后续跟踪和管理

  • 卷组(VG):卷组是将多个 PV 聚合成一个逻辑存储池的结构。VG 的总容量等于所有 PV 容量之和,后续可在此池内划分逻辑卷

  • 逻辑卷(LV):逻辑卷是最终呈现给操作系统和应用程序的“分区”单元。在 VG 中可以创建多个 LV,并可按需动态调整大小

创建步骤

磁盘分区

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
[root@192-168-10-206 ~]# fdisk -l
Disk /dev/vdb: 100 GiB, 107374182400 bytes, 209715200 sectors #找到需要分区的磁盘
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@192-168-10-206 ~]# fdisk /dev/vdb #分区的磁盘
Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xf274d173.
Command (m for help): n #新建
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p #主分区p
Partition number (1-4, default 1): 1 #分区号默认
First sector (2048-209715199, default 2048): #默认
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-209715199, default 209715199): #默认
Created a new partition 1 of type 'Linux' and of size 100 GiB.
Command (m for help): t #改变toggle类型
Selected partition 1
Hex code or alias (type L to list all): 8e # LVM 的分区代码8e
Changed type of partition 'Linux' to 'Linux LVM'.
Command (m for help): w #写入保存
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[root@192-168-10-206 ~]# fdisk -l #查看分区成功后的信息
Disk /dev/vdb: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xf274d173
Device Boot Start End Sectors Size Id Type
/dev/vdb1 2048 209715199 209713152 100G 8e Linux LVM

创建物理卷(PV)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@192-168-10-206 ~]# pvcreate /dev/vdb1 #对vdb1进行物理卷创建
Physical volume "/dev/vdb1" successfully created.
[root@192-168-10-206 ~]# pvs #查看所有pv
PV VG Fmt Attr PSize PFree
/dev/vda3 cs_localhost-live lvm2 a-- 48.41g 0 #这是系统盘的
/dev/vdb1 lvm2 --- <100.00g <100.00g #这是创建的
[root@192-168-10-206 ~]# pvdisplay /dev/vdb1 #查看pv详情
"/dev/vdb1" is a new physical volume of "<100.00 GiB"
--- NEW Physical volume ---
PV Name /dev/vdb1
VG Name
PV Size <100.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID RPEJye-2Ifc-4T45-g9wU-Rdii-wMwb-q3dZON

创建卷组(VG)

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
[root@192-168-10-206 ~]# vgcreate vg_data /dev/vdb1 #创建vg,vg_data名字自定义,在/dev/vdb1上创建
Volume group "vg_data" successfully created
[root@192-168-10-206 ~]# vgs #查看所有vg
VG #PV #LV #SN Attr VSize VFree
cs_localhost-live 1 2 0 wz--n- 48.41g 0
vg_data 1 0 0 wz--n- <100.00g <100.00g
[root@192-168-10-206 ~]# pvs #查看所有pv
PV VG Fmt Attr PSize PFree
/dev/vda3 cs_localhost-live lvm2 a-- 48.41g 0
/dev/vdb1 vg_data lvm2 a-- <100.00g <100.00g #这里已经绑定vg了
[root@192-168-10-206 ~]# vgdisplay vg_data #显示vg详情
--- Volume group ---
VG Name vg_data
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <100.00 GiB
PE Size 4.00 MiB
Total PE 25599
Alloc PE / Size 0 / 0
Free PE / Size 25599 / <100.00 GiB
VG UUID jp9G9F-WLig-GXUy-wytn-ahcC-3Q1F-72Utl1

逻辑卷管理(LV)

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
# 创建:lvcreate -L <大小> -n <逻辑卷名> <卷组名>
[root@192-168-10-206 ~]# lvcreate -L 10G -n lv_test vg_data
[root@192-168-10-206 ~]# lvs #查看
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_test vg_data -wi-a----- 10.00g
# 格式化:mkfs.ext4 /dev/<卷组名>/<逻辑卷名>
[root@192-168-10-206 ~]# mkfs.ext4 /dev/vg_data/lv_test
# 临时挂载:mount /dev/<卷组名>/<逻辑卷名> /<挂载目录>
[root@192-168-10-206 ~]# mkdir /mnt/test
[root@192-168-10-206 ~]# mount /dev/vg_data/lv_test /mnt/test
[root@192-168-10-206 ~]# cd /mnt/test/
[root@192-168-10-206 ~]# touch /mnt/test/aa.test
[root@192-168-10-206 ~]# ls /mnt/test/aa.test
/mnt/test/aa.test
# 永久挂载:解决重启失效的问题
[root@192-168-10-206 ~]# UUID=$(blkid -s UUID -o value /dev/vg_data/lv_test) && echo "UUID=$UUID /mnt/test ext4 defaults 0 0" | sudo tee -a /etc/fstab && sudo mount -a
# 扩容:lvextend -L +<扩容大小> -r /dev/<卷组名>/<逻辑卷名>
# 说明:-r 参数就是自动调用 resize2fs 的意思
[root@192-168-10-206 ~]# lvextend -L +1G -r /dev/vg_data/lv_test
Size of logical volume vg_data/lv_test changed from 10.00 GiB (2560 extents) to 11.00 GiB (2816 extents).
File system ext4 found on vg_data/lv_test mounted at /mnt/test.
Extending file system ext4 to 11.00 GiB (11811160064 bytes) on vg_data/lv_test...
resize2fs /dev/vg_data/lv_test
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/vg_data/lv_test is mounted on /mnt/test; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/vg_data/lv_test is now 2883584 (4k) blocks long.

resize2fs done
Extended file system ext4 on vg_data/lv_test.
Logical volume vg_data/lv_test successfully resized.
# (上一步加了-r参数,这一步就不需要执行了)扩展 ext 文件系统,怎加实际大小,df -h可以查看
[root@192-168-10-206 ~]# resize2fs /dev/vg_data/lv_test
resize2fs 1.46.5 (30-Dec-2021)
The filesystem is already 2883584 (4k) blocks long. Nothing to do!
[root@192-168-10-206 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_test vg_gh_db -wi-ao---- 11.00g
[root@192-168-10-206 ~]# df -h
/dev/mapper/vg_gh_db-lv_test 11G 24K 11G 1% /mnt/test
# 缩容:不支持在线缩容
umount /mnt/test # 1.先卸载挂载文件系统
e2fsck -f /dev/vg_data/lv_test # 2.先检查文件系统完整性
resize2fs /dev/vg_data/lv_test 1G # 3.缩小文件系统大小 (不支持在线)
lvreduce -L 15G /dev/vg_data/lv_test # 4.缩小逻辑卷大小 (支持在线)
e2fsck -f /dev/vg_data/lv_test # 5.再次检查文件系统完整性
mount /mnt/test # 6.重新挂载

格式化并挂载