一.前言
Linux系统在使用的过程中,数据只会越来越多。如果在硬盘的标准分区创建了文件系统,那么向已有的文件系统增添额外的存储空间是一件头疼的事情。我们只能在同一块物理硬盘上的可用空间范围内调整分区大小。此外硬盘没有存储空间了,就需要找一块更大的硬盘,手动将之前的文件系统转移到新的硬盘上。
那这边就有了逻辑卷管理器(LVM)的概念,他可以通过将另一块硬盘上的分区加入已有的文件系统来动态的添加存储空间。无须让我们重建整个文件系统的情况,轻松的关联磁盘空间。
二.LVM布局
LVM有三个主要部分组成
首次设置逻辑卷的步骤如下
1.创建物理卷
2.创建卷组
3.创建逻辑卷
4.格式化逻辑卷
5.挂载逻辑卷
三.步骤实操
1.创建pv
在指定作为pv的存储设备之前,先确保分区且为未使用。可以使用pvcreate创建pv分区
新增一块硬盘,需要重启服务器,就能看到未挂载的新硬盘。(可以是物理硬盘或者分区,整个硬盘,或使用fdisk 等⼯具建⽴的普通分区)
[root@zhangke ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 4G 0 part [SWAP]
└─sda3 8:3 0 25G 0 part /
sdb 8:16 0 10G 0 disk
sr0 11:0 1 55.9M 0 rom /run/media/root/VMware Tools
[root@zhangke ~]# fdisk -l
磁盘 /dev/sda:32.2 GB, 32212254720 字节,62914560 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0009853d
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 10487807 4194304 82 Linux swap / Solaris
/dev/sda3 10487808 62914559 26213376 83 Linux
磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[root@zhangke ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
最好多设置几个PV.LVM的关键在于将额外的存储空间动态添加到LV。设置好PV后,就可以创建VG了
pvcreate /dev/sdb /dev/sdc
2.创建VG
只要是PV 就可以加入VG。可以用vgcreate创建VG
[root@zhangke ~]# vgcreate vg00 /dev/sdb
Volume group "vg00" successfully created
[root@zhangke ~]# vgdisplay
--- Volume group ---
VG Name vg00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
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 <10.00 GiB
PE Size 4.00 MiB
Total PE 2559
Alloc PE / Size 0 / 0
Free PE / Size 2559 / <10.00 GiB
VG UUID 6LEarm-eCfQ-kpfH-hAIu-SCA8-RZqO-5Hcmlv
[root@zhangke ~]# vgcreate vg00 /dev/sdb
Volume group "vg00" successfully created
[root@zhangke ~]# vgdisplay
--- Volume group ---
VG Name vg00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
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 <10.00 GiB
PE Size 4.00 MiB
Total PE 2559
Alloc PE / Size 0 / 0
Free PE / Size 2559 / <10.00 GiB
VG UUID 6LEarm-eCfQ-kpfH-hAIu-SCA8-RZqO-5Hcmlv
vgdisplay命令 用于显示LVM卷组的信息,可以先确认下,怕VG命名重复
3.创建LV
可以使用lvcreate命令创建LV
[root@zhangke ~]# lvcreate -L 5G -v vg00
Archiving volume group "vg00" metadata (seqno 1).
Creating logical volume lvol0
Creating volume group backup "/etc/lvm/backup/vg00" (seqno 2).
Activating logical volume vg00/lvol0.
activation/volume_list configuration setting not defined: Checking only host tags for vg00/lvol0.
Creating vg00-lvol0
Loading table for vg00-lvol0 (253:0).
Resuming vg00-lvol0 (253:0).
Wiping known signatures on logical volume "vg00/lvol0"
Initializing 4.00 KiB of logical volume "vg00/lvol0" with value 0.
Logical volume "lvol0" created.
[root@zhangke ~]# lvdisplay /dev/vg00/lvol0
--- Logical volume ---
LV Path /dev/vg00/lvol0
LV Name lvol0
VG Name vg00
LV UUID BMlyB7-e2zp-UNwd-hEGn-QDfA-DHXl-NVurBT
LV Write Access read/write
LV Creation host, time zhangke, 2024-03-23 11:28:02 +0800
LV Status available
# open 0
LV Size 5.00 GiB
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
注意:如果出于某种原因,VG没有足够的存储空间来满足LV要求的大小,那么lvcreate将无法创建LV。
创建LV之后,可以使用lvdisplay显示相关信息。命令中的完整路径名用于指定LV,除了这个,也可以使用lvs和lvscan命令显示系统LV的信息。
4.使用LVM
LVM格式化
[root@zhangke ~]# mkfs.ext4 /dev/vg
vg00/ vga_arbiter
[root@zhangke ~]# mkfs.ext4 /dev/vg00/lvol0
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
挂载LVM
[root@zhangke ~]# mkdir my_lvm
[root@zhangke ~]# mount -t ext4 /dev/vg00/lvol0 my_lvm
[root@zhangke ~]# ls my_lvm/
lost+found
[root@zhangke ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 4G 0 part [SWAP]
└─sda3 8:3 0 25G 0 part /
sdb 8:16 0 10G 0 disk
└─vg00-lvol0 253:0 0 5G 0 lvm /root/my_lvm
sr0 11:0 1 55.9M 0 rom /run/media/root/VMware Tools
[root@zhangke ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 3babadfa-dd46-43ff-a002-39f6d237c675 /boot
├─sda2 swap c265afc6-a0e2-4f62-b8b0-c9356e7aab0d [SWAP]
└─sda3 xfs c4bfb099-33fa-479e-9b9a-fcb3b01aee51 /
sdb LVM2_member oMzo1G-EFrl-bj2F-cFBv-JMDq-0v1E-dPNnfF
└─vg00-lvol0 ext4 5cdbfdc2-aefe-478a-8321-fcc95f6b52b2 /root/my_lvm
sr0 iso9660 VMware Tools 2020-07-17-17-46-47-00 /run/media/root/VMware Tools
如果相应在系统上重启时,自动挂载新的LV,就需要再/etc/fstab上添加记录
5.扩大或收缩VG和LV
vgextend | 将PV加入VG |
vgreduce | 从VG删除PV |
lvextend | 扩大LV |
lvreduce | 收缩LV |
举个例子,扩大LV
[root@zhangke ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 4G 0 part [SWAP]
└─sda3 8:3 0 25G 0 part /
sdb 8:16 0 10G 0 disk
└─vg00-lvol0 253:0 0 5G 0 lvm /root/my_lvm
sr0 11:0 1 55.9M 0 rom /run/media/root/VMware Tools
我们可以看到sdb 这块硬盘总共10g,lv是5g。可以扩容5g
[root@zhangke ~]# lvextend -L +4G /dev/vg00/lvol0
Size of logical volume vg00/lvol0 changed from 5.00 GiB (1280 extents) to 9.00 GiB (2304 extents).
Logical volume vg00/lvol0 successfully resized.
[root@zhangke ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 4G 0 part [SWAP]
└─sda3 8:3 0 25G 0 part /
sdb 8:16 0 10G 0 disk
└─vg00-lvol0 253:0 0 9G 0 lvm /root/my_lvm
sr0 11:0 1 55.9M 0 rom /run/media/root/VMware Tools
[root@zhangke ~]#