openEuler磁盘扩容后,空间去哪了?一步步教你用lsblk、pvdisplay、lvdisplay、df命令排查
openEuler磁盘扩容后空间去哪了?四层排查指南
刚给openEuler虚拟机扩容磁盘,明明在管理界面增加了存储空间,但登录系统后df -h显示的容量纹丝不动?这种"空间消失"现象在LVM存储架构中其实很常见——扩容操作需要穿透物理设备、逻辑卷、文件系统等多个层级才能最终生效。本文将带你用侦探思维逐层排查,通过lsblk、pvdisplay、lvdisplay、df等命令组合,精准定位问题卡点。
1. 存储架构的洋葱模型
Linux的LVM(Logical Volume Manager)存储体系像洋葱一样分层封装。当我们在虚拟化平台扩展磁盘容量后,新空间需要依次穿透以下四层屏障:
- 物理设备层:虚拟磁盘的原始存储设备(如/dev/sda)
- 物理卷层:被LVM管理的物理分区(如/dev/sda2)
- 逻辑卷层:分配给具体用途的虚拟块设备(如/dev/mapper/openeuler-root)
- 文件系统层:最终被挂载使用的存储空间(如/根目录)
每一层都可能成为扩容操作的"拦路虎"。下面我们通过一组诊断命令,自底向上排查问题。
2. 物理设备层验证
首先确认虚拟机是否识别到新的磁盘容量。执行以下命令查看原始磁盘信息:
lsblk -o NAME,SIZE,RO,FSTYPE,MOUNTPOINT典型输出示例:
NAME SIZE RO FSTYPE MOUNTPOINT sda 256G 0 ├─sda1 1G 0 ext4 /boot └─sda2 63G 0 LVM2_member ├─openeuler-root 40G 0 ext4 / ├─openeuler-swap 4G 0 swap [SWAP] └─openeuler-home 20G 0 ext4 /home关键检查点:
sda的总大小是否与扩容后的预期一致- 分区表是否覆盖全部空间(如示例中sda2仍为63G,存在未分配空间)
若sda容量未更新,需检查:
- 虚拟机配置是否已保存
- 是否需重新扫描SCSI设备:
echo 1 > /sys/class/scsi_device/0\:0\:0\:0/device/rescan
3. 物理卷层诊断
当物理磁盘容量正确识别后,需要验证LVM物理卷(PV)是否包含新增空间:
pvdisplay -C --units g输出示例:
PV VG Fmt Attr PSize PFree /dev/sda2 openeuler lvm2 a-- <63.00g 0问题定位:
PSize小于物理磁盘总空间 → PV未扩展PFree为0 → 卷组无可用空间
扩展PV的核心命令:
pvresize /dev/sda2执行后再次检查pvdisplay,正常应显示:
PV VG Fmt Attr PSize PFree /dev/sda2 openeuler lvm2 a-- <255.00g 192.00g4. 逻辑卷层调整
卷组(VG)获得新空间后,需要分配到具体逻辑卷(LV)。通过以下命令查看当前分配:
lvdisplay -C --units g openeuler输出示例:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root openeuler -wi-ao---- 39.69g swap openeuler -wi-ao---- 3.93g home openeuler -wi-ao---- 19.38g扩容操作:
- 扩展根分区(70%空闲空间):
lvextend -l +70%FREE /dev/openeuler/root - 扩展home分区(剩余空间):
lvextend -l +100%FREE /dev/openeuler/home
扩展后验证:
root openeuler -wi-ao---- 174.09g swap openeuler -wi-ao---- 3.93g home openeuler -wi-ao---- 76.98g5. 文件系统层刷新
即使LV已扩展,文件系统仍可能保持原大小。这是最容易被忽略的一步。检查当前挂载点容量:
df -h / /home输出示例(未刷新时):
Filesystem Size Used Avail Use% Mounted on /dev/mapper/openeuler-root 40G 35G 3.2G 92% / /dev/mapper/openeuler-home 20G 456M 19G 3% /home扩展文件系统的关键命令:
- 对于ext4文件系统:
resize2fs /dev/openeuler/root resize2fs /dev/openeuler/home - 对于xfs文件系统:
xfs_growfs /
最终验证:
/dev/mapper/openeuler-root 172G 35G 130G 21% / /dev/mapper/openeuler-home 76G 456M 73G 1% /home6. 典型问题速查表
| 现象 | 检查命令 | 可能原因 | 解决方案 |
|---|---|---|---|
df显示未变化 | lsblk | LV未扩展 | 执行lvextend |
lvextend报错 | vgdisplay | VG空间不足 | 先执行pvresize |
| 文件系统未扩展 | lvdisplay | 未刷新文件系统 | 执行resize2fs |
| 磁盘大小未更新 | fdisk -l | 未识别新空间 | 扫描SCSI设备 |
7. 自动化扩容脚本
对于频繁操作的环境,可以创建自动化脚本(保存为/usr/local/bin/lvm_expand.sh):
#!/bin/bash PV=/dev/sda2 VG=openeuler ROOT_LV=/dev/mapper/openeuler-root HOME_LV=/dev/mapper/openeuler-home # 物理卷扩展 pvresize $PV # 逻辑卷扩展 lvextend -l +70%FREE $ROOT_LV lvextend -l +100%FREE $HOME_LV # 文件系统扩展 if grep -q ext4 /etc/fstab; then resize2fs $ROOT_LV resize2fs $HOME_LV else xfs_growfs / xfs_growfs /home fi echo "扩容完成!当前磁盘状态:" df -h / /home赋予执行权限:
chmod +x /usr/local/bin/lvm_expand.sh