Paused状态虚拟机无法在线扩容,必须先resume或shutdown;恢复后需依次执行SCSI重扫描、partprobe、pvresize,再扩展LV和文件系统。

Paused 状态的虚拟机不能在线扩容底层存储空间——这是硬性限制,不存在“紧急在线扩容”路径。暂停(Paused)本质是内存快照冻结 + CPU停摆,但块设备(如 /dev/sda)仍被 QEMU/KVM 持有锁定,内核无法重新扫描或重读分区表,echo "- - -" > /sys/class/scsi_host/host*/scan 会静默失败,fdisk、partprobe 均无法识别新空间。
必须先恢复运行或彻底关机,才能继续后续操作。
Paused 虚拟机必须先 resume 或 shutdown 才能扩容
-
Paused是运行时冻结态,不是关机态,磁盘文件(如.qcow2或.raw)虽可被宿主机扩大,但客户机内核看不到变化 - 尝试在
Paused下执行virsh blockresize会报错:operation failed: cannot resize device while domain is paused - 即使你用
qemu-img resize扩大了镜像文件,客户机里lsblk显示的仍是旧容量,因为 SCSI 层未触发 rescan,而Paused下无法触发
正确做法只有两条路:
-
virsh resume vm-name→ 等它完全跑起来 → 再执行在线 rescan + LVM 扩容流程 -
virsh shutdown vm-name(或destroy强制关机)→ 扩大镜像 → 启动后做分区/LVM/FS 扩展
不要试图绕过这一步——所有“跳过 resume 的技巧”最终都会卡在 pvresize 或 resize2fs 报 “device is busy” 或 “cannot find physical extent”。
宿主机上扩大镜像后,客户机内必须按顺序触发三层识别
客户机恢复运行后,必须严格按顺序让内核逐层感知新空间:
先让 SCSI 总线发现容量变更:
echo "- - -" > /sys/class/scsi_host/host0/scan
(若多 host,需遍历host0到host2;用ls /sys/class/scsi_host/确认)再通知内核重读分区表(仅当使用 MBR/GPT 分区,非整盘 PV):
partprobe /dev/sda
(注意:若/dev/sda2是 PV,只对/dev/sda扫描即可,不要对/dev/sda2跑partprobe)最后让 LVM 层吸收新增物理空间:
pvresize /dev/sda2
(输出应显示PFree增加;若无变化,说明前两步没生效)
缺任意一层,lvextend -l +100%FREE 都只会扩 0 字节。
XFS 和 ext4 的文件系统扩展命令不能混用,且依赖 LV 是否已扩展
-
xfs_growfs /mount-point:只接受挂载点路径(如/),不接受设备名;且要求对应 LV 已先扩大,否则报data size unchanged -
resize2fs /dev/mapper/vg-lv:接受设备名或挂载点;但若 LV 未扩展,它会拒绝操作并提示 “Please run e2fsck first”,实际是 LV 太小
常见错误现象:
-
xfs_growfs /返回data size unchanged→ 检查lvs输出,确认 LV 大小是否真变了 -
resize2fs卡住或报错 → 先运行e2fsck -f /dev/mapper/vg-lv(只读检查),再重试
二者都不需要卸载文件系统(XFS/ext4 均支持在线 grow),但前提是 LV 必须已扩展到位。
真正容易被忽略的是:Paused 不等于可维护态。它看起来“还活着”,实则锁死了所有设备 I/O 控制权。很多运维第一反应是“先扩镜像再强制唤醒”,结果在客户机里反复 lsblk 却始终看不到新空间——问题不在命令写错,而在状态没切对。务必把 virsh resume 或 virsh shutdown 当作扩容流程不可跳过的第零步。


















