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 主机上不需要这一步。
为什么容器里要多一条 dmsetup
Section titled “为什么容器里要多一条 dmsetup”lvcreate -y -Z n -L 1G -n lvdata vglabdmsetup mknodesls /dev/mapper//dev/mapper/vglab-lvdata容器里 udev 不运行,lvcreate 成功后 /dev/mapper/ 下没有设备节点,mkfs.xfs /dev/vglab/lvdata 会报「device not found」。dmsetup mknodes 手动补上节点。真实主机上 udev 会自动创建,无需执行。
建 PV/VG/LV 并格式化
Section titled “建 PV/VG/LV 并格式化”sudo dnf install -y lvm2 xfsprogstruncate -s 2G /var/tmp/lvm-lab.imgLOOP=$(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 vglabsudo dmsetup mknodessudo mkfs.xfs -q /dev/mapper/vglab-lvdata-Z n 跳过 wipe,避免容器里「device not cleared」的报错;真实主机上可以不加。
sudo mount /dev/mapper/vglab-lvdata /mnt/lvmlabdf -h /mnt/lvmlab | tail -1sudo lvextend -L +512M /dev/mapper/vglab-lvdatadf -h /mnt/lvmlab | tail -1/dev/mapper/vglab-lvdata 960M 39M 922M 5% /mnt/lvmlabLogical volume vglab/lvdata successfully resized./dev/mapper/vglab-lvdata 960M 39M 922M 5% /mnt/lvmlab只扩 LV 时 df 不变——这是最常被忽略的一步。
sudo xfs_growfs /mnt/lvmlab | tail -1df -h /mnt/lvmlab | tail -1data blocks changed from 262144 to 393216/dev/mapper/vglab-lvdata 1.5G 43M 1.4G 3% /mnt/lvmlabxfs_growfs 的参数是挂载点;对 ext4 应改用 resize2fs <设备>。
sudo umount /mnt/lvmlabsudo dmsetup remove vglab-lvdatasudo vgremove -y vglabsudo 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 想缩小:不支持,只能备份重建。
练习:安全地练一遍扩容
Section titled “练习:安全地练一遍扩容”在任意 Rocky 9(或 AlmaLinux 9)机器上:
sudo dnf install -y lvm2 xfsprogstruncate -s 2G /var/tmp/lab.imgLOOP=$(sudo losetup -f --show /var/tmp/lab.img)sudo pvcreate -y "$LOOP" && sudo vgcreate vglab "$LOOP"sudo lvcreate -y -L 1G -n lvdata vglabsudo mkfs.xfs -q /dev/vglab/lvdatasudo mkdir -p /mnt/lvmlab && sudo mount /dev/vglab/lvdata /mnt/lvmlabsudo lvextend -L +512M /dev/vglab/lvdata && sudo xfs_growfs /mnt/lvmlabdf -h /mnt/lvmlab检查:
lvs vglab→ 1.50gdf -h /mnt/lvmlab→ 约 1.5Gxfs_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、挂载点正确,并避免在扩容过程中重启或卸载。
- 安装后核对:安装后 7 项核对
- 日志轮转:logrotate 实战
- 包管理:dnf 事务回滚