目录
文件LVM是逻辑卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分析进行管理的一种机制。LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。在传统的磁盘管理机制中,上层应用是直接访问文件系统来对底层的物理硬盘进行读写。而在LVM中,它会将底层的硬盘进行封装,当我们通过软件去对底层的物理磁盘进行操作时,它不再是直接对分区进行操作,而是通过逻辑卷对底层的物理硬盘进行操作。LVM最大的特点就是可以对磁盘进行动态管理,因为逻辑卷的大小是可以动态调整的,而且不会丢失数据。逻辑卷的技术大大提高了磁盘管理的逻辑性。
1. LVM的基本概念
LVM中的概念有物理卷、卷组、逻辑卷、物理区块和逻辑区块等,其含义如下:
- 物理卷(Physical Volume, PV):物理卷是指硬盘/硬盘分区或者从逻辑上与硬盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但是与基本的物理存储介质(如硬盘、分区等)比较却包含有与LVM相关的管理参数。
- 卷组(Volume Group, VG):卷组是由一个或多个物理卷组成的一个整体,在卷组中可以动态地添加或移除物理卷,卷组名称由用户自行定义。
- 逻辑卷(Logical Volume,LV):逻辑卷是建立在卷组之上的,与物理卷无直接关系,对于逻辑卷来说,每一个卷组就是一个整体,从这个整体中切出一小块空间,作为用户创建文件系统基础,这一小块空间就称为逻辑卷。
- 物理区块(Physical Extent, PE):每一个物理卷被划分为称为PE的基本单位,具有唯一编号的PE是可以被LVM寻址的最小单元,PE大小可配置,默认4MB。
- 逻辑区块(Logical Extend,LE):逻辑卷也被划为为称为LE的可寻址的基本单元,在同一卷组中,LE的大小和PE是相同的,并且一一对应。
图1描述了存储介质、物理卷、卷组、逻辑卷和文件系统之间的关系。

图1. 存储介质、物理卷、卷组、逻辑卷和文件系统之间的关系
2. Linux下创建和管理LVM
在Ubuntu、Debian 和 Linux Mint 上安装 LVM的命令:
sudo apt install lvm2
在 CentOS、Fedora、AlmaLinux 和 Red Hat 上安装 LVM的命令:
sudo dnf install lvms
LVM中的主要管理命令如表1所示。
| 功能 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
| 扫描(scan) | pvscan | vgscan | lvscan |
| 建立(create) | pvcreate | vgcreate | lvcreate |
| 显示(display) | pvdisplay | vgdisplay | lvdisplay |
| 删除(remove) | pvremove | vgremove | lvremove |
| 缩减(reduce) | vgreduce | lvreduce | |
| 扩展(extend) | vgextend | lvextend |
3. 环境准备
准备4块硬盘:/dev/sdb、/dev/sdc、/dev/sdd和/dev/sde,每个硬盘的容量为10G。将硬盘/dev/sdc划分两个分区:/dev/sdc1和/dev/sdc2,其中,/dev/sdc的容量为2G,/dev/sdc2的容量为8G;将硬盘/dev/sdd划分为两个分区:/dev/sdd1和/dev/sdd2,其中,/dev/sdd1的容量5G,/dev/sdd2的容量为8G。
查看机器分区情况:
lsblk
| NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sde 8:32 0 10G 0 disk ... |
4. 物理卷管理
4.1. 创建物理卷
将硬盘/dev/sdb,以及硬盘分区/dev/sdc1、/dev/sdc2、/dev/sdd1、/dev/sdd2转换为物理卷,创建物理卷命令如下:
# 将硬盘/dev/sdb创建为一个物理卷
sudo pvcreate /dev/sdb
| WARNING: dos signature detected on /dev/sdb at offset 510. Wipe it? [y/n]: y Wiping dos signature on /dev/sdb. Physical volume "/dev/sdb" successfully created. |
# 将硬盘分区/dev/sdc1和/dev/sdc2创建为两个物理卷
sudo pvcreate /dev/sdc[1,2]
| Physical volume "/dev/sdc1" successfully created. Physical volume "/dev/sdc2" successfully created. |
# 将硬盘分区/dev/sdd1和/dev/sdd2创建为两个物理卷
sudo pvcreate /dev/sdd1 /dev/sdd2
| Physical volume "/dev/sdd1" successfully created. Physical volume "/dev/sdd2" successfully created. |
4.2. 显示物理卷
# 显示所有物理卷信息:
sudo pvdisplay
| "/dev/sdb" is a new physical volume of "10.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb VG Name PV Size 10.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID X8hoHa-3Osn-laEc-QlI3-1sT5-aaJZ-TvdTjg "/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 xC3MDe-V3NL-Xgsx-NSFb-8aaW-6OkA-W5CTlr "/dev/sdc2" is a new physical volume of "<8.00 GiB" --- NEW Physical volume --- PV Name /dev/sdc2 VG Name PV Size <8.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID MTKNlr-Rk8T-v3qN-l8lR-QhB5-UtxR-3r3Ygt "/dev/sdd1" is a new physical volume of "<5.00 GiB" --- NEW Physical volume --- PV Name /dev/sdd1 VG Name PV Size <5.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID OL6a9y-oDZG-j8G1-S0kV-2QT9-kBwS-PcnMS5 "/dev/sdd2" is a new physical volume of "5.00 GiB" --- NEW Physical volume --- PV Name /dev/sdd2 VG Name PV Size 5.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID dM8BcS-tHa7-7mnd-WYZ0-U0TG-7bPW-HLklmR |
输出显示已经创建了5个物理卷:/dev/sdb、/dev/sdc1、/dev/sdc2、/dev/sdd1、/dev/sdd2。
# 显示单个物理卷信息:
sudo pvdisplay /dev/sdb
| "/dev/sdb" is a new physical volume of "10.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb VG Name PV Size 10.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID X8hoHa-3Osn-laEc-QlI3-1sT5-aaJZ-TvdTjg |
4.3. 删除物理卷
删除一个物理卷的命令如下:
sudo pvremove /dev/sdd2
| Labels on physical volume "/dev/sdd2" successfully wiped. |
4. 卷组管理
4.1. 创建卷组
将物理卷/dev/sdb、/dev/sdc1和/dev/sdd1组组合成一个卷组,卷组的名称为vg1;将物理卷/dev/sdc2和/dev/sdd2组成一个卷组,卷组的名称为vg2。
# 创建卷组vg1,该卷组是由物理卷/dev/sdb、/dev/sdc1和/dev/sdd1组成
sudo vgcreate vg1 /dev/sdb /dev/sdc1 /dev/sdd1
| Volume group "vg1" successfully created |
# 创建卷组vg2,该卷组是由物理卷/dev/sdc2和/dev/sdd2组成
sudo vgcreate vg2 /dev/sdc2 /dev/sdd2
| Volume group "vg2" successfully created |
4.2. 显示卷组
# 显示所有卷组信息:
sudo vgdisplay
| --- Volume group --- VG Name vg2 |
输出显示创建了2个卷组:vg1和vg2。
# 显示单个卷组信息:
sudo vgdisplay vg1
| --- Volume group --- VG Name vg1 System ID Format lvm2 Metadata Areas 3 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 3 Act PV 3 VG Size <16.99 GiB PE Size 4.00 MiB Total PE 4349 Alloc PE / Size 0 / 0 Free PE / Size 4349 / <16.99 GiB VG UUID Isf2u3-0OGe-56zB-wf8k-0JZU-WOce-CJXJPt |
显示卷组的命令还有:
vgscan:扫描卷组的所有磁盘,并重新构建LVM缓存文件,同时显示卷组。
vgs:使用可配置格式显示卷组信息,每行一个卷组。
4.3. 扩展卷组
扩展卷组是指像一个卷组中增加一个或多个物理卷,示例如下:
# 创建一个新的物理卷/dev/sde
sudo pvcreate /dev/sde
| Physical volume "/dev/sde" successfully created. |
# 将新创建的物理卷/dev/sde加入到卷组vg2中
sudo vgextend vg2 /dev/sde
| Volume group "vg2" successfully extended |
4.4. 缩减卷组
缩减卷组是指从一个卷组中移除一个 或多个物理卷,示例如下:
# 将物理卷/dev/sde从卷组vg2中移除
sudo vgreduce vg2 /dev/sde
| Removed "/dev/sde" from volume group "vg2" |
4.5. 删除卷组
使用vgremove命令可以删除不包含逻辑卷的卷组,示例如下:
# 删除逻辑卷vg2
sudo vgremove vg2
| Volume group "vg2" successfully removed |
4.6. 分割卷组
使用vgsplit命令可以拆分卷组中的物理卷,并创建新的卷组。示例如下:
# 将卷组vg2中的物理卷/devsde拆分为一个新的卷组vg3
sudo vgsplit vg2 vg3 /dev/sde
| New volume group "vg3" successfully split from "vg2" |
4.7 组合卷组
使用lvmerge命令可以将两个卷组合并为一个更大的卷组,在合并卷组之前,确保两个卷组中的逻辑卷没有重叠,否则合并操作将会失败。示例如下:
# 把卷组vg3合并到卷组vg2中
sudo vgmerge -v vg2 vg3
| Checking for volume group "vg2" Checking for volume group "vg3" Archiving volume group "vg3" metadata (seqno 2). Archiving volume group "vg2" metadata (seqno 5). Writing out updated volume group WARNING: updating old metadata to 6 on /dev/sde for VG vg2. Creating volume group backup "/etc/lvm/backup/vg2" (seqno 6). Volume group "vg3" successfully merged into "vg2" |
5. 逻辑卷管理
5.1. 创建逻辑卷
在卷组vg1上创建一个大小为5GB,名称为lv11的逻辑卷:
sudo lvcreate -L 5GB -n lv11 vg1
| Logical volume "lv11" created. |
在卷组vg1上创建一个大小为6GB,名称为lv12的逻辑卷:
sudo lvcreate -L 6GB -n lv12 vg1
| Logical volume "lv12" created. |
在卷组vg2上创建一个名称为lv21的逻辑卷,该逻辑卷的大小为卷组剩余空间的40%:
sudo lvcreate -l 40%VG -n lv21 vg2
| Logical volume "lv21" created. |
注:参数l指定卷组中剩余可用空间的百分比作为逻辑卷的大小
5.2. 显示逻辑卷
显示所有的逻辑卷信息:
sudo lvdisplay
| --- Logical volume --- |
sudo lvs
| LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv11 vg1 -wi-ao---- 6.00g lv12 vg1 -wi-ao---- 6.00g lv21 vg2 -wi-a----- <9.20g |
显示单个逻辑卷的信息:
sudo lvdisplay /dev/lvg1/lv11
| --- Logical volume --- LV Path /dev/vg1/lv11 LV Name lv11 VG Name vg1 LV UUID 5195Ei-gZA6-50iR-Dyv6-iUTY-8QlK-PCam7I LV Write Access read/write LV Creation host, time myvm1, 2024-05-09 21:35:36 +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 256 Block device 253:0 |
5.3. 创建文件系统并挂载
在逻辑卷/dev/vg1/lv11上创建ext4文件系统:
sudo mkfs -t ext4 /dev/vg1/lv11
| 创建含有 1310720 个块(每块 4k)和 327680 个inode的文件系统 正在分配组表: 完成 |
在逻辑卷/dev/vg1/lv12上创建ext4文件系统:
sudo mkfs -t ext4 /dev/vg1/lv12
| 创建含有 1572864 个块(每块 4k)和 393216 个inode的文件系统 正在分配组表: 完成 |
创建挂载点
sudo mkdir /mnt/lv11
sudo mkdir /mnt/lv12
挂载逻辑卷
sudo mount /dev/vg1/vg11 /mnt/lv11
sudo mount /dev/vg1/vg12 /mnt/lv12
查看磁盘挂载信息:
df -Th
| 文件系统 类型 容量 已用 可用 已用% 挂载点 ... /dev/mapper/vg1-lv11 ext4 4.9G 24K 4.6G 1% /mnt/lv11 /dev/mapper/vg1-lv12 ext4 5.9G 24K 5.6G 1% /mnt/lv12 |
为了机器重启后自动挂载逻辑卷,打开文件:
sudo nano /etc/fstab
在文件中最后添加如下信息:
| /dev/vg1/lv11 /mnt/lv11 ext4 defaults,nofail,discard 0 0 /dev/vg1/lv12 /mnt/lv12 ext4 defaults,nofail,discard 0 0 |
保存并关闭文件。
5.4. 扩展逻辑卷
逻辑卷的最大优点是,当空间不足时,可以随时对其进行扩展。
将逻辑卷lv11的空间扩展1GB:
sudo lvextend -L +1GB /dev/vg1/lv11
| Size of logical volume vg1/lv11 changed from 5.00 GiB (1280 extents) to 6.00 GiB (1536 extents). Logical volume vg1/lv11 successfully resized. |
上述命令 实际上并没有增加文件系统的大小,而只是增加了逻辑卷的大小。为了使文件系统增长,我们需要使用以下命令调整文件系统的大小。
sudo resize2fs /dev/vg1/lv11
| /dev/vg1/lv11 上的文件系统已被挂载于 /mnt/lv11;需要进行在线调整大小 old_desc_blocks = 1, new_desc_blocks = 1 /dev/vg1/lv11 上的文件系统现在为 1572864 个块(每块 4k)。 |
5.5. 缩减逻辑卷
可以使用lvreduce命令减小一个逻辑卷的大小,但在执行此操作之前需要非常小心,以确保不会丢失数据。在对逻辑卷进行任何缩减操作之前,强烈建议备份相关数据,以避免意外丢失。对于要缩小的逻辑卷,需要确保其文件系统支持缩小,对于 ext4 文件系统,首先可以使用resize2fs命令先缩小文件系统,然后使用lvreduce命令实际缩小逻辑卷的大小。
例如,逻辑卷/dev/vg1/lv11的大小为5GB,其文件系统的大小也为5GB,该逻辑卷挂载到目录/mnt/lv11上,如果想要将该逻辑卷缩减为4GB,步骤如下:
1) 卸载目录
sudo umount /mnt/lv11
2) 检查文件系统
sudo e2fsck -f /dev/vg1/lv11
| e2fsck 1.45.5 (07-Jan-2020) 第 1 步:检查inode、块和大小 第 2 步:检查目录结构 第 3 步:检查目录连接性 第 4 步:检查引用计数 第 5 步:检查组概要信息 /dev/vg1/lv11:11/393216 文件(0.0% 为非连续的), 46190/1572864 块 |
3) 缩小文件系统
sudo resize2fs /dev/vg1/lv11 4G
| 将 /dev/vg1/lv11 上的文件系统调整为 1048576 个块(每块 4k)。 /dev/vg1/lv11 上的文件系统现在为 1048576 个块(每块 4k)。 |
4) 缩小逻辑卷
sudo lvreduce -L 4G /dev/vg1/lv11
| WARNING: Reducing active logical volume to 4.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce vg1/lv11? [y/n]: y Size of logical volume vg1/lv11 changed from 6.00 GiB (1536 extents) to 4.00 GiB (1024 extents). Logical volume vg1/lv11 successfully resized. |
5.6. 删除逻辑卷
可以使用lvremove命令删除逻辑卷。在删除逻辑卷前,先卸载其挂载的目录,删除逻辑卷后,数据将无法恢复。
例如,逻辑卷/dev/vg1/lv12挂载到目录/mnt/lv12,删除该逻辑卷的步骤:
1) 卸载目录
sudo umount /mnt/lv12
2)删除逻辑卷
sudo lvremove /dev/vg1/lv12
| Do you really want to remove and DISCARD active logical volume vg1/lv12? [y/n]: y Logical volume "lv12" successfully removed |


771

被折叠的 条评论
为什么被折叠?



