跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    LVM(Logical Volume Manager,逻辑卷管理器)是 Linux 中非常强大的磁盘管理工具,它在物理磁盘与文件系统之间增加了一层抽象,使得存储空间的分配和调整更加灵活。

    LVM 由三个层次组成:

    层次缩写说明
    物理卷PV (Physical Volume)底层磁盘或分区,是 LVM 的基础构建块
    卷组VG (Volume Group)由一个或多个 PV 组合而成的存储池
    逻辑卷LV (Logical Volume)从 VG 中分配的逻辑分区,可格式化挂载使用

    层次关系如下:

    磁盘/分区 --> PV --> VG --> LV --> 文件系统
    /dev/sdb1 --> PV1 -+
    +--> vg_data --> lv_app --> /app
    /dev/sdc1 --> PV2 -+ --> lv_backup --> /backup

    大多数企业 Linux 发行版已预装 LVM,如未安装:

    Terminal window
    sudo dnf install lvm2 -y

    物理卷是 LVM 的基础层,需要先将磁盘或分区初始化为 PV。

    先使用 fdisk 或 gdisk 创建分区,并将分区类型设为 8e(Linux LVM):

    Terminal window
    sudo fdisk /dev/sdb
    # n -> p -> 1 -> 回车 -> 回车 -> t -> 8e -> w
    sudo partprobe /dev/sdb
    Terminal window
    sudo pvcreate /dev/sdb1
    sudo pvcreate /dev/sdc1

    也可以直接在整个磁盘上创建 PV(无需事先分区):

    Terminal window
    sudo pvcreate /dev/sdd
    Terminal window
    # 简洁列表
    sudo pvs
    # 详细信息
    sudo pvdisplay /dev/sdb1

    卷组将多个 PV 汇聚为一个统一的存储池。

    Terminal window
    sudo vgcreate vg_data /dev/sdb1 /dev/sdc1
    Terminal window
    # 简洁列表
    sudo vgs
    # 详细信息
    sudo vgdisplay vg_data

    后续添加新磁盘时,可以将新的 PV 加入现有 VG:

    Terminal window
    sudo pvcreate /dev/sdd1
    sudo vgextend vg_data /dev/sdd1
    Terminal window
    # 先迁移数据到其他 PV
    sudo pvmove /dev/sdc1
    # 再从 VG 中移除
    sudo vgreduce vg_data /dev/sdc1

    逻辑卷是从卷组中划分出来的可用存储空间,可以格式化并挂载使用。

    Terminal window
    sudo lvcreate -L 50G -n lv_app vg_data
    Terminal window
    # 使用卷组剩余空间的 100%
    sudo lvcreate -l 100%FREE -n lv_backup vg_data
    Terminal window
    # 简洁列表
    sudo lvs
    # 详细信息
    sudo lvdisplay /dev/vg_data/lv_app
    Terminal window
    # 格式化为 XFS
    sudo mkfs.xfs /dev/vg_data/lv_app
    # 创建挂载点并挂载
    sudo mkdir -p /app
    sudo mount /dev/vg_data/lv_app /app
    # 验证
    df -hT /app
    Terminal window
    # 获取 LV 的 UUID(也可以直接使用 LV 路径)
    sudo blkid /dev/vg_data/lv_app
    # 编辑 fstab
    echo '/dev/vg_data/lv_app /app xfs defaults 0 0' | sudo tee -a /etc/fstab

    LVM 最强大的功能之一就是在线扩展逻辑卷。

    使用 -r 参数可以在扩展 LV 的同时自动扩展文件系统:

    Terminal window
    # 增加 20G 空间
    sudo lvextend -r -L +20G /dev/vg_data/lv_app
    Terminal window
    # 将 LV 扩展到 100G
    sudo lvextend -r -L 100G /dev/vg_data/lv_app
    Terminal window
    sudo lvextend -r -l +100%FREE /dev/vg_data/lv_app

    分步扩展(手动扩展文件系统)

    Section titled “分步扩展(手动扩展文件系统)”

    如果不使用 -r 参数,需要手动扩展文件系统:

    Terminal window
    # 第一步:扩展 LV
    sudo lvextend -L +20G /dev/vg_data/lv_app
    # 第二步:扩展文件系统
    # XFS 文件系统
    sudo xfs_growfs /app
    # EXT4 文件系统
    sudo resize2fs /dev/vg_data/lv_app

    这三个命令是日常运维中最常用的 LVM 状态查询命令。

    Terminal window
    sudo pvs
    PV VG Fmt Attr PSize PFree
    /dev/sdb1 vg_data lvm2 a-- <50.00g 0
    /dev/sdc1 vg_data lvm2 a-- <50.00g 30.00g
    Terminal window
    sudo vgs
    VG #PV #LV #SN Attr VSize VFree
    vg_data 2 2 0 wz--n- 99.99g 30.00g
    Terminal window
    sudo lvs
    LV VG Attr LSize Pool Origin Data% Meta%
    lv_app vg_data -wi-ao---- 50.00g
    lv_backup vg_data -wi-ao---- 19.99g
    Terminal window
    # 显示 LV 名称、大小、卷组和设备路径
    sudo lvs -o lv_name,lv_size,vg_name,lv_path

    LVM 快照可以在某一时刻创建逻辑卷的只读或读写副本,常用于备份和测试。

    Terminal window
    # 为 lv_app 创建一个 10G 的快照
    sudo lvcreate -s -L 10G -n lv_app_snap /dev/vg_data/lv_app

    参数说明:

    • -s:表示创建快照
    • -L 10G:快照空间大小(存储变化数据)
    • -n lv_app_snap:快照名称
    Terminal window
    sudo lvs

    快照卷会显示 Origin(源卷)和 Data%(已使用的快照空间百分比)。

    挂载快照(只读方式访问历史数据)

    Section titled “挂载快照(只读方式访问历史数据)”
    Terminal window
    sudo mkdir -p /mnt/snap
    sudo mount -o ro /dev/vg_data/lv_app_snap /mnt/snap

    可以从快照中复制需要的文件:

    Terminal window
    sudo cp /mnt/snap/important-file.conf /app/important-file.conf

    或者合并快照以回滚整个逻辑卷:

    Terminal window
    # 先卸载源卷和快照
    sudo umount /app
    sudo umount /mnt/snap
    # 合并快照(回滚到快照时刻的状态)
    sudo lvconvert --merge /dev/vg_data/lv_app_snap
    # 重新挂载
    sudo mount /dev/vg_data/lv_app /app
    Terminal window
    sudo umount /mnt/snap
    sudo lvremove /dev/vg_data/lv_app_snap

    删除时需要按照 LV -> VG -> PV 的顺序逐层操作。

    1. 卸载并删除逻辑卷:

      Terminal window
      sudo umount /app
      sudo lvremove /dev/vg_data/lv_app
    2. 删除卷组:

      Terminal window
      sudo vgremove vg_data
    3. 删除物理卷:

      Terminal window
      sudo pvremove /dev/sdb1 /dev/sdc1

    以下演示使用两块新磁盘 /dev/sdb 和 /dev/sdc 搭建 LVM 存储的完整流程。

    1. 在两块磁盘上创建分区:

      Terminal window
      sudo parted /dev/sdb mklabel gpt
      sudo parted /dev/sdb mkpart primary 0% 100%
      sudo parted /dev/sdc mklabel gpt
      sudo parted /dev/sdc mkpart primary 0% 100%
      sudo partprobe
    2. 创建物理卷:

      Terminal window
      sudo pvcreate /dev/sdb1 /dev/sdc1
      sudo pvs
    3. 创建卷组:

      Terminal window
      sudo vgcreate vg_data /dev/sdb1 /dev/sdc1
      sudo vgs
    4. 创建逻辑卷:

      Terminal window
      sudo lvcreate -L 80G -n lv_app vg_data
      sudo lvcreate -l 100%FREE -n lv_logs vg_data
      sudo lvs
    5. 格式化并挂载:

      Terminal window
      sudo mkfs.xfs /dev/vg_data/lv_app
      sudo mkfs.xfs /dev/vg_data/lv_logs
      sudo mkdir -p /app /var/applogs
      sudo mount /dev/vg_data/lv_app /app
      sudo mount /dev/vg_data/lv_logs /var/applogs
    6. 配置开机自动挂载:

      Terminal window
      sudo cp /etc/fstab /etc/fstab.bak
      cat <<EOF | sudo tee -a /etc/fstab
      /dev/vg_data/lv_app /app xfs defaults 0 0
      /dev/vg_data/lv_logs /var/applogs xfs defaults 0 0
      EOF
      sudo mount -a
    7. 验证结果:

      Terminal window
      df -hT /app /var/applogs
      sudo pvs && sudo vgs && sudo lvs

    LVM 的灵活性使其成为企业 Linux 环境中管理存储的首选方案。熟练掌握 PV、VG、LV 的操作以及在线扩展和快照功能,将极大提升存储管理效率。