跳转到内容
搜索 AlmaLinux 文档

    浏览当前文档目录

    AlmaLinux 9:LVM 扩容与 XFS 增长(真机实测)

    在一台 AlmaLinux 9.8 真机(kernel 5.14.0-687.54.1.el9_8,4 vCPU / 3 GB 内存)上,用 2 GB 的文件做 loop 设备,完整执行:pvcreate → vgcreate → lvcreate -L 1G → mkfs.xfs → mount → df → lvextend -L +512M → df(未变)→ xfs_growfs → df(变化)→ 卸载并删除 LV/VG/PV/loop。日志:plans/content-expansion/evidence/logs/alma-storage-lvm.log。

    真实磁盘上的分区调整(parted/growpart)未在本页验证,只覆盖「PV 已在、只需扩 LV 和文件系统」这一段。

    直接在系统盘上练 LVM,一次 pvcreate 写错盘就是事故。用文件做 loop 设备等价于一块独立磁盘,练完 losetup -d 即可回收,不影响真实分区。本页所有输出都来自这样一块 2 GB 的 loop 盘。

    Terminal window
    sudo dnf install -y lvm2 xfsprogs
    truncate -s 2G /var/tmp/lvm-lab.img
    LOOP=$(sudo losetup -f --show /var/tmp/lvm-lab.img)
    sudo pvcreate -y "$LOOP"
    sudo vgcreate vglab "$LOOP"
    sudo lvcreate -y -L 1G -n lvdata vglab
    sudo mkfs.xfs -q /dev/vglab/lvdata
    Physical volume "/dev/loop0" successfully created.
    Volume group "vglab" successfully created
    Logical volume "lvdata" created.
    Terminal window
    sudo mkdir -p /mnt/lvmlab
    sudo mount /dev/vglab/lvdata /mnt/lvmlab
    df -h /mnt/lvmlab | tail -1
    /dev/mapper/vglab-lvdata 960M 39M 922M 5% /mnt/lvmlab

    1 GiB 的 LV 格式化成 XFS 后可用约 960 MB(元数据开销)。

    Terminal window
    sudo lvextend -L +512M /dev/vglab/lvdata
    df -h /mnt/lvmlab | tail -1
    Size of logical volume vglab/lvdata changed from 1.00 GiB (256 extents) to 1.50 GiB (384 extents).
    Logical volume vglab/lvdata successfully resized.
    /dev/mapper/vglab-lvdata 960M 39M 922M 5% /mnt/lvmlab

    这是最常见的坑:LV 已经变成 1.5 GiB,但文件系统不知道,df 还是 960M。

    扩文件系统:xfs_growfs 之后才生效

    Section titled “扩文件系统:xfs_growfs 之后才生效”
    Terminal window
    sudo xfs_growfs /mnt/lvmlab | tail -3
    df -h /mnt/lvmlab | tail -1
    data blocks changed from 262144 to 393216
    /dev/mapper/vglab-lvdata 1.5G 43M 1.4G 3% /mnt/lvmlab

    xfs_growfs 的参数是挂载点,不是 LV 路径;对 XFS 只能用挂载点。

    Terminal window
    sudo umount /mnt/lvmlab
    sudo lvremove -y vglab/lvdata
    sudo vgremove -y vglab
    sudo pvremove -y "$LOOP"
    sudo losetup -d "$LOOP"
    rm -f /var/tmp/lvm-lab.img

    顺序是「卸载 → 删 LV → 删 VG → 删 PV → 解绑 loop」。

    • 只 lvextend 不扩文件系统:df 永远不变,这是本节的重点;
    • 对 ext4 用 xfs_growfs:会直接报错,ext4 要用 resize2fs;
    • 扩容前没确认挂载点:xfs_growfs /dev/... 传错参数会报「not a mounted XFS」。

    练习:在任意机器上安全练一遍

    Section titled “练习:在任意机器上安全练一遍”
    Terminal window
    sudo dnf install -y lvm2 xfsprogs
    truncate -s 2G /var/tmp/lab.img
    LOOP=$(sudo losetup -f --show /var/tmp/lab.img)
    sudo pvcreate -y "$LOOP" && sudo vgcreate vglab "$LOOP"
    sudo lvcreate -y -L 1G -n lvdata vglab
    sudo mkfs.xfs -q /dev/vglab/lvdata
    sudo mkdir -p /mnt/lvmlab && sudo mount /dev/vglab/lvdata /mnt/lvmlab
    sudo lvextend -L +512M /dev/vglab/lvdata
    sudo xfs_growfs /mnt/lvmlab
    df -h /mnt/lvmlab

    检查:

    1. lvs vglab → LV 大小 1.50g
    2. df -h /mnt/lvmlab → 约 1.5G
    3. xfs_info /mnt/lvmlab | grep data → blocks 变为 393216

    常见问题

    lvextend 之后 df 为什么没变?

    因为扩容分两步:lvextend 扩的是逻辑卷(块设备),文件系统仍按原大小使用。XFS 要再执行 xfs_growfs <挂载点>,ext4 用 resize2fs <设备>。

    XFS 能缩小吗?

    不能。XFS 只支持在线扩容,不支持缩小;需要更小的文件系统只能备份后重建。选 XFS 时要预留好容量规划。

    生产上扩 LV 前要做什么?

    先确认 VG 有足够空闲 PE(vgs 看 VFree),确认挂载点与文件系统类型(findmnt),必要时先做快照或备份;扩 LV 本身可在线做,但扩文件系统前不要中断挂载。