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 没看到新增空间,后续执行 growpartpvresizelvextend 也可能无法继续。

二、常见原因

虚拟磁盘扩容后,容量变化首先发生在虚拟化平台层面。

但 Rocky Linux 内核并不一定会立刻感知到这块虚拟磁盘的新容量。尤其是在一些 SCSI、VirtIO、NVMe 虚拟磁盘场景中,需要手动触发磁盘重新扫描,或者重启虚拟机后才能识别。

所以整个扩容流程应该分成两步:

  1. 让系统识别磁盘新容量。
  2. 扩展分区、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

# 确认磁盘大小是否已经刷新
lsblk

2. 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 仍然没变化,建议按下面顺序检查:

  1. 确认虚拟化平台中扩容的是当前这台虚拟机。
  2. 确认扩容的是系统正在使用的那块磁盘,而不是新增或其他磁盘。
  3. 在虚拟化平台里确认扩容操作已经保存并生效。
  4. 重启 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

# 查看分区大小是否已经更新
lsblk

2. 扩展 LVM PV

# 让 LVM 识别 /dev/sda3 分区新增的空间
sudo pvresize /dev/sda3

# 查看卷组是否出现 Free 空间
sudo vgs

3. 扩展逻辑卷和文件系统

# 将卷组中的所有空闲空间扩展给根逻辑卷,并自动扩展文件系统
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 没变化,优先不要急着扩分区或扩文件系统。

正确思路是:

  1. 先确认虚拟化平台已经真正扩容磁盘。
  2. 在系统内重新扫描磁盘设备。
  3. lsblk 先看到新磁盘容量。
  4. 再扩分区、LVM 和文件系统。

一句话概括:lsblk 都没看到新容量时,先处理磁盘重新扫描;lsblk 看到新容量后,再处理系统内扩容。

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇: Rocky Linux 虚拟机磁盘扩容后 lsblk 没变化的排查与处理
下一篇:没有了
评论列表

发表评论

评论内容
昵称:
关联文章

Rocky Linux 虚拟磁盘扩容 lsblk 变化排查处理
Rocky Linux 磁盘扩容
CentOS 磁盘扩容
虚拟中飞牛FNOS硬盘扩容
LInux添加磁盘扩容
虚拟CPU内存分配建议
虚拟安装OpenWrt参考
PVE复制虚拟硬盘到另一个虚拟
PVE虚拟CPU类型先择
PVE虚拟删除local-lvm分区
虚拟安装IKuai参考
PVE 虚拟使用AX210蓝牙直通
Rocky Linux10 安装Docker环境
Rocky Nginx添加端口
【软件】磁盘映像管理 WinImage
WizTree —— Windows 下最快磁盘空间分析工具之一
《步步入门》 .NET 6 部署到Linux
TinyMCE 代码高亮 Prism.js 对 C# language-csharp 处理
记一次.Net Core程序启动失败排查过程
【.NET 树莓派】MPD Mini-API 封装

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码