Skip to content

LVM 逻辑卷

LVM(Logical Volume Manager)是一种灵活的磁盘管理技术,它提供了一种逻辑层面的磁盘管理方式,允许用户将多个物理磁盘组合成逻辑卷,从而实现更灵活的存储管理

LVM 的基本概念

  • 物理卷(Physical Volume, PV):物理卷是 LVM 管理的最小物理单元,可以是一个磁盘或磁盘分区。物理卷被格式化为 LVM 可以识别的格式后,可以被添加到卷组中。
  • 卷组(Volume Group, VG):卷组是物理卷的容器,可以包含一个或多个物理卷。卷组提供了存储空间池,用于创建逻辑卷。
  • 逻辑卷(Logical Volume, LV):逻辑卷是卷组中划分出来的虚拟存储设备,可以被格式化为文件系统并挂载使用。逻辑卷的大小可以动态调整,这是 LVM 灵活性的体现。

相关命令

命令作用
pvcreate创建物理卷
pvremove移除物理卷
pvs / pvdisplay查看物理卷信息
vgcreate创建卷组
vgs/vgscan/vgdisplay查看卷组信息
vgreduce从卷组移除物理卷
vgextend扩容卷组
lvcreate创建逻辑卷
lvs/lvdisplay查看逻辑卷
lvextent扩容逻辑卷
lvresize动态调整逻辑卷(LV)的容量支持 扩展收缩 操作
lvremove删除逻辑卷
resize2fs在线格式化ext格式文件系统。调整ext文件系统
xfs_growfs在线格式化xfs格式文件系统。扩展XFS文件系统

使用缓存卷提高性能

LVM 支持使用缓存卷来提高逻辑卷的性能。以下是使用缓存卷的步骤:

  1. 创建缓存池。使用 lvcreate 命令创建缓存池。例如:

    bash
    lvcreate --type cache-pool --name datalv-cache /dev/sdd

    这条命令使用 /dev/sdd 磁盘创建一个缓存池,命名为 datalv-cache

  2. 将缓存池附加到逻辑卷。使用 lvcreate 命令将缓存池附加到逻辑卷。例如:

    bash
    lvcreate --type cache --name datalv-cached --cache-pool datalv-cache /dev/datavg/datalv

    这条命令将缓存池 datalv-cache 附加到逻辑卷 datalv,创建一个缓存卷 datalv-cached

  3. 挂载缓存卷并使用。例如:

    bash
    mkdir /mnt/cached-data
    mount /dev/datavg/datalv-cached /mnt/cached-data

调整性能设置

可以调整 LVM 的性能设置,以优化逻辑卷的性能。例如,可以调整 I/O 调度算法和缓存策略。以下是调整性能设置的示例:

  1. 调整 I/O 调度算法。可以使用 ionice 命令调整逻辑卷的 I/O 调度优先级。例如:

    bash
    ionice -c 2 -n 0 -p $(pidof process_name)

    这条命令将指定进程的 I/O 调度优先级设置为实时级别。

  2. 调整缓存策略。可以使用 lvchange 命令调整缓存策略。例如:

    bash
    lvchange --poll y /dev/datavg/datalv

    这条命令启用对逻辑卷 datalv 的轮询,以提高其性能。

最佳实践和注意事项

  • 备份数据:在进行任何 LVM 操作之前,建议备份重要数据,以防止操作失误导致数据丢失。
  • 监控空间使用:定期监控卷组和逻辑卷的空间使用情况,以避免空间不足导致的问题。
  • 性能优化:根据实际需求调整 LVM 的性能设置,以获得最佳的存储性能。
  • 快照管理:合理设置快照卷的大小,并及时删除不再需要的快照卷,以释放空间。

创建 LVM 逻辑卷的步骤

1.挂载点

bash
df -h
lsblk

2. 创建物理卷

使用 pvcreate 命令将磁盘或分区转换为物理卷。例如:

bash
# 创建
pvcreate /dev/sdb

# 查看
pvdisplay /dev/sdb

这条命令将 /dev/sdb 磁盘转换为 LVM 物理卷。

3. 创建卷组

使用 vgcreate 命令创建卷组,并将物理卷添加到卷组中。例如:

bash
vgcreate yunjisuan /dev/sdb

这条命令创建了一个名为 yunjisuan 的卷组,并将 /dev/sdb 物理卷添加到该卷组中。

4. 创建逻辑卷

使用 lvcreate 命令在卷组中创建逻辑卷。例如:

bash
lvcreate -n datalv -L +5G yunjisuan

这条命令在 yunjisuan 卷组中创建了一个名为 datalv、大小增加 5GB 的逻辑卷。

注意:+5G是在原基础上增加,5G是整体大小为5G

5. 格式化逻辑卷

逻辑卷创建完成后,需要格式化为文件系统

bash
mkfs.ext4 /dev/yunjisuan/datalv

命令将逻辑卷格式化为 ext4 文件系统

6.挂载逻辑卷

bash
mkdir /data
mount /dev/yunjisuan/datalv /data

第一条命令创建挂载点 /data,第二条命令将逻辑卷挂载到该挂载点。

7.开机自动挂载

mount挂载是临时操作,下次系统重启不会自动挂载,可编辑/etc/fstab文件或者/etc/rc.d.rc.local

bash
# /etc/fstab
/dev/yunjisuan/datalv /data		ext4	defaults	0 0

# /etc/rc.d/rc.local
mount /dev/yunjisuan/datalv /data

8.检测

bash
df -Th

调整逻辑卷大小步骤

扩大逻辑卷

  1. 使用 lvextend 命令扩展逻辑卷的大小。例如:

    bash
    lvextend --size +2G /dev/datavg/datalv

    这条命令将逻辑卷 datalv 扩大 2GB。

  2. 调整文件系统大小以适应新的逻辑卷大小。

    对于 ext4 文件系统,可以使用 resize2fs 命令:

    bash
    resize2fs /dev/datavg/datalv

    对于 XFS 文件系统,可以使用 xfs_growfs 命令:

    bash
    xfs_growfs /mnt/data

缩小逻辑卷

在缩小逻辑卷之前,需要确保文件系统不会受到损坏。以下是缩小逻辑卷的步骤:

  1. 卸载逻辑卷:

    bash
    umount /dev/datavg/datalv
  2. 文件系统完整行检查和修复

    bash
    e2fsck -f /dev/datavg/datalv
  3. 调整文件系统大小。

    对于 ext4 文件系统,可以使用 resize2fs 命令:

    bash
    resize2fs /dev/datavg/datalv 3G

    这条命令将文件系统大小调整为 3GB。

  4. 使用 lvreduce 命令缩小逻辑卷的大小:

    bash
    lvreduce -L 3G /dev/datavg/datalv

    注意:在缩小逻辑卷时,必须确保逻辑卷的新大小大于或等于文件系统大小,否则可能导致数据丢失。

  5. 挂载逻辑卷:

    bash
    mount /dev/datavg/datalv /mnt/data

创建快照卷

快照卷用于在某一时刻创建逻辑卷的快照,以便进行数据备份或恢复。以下是创建快照卷的步骤:

  1. 使用 lvcreate 命令创建快照卷。例如:

    bash
    lvcreate --size 1G --snapshot --name datalv-snapshot /dev/datavg/datalv

    这条命令创建了一个名为 datalv-snapshot、大小为 1GB 的快照卷,用于保存 datalv 逻辑卷的当前状态。

  2. 挂载快照卷并进行数据备份。例如:

    bash
    mkdir /mnt/snapshot
    mount /dev/datavg/datalv-snapshot /mnt/snapshot
  3. 在备份完成后,可以删除快照卷以释放空间:

    bash
    umount /mnt/snapshot
    lvremove /dev/datavg/datalv-snapshot

    注意:快照卷的大小应足够保存在创建快照后对原始逻辑卷所做的更改。如果快照卷空间不足,快照将失效。

系统文件扩容步骤

1.查看添加设备

bash
lsblk

2.创建物理卷

bash
pvcreate /dev/sdd

3.卷组扩容

bash
# 先查看要扩容的卷组
pvdisplay

# 我这里以openeuler为例
vgextent openeuler /dev/sdd

4.逻辑卷扩容

bash
lvextent -l +100%FREE /dev/openeuler/root

5.在线格式化

bash
## 操作前先查看文件系统类型
resize2fs /dev/openeuler/root		# ext格式
xfs_growfs /dev/openeuler/root		# xfs

6.检测

bash
df -Th

重点关注

系统逻辑卷扩容后不要缩减,因为硬盘里已经存储系统文件信息,移除硬盘会影响系统的正常运行