LVM,全称 Logical Volume Manager(逻辑卷管理器),是 Linux 环境下进行磁盘分区管理的强大工具。其核心思路很简单:将一块或多块物理磁盘分区(PV)先整合为一个大的存储池——卷组(VG),然后从该池中划分出逻辑卷(LV)供系统使用。优势非常明显:当卷组空间不足时,可随时添加新磁盘分区;若某个逻辑卷快满,可直接从卷组剩余空间中划分一部分补充,整个过程无需停止服务、无需迁移数据,实现了真正的在线动态存储管理。
LVM 模型如下图:
无需重启,动态刷新新硬盘设备
首先执行 cat /proc/scsi/scsi 查看当前 SCSI 设备列表,确认当前最大的设备 ID 是多少。随后运行以下命令添加新设备:
echo "scsi add-single-device 0 0 ?+1 0" > /proc/scsi/scsi
再次使用 cat /proc/scsi/scsi 检查,输出类似:
Attached devices: Host: scsi0 Channel: 00 Id: 00 Lun: 00 Vendor: VMware, Model: VMware Virtual S Rev: 1.0 Type: Direct-Access ANSI SCSI revision: 02 Host: scsi2 Channel: 00 Id:00 Lun: 00 Vendor: NECVMWar Model: VMware IDECDR10 Rev: 1.00 Type: CD-ROM ANSI SCSI revision: 05 Host: scsi0 Channel: 00 Id:01 Lun: 00 Vendor: VMware, Model: VMware Virtual S Rev: 1.0 Type: Direct-Access ANSI SCSI revision: 02
二、添加完成后
1、将一块8GB的新硬盘添加到系统中
使用 fdisk -l 命令确认新硬盘设备名为 /dev/vdb:
shell# fdisk -l
2、对新硬盘进行分区
通过 fdisk 命令进行分区,在此创建一个8GB的主分区 /dev/vdb1。分区时务必设定类型为 8e(LVM 分区标识)。最后执行 partprobe(或 partx -u)使内核重新读取分区表:
shell# fdisk /dev/vdb shell# partprobe
3、创建物理卷(PV)
使用 pvcreate 创建物理卷,并通过 pvdisplay 查看新创建的物理卷信息:
shell# pvcreate /dev/vdb1 shell# pvdisplay
4、将物理卷加入卷组(VG)
首先创建卷组:执行 vgcreate VG名 设备名。本例假设已有卷组名为 centos,通过 vgdisplay 查看其初始空闲空间为0。然后使用 vgextend 将 /dev/vdb1 扩展至该卷组:
shell# vgextend centos /dev/vdb1
再次运行 vgdisplay,可见空闲空间显示为8GB,说明新物理卷已成功加入卷组。
5、创建逻辑卷(LV)
使用 lvcreate 从卷组中划分新的逻辑卷。以下示例创建名为 newlv、容量为4GB的逻辑卷:
shell# lvcreate -L 4G -n newlv centos
若希望使用全部剩余空间,可执行:
shell# lvcreate -l +100%free -n newlv centos
使用 lvdisplay 查看逻辑卷的详细信息,此时卷组仍剩余4GB空间。
6、格式化逻辑卷并挂载
新创建的逻辑卷需格式化后方可使用。在 CentOS 7 环境下,使用 mkfs.xfs 将其格式化为 xfs 文件系统:
shell# mkfs.xfs /dev/centos/newlv
将其挂载到 /mnt 目录(可根据实际需求调整挂载点):
shell# mount -t xfs /dev/centos/newlv /mnt/ shell# df -Th
为实现开机自动挂载,需编辑 /etc/fstab 文件,并在末尾添加以下行:
/dev/centos/newlv /mnt xfs defaults 1 2
7、逻辑卷扩容
使用 lvextend 进行逻辑卷扩容。例如将全部剩余空间分配给 newlv,使其容量增至8GB:
shell# lvextend -l +100%FREE /dev/centos/newlv
由于文件系统为 xfs,需在线调整容量(CentOS 6 使用 resize2fs,CentOS 7 则使用 xfs_growfs):
shell# xfs_growfs /dev/centos/newlv
最后执行 df -Th 确认,逻辑卷分区已成功动态扩容至8GB。
