跳转到内容
搜索 Rocky Linux 文档

    浏览当前文档目录

    Rocky 9:LVM 扩容与 XFS 增长(实测)

    在 Rocky Linux 9.8 环境的特权容器(用户态为 Rocky 9.8,宿主内核 5.14.0-687.54.1.el9_8)中用 2 GB loop 文件执行:pvcreate → vgcreate → lvcreate -Z n → dmsetup mknodes → mkfs.xfs → mount → lvextend → xfs_growfs → 清理。日志:plans/content-expansion/evidence/logs/rocky-storage-lvm.log。

    这不是完整虚拟机:容器共享宿主内核,且默认没有 udev,所以多了一步 dmsetup mknodes(见下)。真实 Rocky 主机上不需要这一步。

    Terminal window
    lvcreate -y -Z n -L 1G -n lvdata vglab
    dmsetup mknodes
    ls /dev/mapper/
    /dev/mapper/vglab-lvdata

    容器里 udev 不运行,lvcreate 成功后 /dev/mapper/ 下没有设备节点,mkfs.xfs /dev/vglab/lvdata 会报「device not found」。dmsetup mknodes 手动补上节点。真实主机上 udev 会自动创建,无需执行。

    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 -Z n -L 1G -n lvdata vglab
    sudo dmsetup mknodes
    sudo mkfs.xfs -q /dev/mapper/vglab-lvdata

    -Z n 跳过 wipe,避免容器里「device not cleared」的报错;真实主机上可以不加。

    Terminal window
    sudo mount /dev/mapper/vglab-lvdata /mnt/lvmlab
    df -h /mnt/lvmlab | tail -1
    sudo lvextend -L +512M /dev/mapper/vglab-lvdata
    df -h /mnt/lvmlab | tail -1
    /dev/mapper/vglab-lvdata 960M 39M 922M 5% /mnt/lvmlab
    Logical volume vglab/lvdata successfully resized.
    /dev/mapper/vglab-lvdata 960M 39M 922M 5% /mnt/lvmlab

    只扩 LV 时 df 不变——这是最常被忽略的一步。

    Terminal window
    sudo xfs_growfs /mnt/lvmlab | tail -1
    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 的参数是挂载点;对 ext4 应改用 resize2fs <设备>。

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

    容器里要先 dmsetup remove 再 vgremove,否则 LV 的 dm 设备仍占用 loop,losetup -d 会失败。

    • 只 lvextend 不 xfs_growfs:df 永远是旧值;
    • 容器里忘了 dmsetup mknodes:mkfs/mount 都报设备不存在;
    • XFS 想缩小:不支持,只能备份重建。

    在任意 Rocky 9(或 AlmaLinux 9)机器上:

    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 → 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 <设备>,df 才会更新。

    容器里 mkfs 报设备不存在怎么办?

    容器通常没有 udev,lvcreate 后 /dev/mapper 下没有节点。执行 dmsetup mknodes 手动补节点,然后用 /dev/mapper/<vg>-<lv> 访问;真实主机不需要这一步。

    扩容会影响在线业务吗?

    lvextend 与 xfs_growfs 都支持在线执行,不需要卸载。但操作前要确认 VG 有空闲 PE、挂载点正确,并避免在扩容过程中重启或卸载。