虚拟机的磁盘空间“填充”(扩容)完全不需要格式化,格式化反而会清空全部数据,正确做法是先扩容虚拟磁盘,再在系统内扩展分区和文件系统。
很多人在虚拟机磁盘空间不足时,第一反应是“加一块盘”或者“把原来的盘改大”,改大之后又担心系统不认,干脆格式化重来,这个思路绕了一大圈弯路,虚拟机磁盘本质上是一个文件,扩容这个文件的大小,和格式化没有任何关系,只要分区表没坏,数据就还在,要做的只是让系统把新增的空间“接”进原有分区。
虚拟机磁盘空间不足怎么办?直接扩容虚拟磁盘是首选
虚拟机磁盘空间不足,常见场景是C盘飘红、Linux根分区使用率接近100%、数据库文件写不进去,这时候解决思路只有两条:加新盘或者扩旧盘,加新盘需要重新挂载、迁移数据,操作繁琐;扩旧盘只需要两步,十几分钟就能完成。
扩容前的准备工作:
- 关闭虚拟机,或者在支持热扩容的虚拟化平台(如VMware ESXi、Proxmox VE、KVM)上保持开机状态操作
- 备份虚拟磁盘文件,至少拍一个快照,尤其是生产环境
- 确认虚拟磁盘格式,VDI(VirtualBox原生格式)、VMDK(VMware原生格式)、QCOW2(KVM/QEMU原生格式)都支持扩容
业内专家指出,“扩容虚拟磁盘”属于元数据级操作,只修改磁盘描述文件中的容量字段,不触碰任何扇区数据,因此风险极低,真正容易出事的环节,是后续分区工具用错了命令。
VMware和VirtualBox扩容操作路径不一样
主流的个人虚拟机软件,操作入口完全不同,用错工具,虚拟磁盘文件会损坏。
VMware Workstation 扩展磁盘步骤
- 关闭虚拟机,打开“虚拟机设置”
- 选择“硬盘”,点击右侧“扩展”
- 输入新的磁盘大小,例如原本60GB,扩展到120GB,直接填120
- 点击“扩展”,等待进度条走完
这个操作会直接修改VMDK描述文件,值得注意的是,VMware还提供“映射虚拟磁盘”功能,可以直接把虚拟磁盘映射为主机的一个分区来修改文件,但映射状态下扩容容易出问题,新手不建议尝试。
VirtualBox 只能改动态磁盘容量
VirtualBox的命令行工具VBoxManage负责扩容工作,GUI界面反而没有这个入口。
- 打开命令行(Windows用cmd或PowerShell,macOS/Linux用终端)
- 定位到VirtualBox安装目录和虚拟磁盘所在的文件夹
- 执行:
VBoxManage modifyhd 磁盘文件名.vdi --resize 102400 - 这里的102400是单位MB,也就是100GB,运行后终端会返回成功提示
VirtualBox对固定大小(Fixed Size)的VDI磁盘不支持在线扩容,必须先克隆转换为动态磁盘,再执行上述命令,如果你的VDI是固定大小,就先新建一个动态VDI,把系统克隆过去,再对克隆盘扩容。
KVM/QEMU 环境的命令行扩容
qemu-img resize 磁盘文件名.qcow2 +50G- 加号表示在原大小基础上增加50GB,直接写数字则代表目标总大小
- 扩容后需要进系统扩展分区,步骤与Linux服务器常规操作一致
虚拟机扩容磁盘后要格式化吗?取决于分区类型
扩容虚拟磁盘成功后,进入虚拟机操作系统,打开“磁盘管理”(Windows)或fdisk -l(Linux),你会看到磁盘显示为新容量,但现有分区仍然占用旧空间,剩余部分是灰色(未分配),这时候共用两种处理路径。
原分区是MBR或GPT,且后面有连续空闲空间
这正是最常见的情况,不需要格式化,在Windows里直接右键点击原分区,选择“扩展卷”,向导会自动把未分配空间并入原分区,文件原封不动,Linux里则要分两步走:先用fdisk删除旧分区并重建为更大的分区(注意起始扇区必须一致,千万不要格式化),再执行resize2fs(ext4文件系统)或xfs_growfs(XFS文件系统)完成文件系统扩容。
想用新增空间单独建一个盘
如果你不想改动原分区,而是想用新空间创建独立分区(比如专门放虚拟机、放日志),那么新分区需要格式化,这里的格式化只针对新创建的分区,原分区完全不受影响,Windows里右键未分配空间 → 新建简单卷 → 按向导分配盘符并格式化;Linux里用fdisk新建分区后用mkfs.ext4或mkfs.xfs格式化,再挂载。
原分区是LVM逻辑卷
Red Hat、CentOS、Ubuntu Server的默认安装盘使用LVM,扩容过程更简单:在vSphere或Proxmox里给虚拟磁盘扩容后,进入系统依次执行pvresize刷新物理卷,lvextend -l +100%FREE扩展逻辑卷,最后resize2fs或xfs_growfs扩展文件系统,全程不需要格式化,行业共识认为,LVM在动态扩容场景下比传统分区方式至少省一半操作步骤。
扩展分区时要避开的三个坑
操作磁盘分区没有后悔药,出错就是数据丢失,以下三个坑踩中任何一个都可能前功尽弃。
坑一:对整块磁盘执行了格式化
一些人看到windows磁盘管理工具里有“格式化”按钮,顺手就点了。格式化整块磁盘会清空所有分区和数据,这属于不可逆操作,最基础的执行标准是:只在新出现的未分配区域上创建分区,原分区不要碰。
坑二:Linux fdisk命令起始扇区不一致
fdisk删除旧分区重新创建时,默认会让新分区的起始扇区自动对齐到2048,能保证布局完全一致,但部分版本的fdisk会由于扇区对齐逻辑导致起始扇区变化,进而造成分区表损坏,Linux命令行操作不会弹出“确定要删除吗”的确认框,输入d回车就会删除分区,再输入w保存才会生效。写w之前用p检查分区表,和原来完全一致再保存。
坑三:文件系统类型判断错误
扩容失败最常见的原因就是把XFS当成ext4,执行了resize2fs,然后报错退出,先运行df -Th查看文件系统类型,ext4和xfs的扩容命令不能互换,一个是resize2fs,一个是xfs_growfs,XFS文件系统不支持缩小,只能扩大,扩之前就要想清楚。
Windows和Linux系统实际操作步骤对照
| 操作系统 | 查看空间工具 | 扩展分区命令/工具 | 是否格式化 |
|---|---|---|---|
| Windows 10/11/Server | 磁盘管理(diskmgmt.msc) | 磁盘管理→扩展卷 / Diskpart→extend | 否 |
| Ubuntu/Debian(ext4) | fdisk -l / lsblk | fdisk重划分区 → resize2fs /dev/sda1 | 否 |
| CentOS/RHEL(XFS) | df -h / lsblk | parted重划分区 → xfs_growfs /挂载点 | 否 |
| 全部系统(LVM) | vgdisplay / lvdisplay | pvresize → lvextend → resize2fs/xfs_growfs | 否 |
Windows 图形化操作详解
- 按
Win+X选择“磁盘管理” - 找到扩容的磁盘,确认未分配空间紧跟在目标分区右侧
- 右键目标分区 → “扩展卷”
- 默认选中全部空间,点击下一步完成
这个操作理论上会在几秒内完成,因为扩展卷本质上只是修改分区表项中的分区长度字段,不会触发全盘数据迁移。
Linux 命令行操作全流程(以Ubuntu 22.04为例)
# 查看磁盘 lsblk # 进入fdisk操作界面 sudo fdisk /dev/sda # 按p查看分区表,记录原分区的起始扇区 # 按d删除分区(输入分区号) # 按n新建分区(选择Primary,起始扇区填原来的数值,结束扇区默认) # 按t设置分区类型,保持原来的Linux filesystem(00)不变 # 按w保存退出 # 重启后扩展文件系统 sudo resize2fs /dev/sda1
新建分区时fdisk会提示“Do you want to remove the signature”,这里无论如何都要选择N,选Y会在该分区上擦除原文件系统元数据并触发格式化,等于白干一场。
填充和扩容是两回事,预留空间更稳妥
“填充磁盘空间”这个说法在实际使用里有两种语境,一种是上面讨论的“扩容”,另一种是“把磁盘占满”的满盘测试场景,比如测试故障转移行为、验证监控告警,如果目的是后者,直接用dd命令写空文件即可:dd if=/dev/zero of=/tmp/testfile bs=1M count=5000,写完后测试完删除。千万别拿扩容和填充混为一谈,满盘状态会导致虚拟机IO阻塞、系统日志报错、快照无法创建,测试完成务必立刻释放空间。
虚拟机扩容磁盘的常见疑问与解答
扩容后虚拟机无法启动,怎么办?
优先检查虚拟磁盘文件是否有快照,存在快照时,vmdk或vdi文件的扩容会与快照链产生冲突,VMware要求先删除全部快照再扩容,VirtualBox同样如此,如果快照已经存在且扩容已完成、虚拟机无法开机,删除多余快照后重新启动;若仍然失败,用原磁盘文件重新克隆一台新虚拟机,挂载故障盘的磁盘文件找回数据。
扩容后原数据会丢失吗?
只要不执行格式化、不删除分区,容量变化不会触碰数据区域,虚拟磁盘文件头的大小字段从60GB改成120GB,原60GB的数据块仍然原样保留,扩容后首次进入系统,原分区只是“不知道”自己变大了,通过扩展卷或resize操作告诉它之后,新空间即可使用,原有文件全部保留,据多位长期运维虚拟化环境的工程师反馈,绝大多数扩容事故源于分区表操作失误,而不是扩容本身。
为什么扩展卷选项是灰色不可选?
最常见原因是未分配空间与目标分区之间隔着恢复分区或EFI系统分区,Windows磁盘管理中的扩展卷要求空闲空间紧邻目标分区右侧,中间隔了任何分区都无法合并,解决方法是把中间分区删除(需要先备份其中的启动文件),或者改用Diskpart的extend命令(同样要求空间连续),也可以使用第三方分区工具将中间分区移动到磁盘尾部,若不想移动分区,只能把未分配空间建成独立分区使用。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/639453.html





