共计 7786 个字符,预计需要花费 20 分钟才能阅读完成。
一、LVM 是什么
LVM 是 Logical Volume Manager(逻辑卷管理)的简写,它是 Linux 环境下对磁盘分区进⾏管理的⼀种机制。
安装 Linux 操作系统时遇到的⼀个常⻅的难以决定的问题就是如何正确地评估各分区⼤⼩,以分配合适的硬盘空间; 普通的磁盘分区管理⽅式在逻辑分区划分好之后就⽆法改变其⼤⼩; 随着 Linux 的逻辑卷管理功能的出现,这些问题都迎刃⽽解,⽤户在⽆需停机的情况下可以⽅便地调整各个分区⼤⼩,即动态调整磁盘容量,从⽽提⾼磁盘管理的灵活性。
相关概念:s
- PV(Physical Volume):物理卷
处于 LVM 最底层,可以是物理硬盘或者分区,整个硬盘,或使⽤fdisk 等⼯具建⽴的普通分区,包括许多默认 4MB ⼤⼩的 PE(Physical Extent,基本单元)。
- PE(Physical Extend):物理区域
PV 中可以⽤于分配的最⼩存储单元,可以在创建 PV 的时候制定(默认为 4MB),如 1M, 2M, 4M, 8M, 32M, 64M… 组成同⼀VG 中所有 PV 的 PE⼤⼩应该相同。
- VG(Volume Group):卷组
建⽴在 PV 之上,可以含有⼀个到多个 PV,⼀个或多个物理卷组合⽽成的整体。
- LV(Logical Volume):逻辑卷
建⽴在 VG 之上,相当于原来分区的概念,不过⼤⼩可以动态改变。从卷组中分割出的⼀块空间,⽤于建⽴⽂件
系统。
PV(PE)-->VG-->(PE*n)LV-->⽬录挂载
二、基础命令
序号 | 功能 | PV 物理卷命令 | VG 卷组命令 | LV 逻辑卷命令 |
---|---|---|---|---|
01 | 扫描功能 | pvscan | vgscan | lvscan |
02 | 建⽴功能 | pvcreate | vgcreate | lvcreate |
03 | 查询功能 | pvdisplay | vgdisplay | lvdisplay |
04 | 删除功能 | pvremove | vgremove | lvremove |
05 | 扩容功能 | vgextend | lvextend | |
06 | 缩容功能 | vgreduce | lvreduce |
需要先使用 fdisk 命令进行一个分区设置。
演示这里使用的是两块磁盘 /dev/sdb 和 /dev/sdc 各设置一个分区。
1、pv 相关命令
- 创建pv
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc1
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdc1" successfully created.
pvcreate 的作用就是将磁盘打散成一块块同样大小的 PE。
- 查询pv
# 简单查看
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <31.00g 4.00m
/dev/sdb1 lvm2 --- <2.00g <2.00g
/dev/sdc1 lvm2 --- <2.00g <2.00g
# 详细查看
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <31.00 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 7935
Free PE 1
Allocated PE 7934
PV UUID EXKt0P-ICEf-iwsx-zZAI-I3G1-JZNX-DdXKxl
"/dev/sdb1" is a new physical volume of "<2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size <2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID cLIVA5-V3Rg-YOen-TIlu-AanQ-BlRP-92y7Uw
"/dev/sdc1" is a new physical volume of "<2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc1
VG Name
PV Size <2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID aKMxlM-XGO1-JnlM-cPS0-8xH6-oyml-AXwUSR
/dev/sda2
是系统本身就存在的 pv。/dev/sdb1
和 /dev/sdc1
都是设置的 2g 大小的硬盘,这里提示小于 2g 是因为存自身数据占用了一部分,大概 4M。
- 扫描pv
[root@localhost ~]# pvscan
PV /dev/sda2 VG centos lvm2 [<31.00 GiB / 4.00 MiB free]
PV /dev/sdb1 lvm2 [<2.00 GiB]
PV /dev/sdc1 lvm2 [<2.00 GiB]
Total: 3 [34.99 GiB] / in use: 1 [<31.00 GiB] / in no VG: 2 [<4.00 GiB]
- 删除pv
[root@localhost ~]# pvremove /dev/sdb1 /dev/sdc1
Labels on physical volume "/dev/sdb1" successfully wiped.
Labels on physical volume "/dev/sdc1" successfully wiped.
2、vg 相关命令
- 创建vg
为了演示扩容,先用一个 pv 来创建 vg。
[root@localhost ~]# vgcreate vg1 /dev/sdb1
Volume group "vg1" successfully created
- 查询vg
# 简单查询
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <31.00g 4.00m
vg1 1 0 0 wz--n- <2.00g <2.00g
# 详细查询
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name vg1
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 <2.00 GiB
PE Size 4.00 MiB
Total PE 511
Alloc PE / Size 0 / 0
Free PE / Size 511 / <2.00 GiB
VG UUID BOlSmN-nujL-ydgL-LPlP-qLgs-WcDK-VCrf0p
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <31.00 GiB
PE Size 4.00 MiB
Total PE 7935
Alloc PE / Size 7934 / 30.99 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID K2WSC3-MlER-hHUD-t2rZ-SDLE-bJnM-Xq8Wdd
- 删除vg
vg 在没用使用的情况下可以直接删除。
[root@localhost ~]# vgremove vg1
Volume group "vg1" successfully removed
如果使用 vg 创建了 lv,同时删除 lv。
[root@localhost ~]# vgremove vg1
Do you really want to remove volume group "vg1" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume vg1/lvol0? [y/n]: y
Logical volume "lvol0" successfully removed
Volume group "vg1" successfully removed
3、lv 相关命令
- 创建lv
# 1、使用 -l 参数,使用vg1空闲100%创建一个新的lv
[root@localhost ~]# lvcreate -l +100%FREE /dev/vg1
Logical volume "lvol0" created.
# 2、通过 vgdisplay 命令查询到空闲空间大小,PE大小 * 剩余PE数量
[root@localhost ~]# lvcreate -L +2024M /dev/vg1
Logical volume "lvol0" created.
这里直接创建一个新的lv,占用100%的vg,如果想需要再增加空间必须扩展vg的大小。
挂载前需要进行格式化
[root@localhost ~]# mkfs.ext4 /dev/vg1/lvol0
挂载
[root@localhost ~]# mount /dev/vg1/lvol0 /mnt/
- 查询 lv
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 28.99g
swap centos -wi-ao---- 2.00g
lvol0 vg1 -wi-a----- <2.00g
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID Ca5lMo-NfBk-Ag1C-nKmM-ekFz-1B00-Okm5FC
LV Write Access read/write
LV Creation host, time localhost, 2022-09-07 17:13:31 +0800
LV Status available
# open 2
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID G2S2Aw-a22b-fQMc-uj2O-2D0h-VRvn-uUcFA5
LV Write Access read/write
LV Creation host, time localhost, 2022-09-07 17:13:31 +0800
LV Status available
# open 1
LV Size 28.99 GiB
Current LE 7422
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
--- Logical volume ---
LV Path /dev/vg1/lvol0
LV Name lvol0
VG Name vg1
LV UUID 4GiMpd-hVhJ-wHbS-nsVa-ORKT-qq7n-bAlCOg
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2022-11-07 11:14:10 +0800
LV Status available
# open 0
LV Size <2.00 GiB
Current LE 511
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
- 扫描lv
[root@localhost ~]# lvscan
ACTIVE '/dev/centos/swap' [2.00 GiB] inherit
ACTIVE '/dev/centos/root' [28.99 GiB] inherit
ACTIVE '/dev/vg1/lvol0' [<2.00 GiB] inherit
- 删除lv
# 没有进行挂载可以直接删除
[root@localhost ~]# lvremove /dev/vg1/lvol0
Do you really want to remove active logical volume vg1/lvol0? [y/n]: y
Logical volume "lvol0" successfully removed
# 已经挂载的,需要先 umount
[root@localhost ~]# lvremove /dev/vg1/lvol0
Logical volume vg1/lvol0 contains a filesystem in use.
[root@localhost ~]# umount /dev/vg1/lvol0
[root@localhost ~]# lvremove /dev/vg1/lvol0
Do you really want to remove active logical volume vg1/lvol0? [y/n]: y
Logical volume "lvol0" successfully removed
三、扩容
前面都是最基础的创建、删除、查看等操作,接下来看看扩容怎么操作。
之前创建 lv 使用了 vg1 的全部空间,可以使用 vgdisplay
命令查看。
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <31.00 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 7935
Free PE 1
Allocated PE 7934
PV UUID EXKt0P-ICEf-iwsx-zZAI-I3G1-JZNX-DdXKxl
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg1
PV Size <2.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 511
Free PE 0
Allocated PE 511
PV UUID 5QwCbX-mNJb-Gfe3-hQju-sTiR-TP1t-i1EofG
"/dev/sdc1" is a new physical volume of "<2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc1
VG Name
PV Size <2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID qFAJ34-6Ef7-0PEw-letM-4Asq-sp0j-sKNuFn
可以看见 vg1 没有空闲的 PE。
此时如果直接对 lv 进行扩容,则会出现如下提示:
[root@localhost ~]# lvextend -L +2000M /dev/vg1/lvol0
Insufficient free space: 500 extents needed, but only 0 available
提示扩容需要 500 数量的 PE,但是0个可用。(1个PE大小为4M)
如果 vg 的空间大小足够,则不需要扩容 vg,直接使用 resize2fs
。
- 扩容 vg
[root@localhost ~]# vgextend vg1 /dev/sdc1
Volume group "vg1" successfully extended
- 扩容 lv
[root@localhost ~]# lvextend -L +2000M /dev/vg1/lvol0
Size of logical volume vg1/lvol0 changed from <2.00 GiB (511 extents) to <3.95 GiB (1011 extents).
Logical volume vg1/lvol0 successfully resized.
查看磁盘空间。
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 908M 0 908M 0% /dev
tmpfs 919M 0 919M 0% /dev/shm
tmpfs 919M 8.6M 911M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
/dev/mapper/centos-root 29G 1.5G 28G 6% /
/dev/sda1 1014M 189M 826M 19% /boot
tmpfs 184M 0 184M 0% /run/user/0
/dev/mapper/vg1-lvol0 2.0G 6.0M 1.9G 1% /mnt
发现 /dev/mapper/vg1-lvol0
的空间还是2g。
此时不能使用 mkfs.ext4
命令,否则原来的文件会丢失。
- resize2fs
[root@localhost ~]# resize2fs /dev/vg1/lvol0
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg1/lvol0 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg1/lvol0 is now 1035264 blocks long.
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 908M 0 908M 0% /dev
tmpfs 919M 0 919M 0% /dev/shm
tmpfs 919M 8.6M 911M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
/dev/mapper/centos-root 29G 1.5G 28G 6% /
/dev/sda1 1014M 189M 826M 19% /boot
tmpfs 184M 0 184M 0% /run/user/0
/dev/mapper/vg1-lvol0 3.9G 8.0M 3.7G 1% /mnt
注意:
如果是 xfs 文件系统,需要使用 xfs_growfs
[root@localhost /]# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=1900032 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=7600128, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=3711, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 7600128 to 8124416
提醒:本文发布于757天前,文中所关联的信息可能已发生改变,请知悉!