Linux虚拟机添加新虚拟磁盘并在线热扩容是安全高效的方式,全程无需关机;需虚拟化平台支持SCSI热插拔、内核启用scsi_mod/sd_mod模块,并基于LVM管理根分区,通过pvcreate、vgextend、lvextend及xfs_growfs或resize2fs完成在线扩容。

Linux 虚拟机添加新虚拟磁盘并在线热扩容是安全、高效且推荐的操作方式,全程无需关机(即支持热插拔),前提是虚拟化平台(如 VMware Workstation/ESXi、VirtualBox、KVM)和 Guest 系统均支持 SCSI 热添加,且内核启用 scsi_mod 和 sd_mod 模块。关键在于:新增磁盘不改动原有分区结构,避免误操作风险;配合 LVM 可实现根分区动态扩容。
确认虚拟化平台支持热添加并挂载新磁盘
在虚拟机运行状态下,通过虚拟化管理界面为 Linux 虚拟机「添加新硬盘」(SCSI 类型优先,避免 IDE 不支持热插拔)。添加完成后,Linux 内核需自动识别新设备:
- 执行
lsblk或fdisk -l查看是否出现未分区的新盘(如/dev/sdb、/dev/sdc) - 若未识别,手动触发 SCSI 总线扫描:
echo "- - -" > /sys/class/scsi_host/host0/scan
(如 host1、host2 存在,需依次扫描;也可用rescan-scsi-bus.sh工具批量刷新) - 再次运行
lsblk,确认新设备已列出且无分区(如sdb显示为 50G disk,但无sdb1)
初始化新磁盘为物理卷(PV)并加入卷组(VG)
该步骤要求系统已使用 LVM 管理根分区(可通过 vgs 或 ls /dev/mapper/ 验证;常见 VG 名如 centos、ubuntu-vg、openeuler)。操作前建议备份 /etc/fstab 和 LVM 元数据(vgcfgbackup -f /root/vg_backup_$(date +%F).txt <vg_name>):
- 将新磁盘整盘设为物理卷(不需预先分区):
pvcreate /dev/sdb - 查看当前卷组名称与空闲容量:
vgs(关注VFree列,初始为 0) - 将新 PV 加入已有 VG:
vgextend centos /dev/sdb(把centos替换为你的 VG 名) - 执行
vgs确认VFree已增加对应容量(如 +49.99 GiB)
扩展逻辑卷(LV)并同步文件系统
目标通常是扩容根逻辑卷(如 /dev/centos/root 或 /dev/ubuntu-vg/root)。注意:文件系统类型决定后续命令——XFS 用 xfs_growfs,ext4 用 resize2fs;两者均支持在线扩容(无需 umount):
- 扩展 LV 容量(示例:加 40G):
lvextend -L+40G /dev/centos/root - 或直接用尽 VG 所有剩余空间:
lvextend -l +100%FREE /dev/centos/root - 检查当前挂载点及文件系统类型:
df -Th /(输出中第二列为ext4或xfs) - 同步文件系统(在线执行):
若为 XFS:xfs_growfs /(直接作用于挂载点)
若为 ext4:resize2fs /dev/centos/root(作用于设备路径)
验证扩容结果与持久性
执行后立即生效,无需重启:
- 运行
df -h /查看根分区容量是否增长 - 运行
lvs确认 LV 大小已更新 - 检查
/etc/fstab是否含该 LV 的挂载项(正常情况下无需修改,因原挂载配置未变) - (可选)测试写入:
dd if=/dev/zero of=/tmp/testfile bs=1M count=1000,确认无空间错误


















