Rocky Linux 虚拟机磁盘扩容后 lsblk 没变化的排查与处理
Rocky Linux 虚拟机磁盘扩容后 lsblk 没变化的排查与处理
在虚拟机中安装 Rocky Linux 后,经常会遇到这样一个场景:已经在 VMware、KVM、Proxmox、Hyper-V 或云平台控制台里把虚拟磁盘容量调大了,但进入系统执行 lsblk,看到的磁盘大小还是原来的容量。
这类问题通常不是文件系统扩容失败,而是更靠前的一步:Linux 系统还没有重新识别虚拟磁盘的新容量。
本文整理一套 Rocky Linux / RHEL 系统中常用的排查和处理方法。
一、问题现象
例如,虚拟化平台里已经把磁盘从 50G 扩容到 100G,但系统里执行:
lsblk仍然显示:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─rl-root 253:0 0 45G 0 lvm /
└─rl-swap 253:1 0 4G 0 lvm [SWAP]此时 lsblk 没看到新增空间,后续执行 growpart、pvresize、lvextend 也可能无法继续。
二、常见原因
虚拟磁盘扩容后,容量变化首先发生在虚拟化平台层面。
但 Rocky Linux 内核并不一定会立刻感知到这块虚拟磁盘的新容量。尤其是在一些 SCSI、VirtIO、NVMe 虚拟磁盘场景中,需要手动触发磁盘重新扫描,或者重启虚拟机后才能识别。
所以整个扩容流程应该分成两步:
- 让系统识别磁盘新容量。
- 扩展分区、LVM 和文件系统。
如果第一步没有完成,lsblk 自然不会有变化。
三、先确认当前磁盘结构
先查看当前磁盘、分区、文件系统和挂载点:
# 查看块设备、文件系统类型和挂载点,先确认根分区在哪块磁盘上
lsblk -f也可以查看文件系统类型和容量:
# 查看已挂载文件系统的类型和使用情况
df -Th常见磁盘名有:
/dev/sda:常见 SCSI/SATA 虚拟磁盘。/dev/vda:常见 VirtIO 虚拟磁盘。/dev/nvme0n1:常见 NVMe 虚拟磁盘。
后面的命令需要根据实际磁盘名替换。
四、重新扫描虚拟磁盘容量
1. SCSI / SATA 磁盘,例如 /dev/sda
如果你的磁盘是 /dev/sda,可以执行:
# 指定需要重新扫描的磁盘名,这里以 sda 为例
DISK=sda
# 通知内核重新读取该磁盘容量
echo 1 | sudo tee /sys/class/block/$DISK/device/rescan
# 再次查看磁盘容量是否变化
lsblk如果不确定具体是哪一个 SCSI Host,也可以扫描所有 SCSI 控制器:
# 扫描所有 SCSI Host,适合 VMware、KVM SCSI 等虚拟磁盘场景
for host in /sys/class/scsi_host/host*; do
echo "- - -" | sudo tee "$host/scan"
done
# 确认磁盘大小是否已经刷新
lsblk2. VirtIO 磁盘,例如 /dev/vda
VirtIO 磁盘有时也可以通过 block 设备 rescan 刷新:
# 指定 VirtIO 磁盘名,这里以 vda 为例
DISK=vda
# 触发该块设备重新扫描
echo 1 | sudo tee /sys/class/block/$DISK/device/rescan
# 查看容量是否更新
lsblk如果该路径不存在,或者执行后容量仍无变化,可以直接重启虚拟机。
3. NVMe 磁盘,例如 /dev/nvme0n1
如果磁盘是 NVMe 设备,可以尝试:
# 重新扫描 nvme0 控制器
echo 1 | sudo tee /sys/class/nvme/nvme0/rescan
# 查看 NVMe 磁盘容量是否变化
lsblk如果虚拟机里有多个 NVMe 控制器,需要根据实际设备名调整,例如 nvme1。
五、如果 lsblk 还是没变化
如果重新扫描后 lsblk 仍然没变化,建议按下面顺序检查:
- 确认虚拟化平台中扩容的是当前这台虚拟机。
- 确认扩容的是系统正在使用的那块磁盘,而不是新增或其他磁盘。
- 在虚拟化平台里确认扩容操作已经保存并生效。
- 重启 Rocky Linux 虚拟机后再次执行
lsblk。
如果重启后仍然没有变化,基本可以判断问题在虚拟化平台或云平台侧,系统内扩容命令暂时无法解决。
六、识别新容量后继续扩容
当 lsblk 已经能看到磁盘变大后,才进入分区和文件系统扩容步骤。
下面以 Rocky Linux 默认 LVM 场景为例,假设:
- 系统磁盘是
/dev/sda - 需要扩展的分区是
/dev/sda3 - 根逻辑卷是
/dev/mapper/rl-root
实际环境中请以 lsblk -f 输出为准。
1. 扩展分区
# 安装 growpart 所在工具包,如果系统中还没有 growpart
sudo dnf install -y cloud-utils-growpart
# 将 /dev/sda 的第 3 个分区扩展到磁盘末尾
sudo growpart /dev/sda 3
# 查看分区大小是否已经更新
lsblk2. 扩展 LVM PV
# 让 LVM 识别 /dev/sda3 分区新增的空间
sudo pvresize /dev/sda3
# 查看卷组是否出现 Free 空间
sudo vgs3. 扩展逻辑卷和文件系统
# 将卷组中的所有空闲空间扩展给根逻辑卷,并自动扩展文件系统
sudo lvextend -r -l +100%FREE /dev/mapper/rl-root
# 确认根目录容量是否已经变大
df -Th /lvextend -r 会自动根据文件系统类型调用合适的扩容工具。Rocky Linux 默认根文件系统常见为 XFS,这种方式比较省心。
七、非 LVM 场景
如果系统没有使用 LVM,而是普通分区直接挂载,例如 /dev/sda2 挂载到 /,流程会有所不同。
先扩展分区:
# 将 /dev/sda 的第 2 个分区扩展到磁盘末尾
sudo growpart /dev/sda 2如果是 XFS 文件系统:
# XFS 需要对挂载点执行扩容,这里根目录挂载点是 /
sudo xfs_growfs /如果是 ext4 文件系统:
# ext4 通常对块设备执行 resize2fs
sudo resize2fs /dev/sda2执行完成后检查:
# 确认文件系统容量是否已经扩大
df -Th八、推荐排查命令汇总
遇到 lsblk 没变化时,可以先收集下面几条信息:
# 查看块设备、文件系统和挂载点
lsblk -f
# 查看文件系统类型和容量
df -Th
# 查看分区表信息
sudo fdisk -l
# 查看 LVM 物理卷
sudo pvs
# 查看 LVM 卷组
sudo vgs
# 查看 LVM 逻辑卷
sudo lvs这些输出基本可以判断当前系统是普通分区、LVM、XFS 还是 ext4,也能判断下一步应该执行哪类扩容命令。
九、总结
Rocky Linux 虚拟机磁盘扩容后 lsblk 没变化,优先不要急着扩分区或扩文件系统。
正确思路是:
- 先确认虚拟化平台已经真正扩容磁盘。
- 在系统内重新扫描磁盘设备。
- 让
lsblk先看到新磁盘容量。 - 再扩分区、LVM 和文件系统。
一句话概括:lsblk 都没看到新容量时,先处理磁盘重新扫描;lsblk 看到新容量后,再处理系统内扩容。


