ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

VMware虚拟机磁盘扩容实战:从vmdk扩展到系统分区完整指南

VMware虚拟机磁盘扩容实战:从vmdk扩展到系统分区完整指南 1. 先别急着扩把磁盘形态和现状弄清楚虚拟机这东西用的时候确实顺手但跑个一年半载就慢慢出毛病了。最典型的一个问题就是Windows 客户机的 C 盘在系统更新、软件安装、日志堆积的轮番轰炸下不知不觉就飘红了。你打开虚拟机一看C 盘满得像塞了铅块桌面图标都加载不利索想清理又不知道从哪儿下手——这时候很多人第一反应是“重新装个系统”或者“干脆加一块新磁盘”但如果你只是想给 C 盘本身扩容完全不用推倒重来VMware 本身就支持在原有 vmdk 虚拟磁盘上“原地扩”容量系统、软件、数据都不会丢。在动手之前有件事我必须先说清楚很多人把 VMware 里的“扩展磁盘容量”和“扩展 C 盘分区”混为一谈结果在 VMware 界面点了扩展进虚拟机一看 C 盘还是老样子就开始怀疑人生。实际上 VMware 的扩展操作只是改变了虚拟磁盘文件的最大上限等于你从物理上给一块硬盘“加长”了但加出来的部分是一块未分配空间操作系统里的 C 盘分区还必须再走一步“分区扩容”才能真正吃到这些空间。这篇文章要做的就是把这个完整链路讲透从 VMware 虚拟磁盘扩展到 Windows 客户机里的“磁盘管理 / 分区工具”操作再到 Linux 客户机下的 LVM 扩容最后附上我这些年踩过的坑和排查思路。适用场景很明确VMware Workstation 里的 Windows 虚拟机win7/10/11 均可以及 Debian、Ubuntu、CentOS 这类 Linux 虚拟机如果你是 VirtualBox 或者 Hyper-V 用户思路一样只是界面和命令叫法略有不同原理可以通用。先说一个最容易忽略的准备工作确认你的虚拟磁盘是什么形态。别小看这一步它直接决定你后续扩容会不会踩雷。1.1 虚拟磁盘的两种形态厚置备和精简置备VMware 创建虚拟机的时候硬盘类型通常有两种常见选择“厚置备”和“精简置备”。很多新手创建虚拟机时根本没注意过这个选项因为 VMware 默认可能已经帮你选好了。厚置备Thick Provision创建磁盘时一次性把 vmdk 文件占满。比如你设置 60GB那宿主机上马上就有一个接近 60GB 的文件存在。优点是性能好磁盘空间稳定缺点就是前期占用大。精简置备Thin Provisionvmdk 文件随着虚拟机内部数据增长而增长初始可能只有几 GB。优点是节省宿主机空间缺点是当虚拟机内部删除大量文件时这个 vmdk 文件并不会自动缩回去越用越大扩展时宿主机的可用空间也必须足够否则虚拟机磁盘就会“纸面扩容实际报错”。判断自己虚拟磁盘是哪种形态很简单打开虚拟机的“编辑虚拟机设置”选中“硬盘”点“高级”或者直接去虚拟机目录下看.vmdk文件的体积和描述信息。如果你看到的是一个文件明显小于设置容量那你基本就是精简置备如果文件和设置容量差不多大那就是厚置备。1.2 宿主机剩余空间和目标容量怎么定这是很多人踩的最大的坑宿主机磁盘明明已经快满了他还硬要给虚拟机扩 50GB结果 VMware 界面提示“目标磁盘容量超出宿主机可用空间”操作直接失败。所以在虚拟机里面动手扩之前第一件事是看宿主机剩余空间。以 Windows 宿主机为例打开“此电脑”看看你存放虚拟机目录的那个盘符剩余多少空间。如果虚拟机是精简置备那宿主机需要的额外空间 你给虚拟机增加的容量大小因为 vmdk 会涨上去。比如虚拟机从 60GB 扩到 100GB那宿主机至少还要有 40GB 以上空闲空间更保险一点我会建议留 1.2 倍也就是 50GB 左右。然后确定目标容量这里我给你一个经验公式先看 C 盘当前已用空间再按 1.5 到 2 倍来定。例如虚拟机 C 盘现在用了 35GB那我建议至少扩到 70GB留出一倍余量给未来的系统更新、休眠文件、页面文件、软件缓存。别贪大因为虚拟磁盘一旦扩上去就算虚拟机内部只用了很小一部分宿主机也会被占用不少磁盘尤其是厚置备磁盘所以目标容量务必要结合宿主机的空闲磁盘一起规划。1.3 有快照的话先处理快照再扩容这是文档里非常少提、但实操中一定会遇到的一个鬼问题如果虚拟机当前挂着快照VMware 的“扩展磁盘”按钮经常是灰色的或者扩展后快照会变成垃圾。因为快照的本质是保留虚拟磁盘在某一个时间点的状态这个时间点的 vmdk 大小是固定的你在它上面扩展逻辑会出现混乱。我自己的处理原则是扩展前先检查“虚拟机 - 快照管理器”如果有不需要的快照就果断删除把快照合并到主磁盘文件里如果某些快照确实还要保留那我建议先把这台虚拟机完整克隆一份或者老老实实推迟扩容别拿重要数据和快照开玩笑。删除快照之前最好确认虚拟机里当前状态是自己满意的因为删除快照会把虚拟机还原到快照点之后的状态合并如果你在这个快照之后做的修改比较多合并时要确保磁盘空间够大否则会提示“无法完成磁盘扩展”。完成这一步之后我们才真正进入“扩容”动作。2. 在 VMware 里先给虚拟磁盘“加厚”这个阶段做的事情非常纯粹让虚拟机的“物理硬盘”变大。操作过程里只会改变.vmdk文件的大小上限和实际占用不会动到虚拟机内部的任何数据所以危险度其实很低唯一要注意的是虚拟机必须处于“关机”状态不能是“挂起”状态更不能是“运行中”。2.1 图形界面扩展5 分钟内搞定在 VMware Workstation 中操作步骤大概是这样的先把虚拟机彻底关机。选中虚拟机的标签页点击菜单栏的“虚拟机 - 设置”或者直接按组合键Ctrl D。在弹出的“虚拟机设置”窗口里点击左侧的“硬盘IDE/SATA/NVMe”。点击右侧的“扩展”按钮。注意我说的是“扩展”不是“添加”别手滑点到添加硬盘去了。在弹出的对话框里输入“最大磁盘大小”。比如原来 60GB你输入 100单位是 GB。点击“扩展”等待进度条走完。这一步执行完你会发现 VMware 界面里虚拟机的磁盘显示为 100GB但你在虚拟机内打开“此电脑”看 C 盘依然是原来的大小。这是正常的别慌分区层面的扩容是下一步的事。有几个细节要提醒你第一VMware 的“扩展”不区分 SATA 还是 NVMe只要客户机系统支持磁盘热扩容理论上都能操作但仍强烈建议关机操作因为有些老系统热扩展后磁盘管理会出现延迟识别。第二如果你用的是 VMware Workstation Player 免费版部分设置选项可能被隐藏这时候建议用命令行方式或者干脆用试用版 Workstation Pro 完成操作然后把虚拟机重新指定到 Player 用vmdk 不会因此损坏。2.2 命令行方式vmware-vdiskmanager 扩展有些场景下图形界面的“扩展”按钮就是灰的或者你想批量处理就可以用 VMware 自带的命令行工具vmware-vdiskmanager.exe。这个工具在 VMware Workstation 安装目录下通常是C:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe打开管理员模式的命令提示符进入虚拟机目录然后执行C:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe -x 100GB D:\VM\Win10\Win10.vmdk这里的-x参数就是 expand后面跟目标大小和 vmdk 路径。执行前同样要求虚拟机彻底关机并且确认目标路径没有被其他程序占用。如果你看到的 vmdk 是有拆分后缀的比如Win10-s001.vmdk、Win10-s002.vmdk那没关系命令里的主文件路径依然写主Win10.vmdk工具会自动处理拆分文件。这个命令行工具平时很少用到但在脚本化和批量场景下很实用。比如我有一次帮客户处理十几台虚拟机就是写了个循环把目标大小写进配置文件里一次性批量扩展完比在图形界面一台一台点快得多。2.3 扩展之后别急着进系统很多朋友在 VMware 界面扩容完看到“扩展成功”就直接点了虚拟机的开机按钮结果进去之后发现一切照旧还以为操作失败了。我再强调一遍VMware 层面扩的只是 vmdk 的最大容量虚拟机内部的分区和文件系统根本不知道这回事。所以 Windows 客户机开机后你要打开“磁盘管理”才能看到磁盘尾部多出了一段绿色的“未分配”空间Linux 客户机则是lsblk能看到磁盘总大小变了但根分区还是老大小。到了这一步我们可以说扩容工作完成了一半。接下来的所有操作都在客户机系统内完成这也是最容易出幺蛾子的环节。3. 到虚拟机里把多出来的空间分给 C 盘这是整个扩容流程的核心把 VMware 给出来的“未分配空间”变成 C 盘的一部分。很多人就是在这步卡住了主要原因是 Windows 自带的“扩展卷”有时是灰色的这时你就需要换个思路去处理。3.1 Windows 客户机磁盘管理里的“扩展卷”在 Windows 虚拟机里最简单的情况是你关机在 VMware 里扩展后重新开机然后右键点“开始”菜单选择“磁盘管理”或者按Win R输入diskmgmt.msc回车。你会看到磁盘 0 或者磁盘 1 的图标右侧多了一块黑色的“未分配”区域。如果这块“未分配”区域恰好紧挨在 C 盘右边那么恭喜你可以一步到位右键点击 C 盘。选择“扩展卷”。按向导走把右边未分配的空间全部加进去。完成。这个操作非常快不需要重启几秒钟 C 盘就变大了数据完全保留。但有个前提C 盘和未分配空间必须“相邻”中间不能隔着恢复分区、EFI 分区或者其他什么。如果你在磁盘管理里看到 C 盘右边还有 500MB 左右的“恢复分区”或者一个几百兆的“ EFI 系统分区”那“扩展卷”大概率是灰色点不了的。关于这个恢复分区我要单独拿出来说一下很多电脑厂商预装的 Windows或者你自己后续通过某些工具安装的系统都会在 C 盘右侧生成一个恢复分区。这个分区平时根本没用但它杵在那儿恰恰挡住了 C 盘扩展的路。处理办法有两个要么你用第三方分区工具把恢复分区往后挪有风险要么干脆在确保系统正常的情况下用磁盘管理把这个恢复分区删除释放出空间然后 C 盘扩展卷就能用了。我一般会先看这个恢复分区里有没有真的存了恢复镜像如果这台虚拟机只是日常办公开发用不需要系统恢复功能删掉它问题不大但如果需要恢复功能建议用 DiskGenius 之类的工具把整个分区结构整体后移不过那个操作我建议备份重要文件后再执行。3.2 “扩展卷”灰色时的替代方案DiskGenius / 傲梅分区助手如果你的 C 盘右侧不仅有系统分区挡路或者干脆你是 MBR 老磁盘结构、C 盘后面全是杂物Windows 自带工具就完全不够用了。这时候就得请出分区工具。我自己用得最多的两个DiskGenius 和傲梅分区助手。DiskGenius 的操作思路是这样打开 DiskGenius找到你的 C 盘。右键 C 盘选择“调整分区大小”。在弹出的窗口里把分区大小拖到目标值或者直接把“分区大小”的数字改大。点击“开始”软件会提示你“本操作需要重启电脑并在 PE 模式下执行”确认重启执行即可。重启后 DiskGenius 会进入一个专属的预执行环境帮你把分区后移、扩展、整条链路一次做完整个过程大约几分钟到十几分钟不等。傲梅分区助手叫法是“扩展分区向导”步骤类似选中 C 盘 - 左侧选择“扩展分区向导” - 设置要扩展的空间大小 - 选择从哪个盘拿空间 - 提交并执行。傲梅的好处是中文界面非常友好操作前会有明确的提示对新手尤其友好。这一类第三方工具的共同点执行分区操作时都会有一个“提交”或“执行”的确认环节千万不要点完就直接关机或者强制重启一定要等它把整个“移动分区”的任务跑完。我见过不少翻车案例全是断电、蓝屏、半路手动取消造成的。使用第三方工具时有一个注意事项如果你在虚拟机里用 DiskGenius 调整分区发现目标磁盘上既有 Windows 系统分区又有恢复分区那调整的时候尽量选择“整个硬盘尾部空间扩展到 C 盘”这种方式而不是把恢复分区删除后再扩展因为工具会自己处理分区间的位置移动减少出错概率。3.3 Linux 客户机扩容LVM 和非 LVM 两套打法如果你虚拟机里装的是 Ubuntu、CentOS、Debian 这类 Linux 系统那扩容的姿势和 Windows 完全不一样。Linux 系统通常是多分区 LVM 的结构不同发行版、不同安装方式会决定你要走哪条路。先跑一个命令看清结构lsblk df -h如果lsblk输出里能看到sda1、sda2这种普通分区而且df -h里根分区就是/dev/sda1或者/dev/sda2那这是非 LVM的简单结构。这种情况下VMware 扩展完磁盘后你在虚拟机里执行sudo growpart /dev/sda 1 sudo resize2fs /dev/sda1第一行是把分区表里 sda1 这个分区扩展到整块磁盘末端第二行是把 ext4 文件系统扩展到整个分区。注意growpart后面的数字是分区号如果你根分区是 sda2那就是growpart /dev/sda 2。如果你用的文件系统是 XFSRHEL/CentOS 常见第二步要换成sudo xfs_growfs /XFS 不支持缩容但扩容只能在线做这个命令也是在线执行的。如果是 LVM 结构那就多几个步骤。先看逻辑卷路径df -h lsblk sudo pvdisplay通常你会看到一个 Physical VolumePV比如/dev/sda2一个 Volume GroupVG比如centos或ubuntu-vg一个或多个 Logical VolumeLV比如/dev/mapper/centos-root。在 VMware 扩展完 vmdk 后你要按顺序执行sudo growpart /dev/sda 2 sudo pvresize /dev/sda2 sudo lvextend -l 100%FREE /dev/mapper/ubuntu-vg-ubuntu-lv sudo resize2fs /dev/mapper/ubuntu-vg-ubuntu-lv第一步growpart扩展分区表第二步pvresize让 PV 识别新空间第三步把 VG 里所有空闲空间全部给根 LV第四步扩展文件系统。如果你跑的是 CentOS/RHEL 且根文件系统是 XFS第四步用sudo xfs_growfs /。这里有一个特别容易混淆的点很多人只执行lvextend忘了pvresize结果 lvextend 的时候发现 VG 根本没有可用空间。所以整个链路里pvresize是承上启下的关键步骤一定不能跳。4. 扩容踩坑实录与排查技巧扩容这个事看着简单但我在论坛和实际工作中见过太多次翻车大部分不是扩容本身的问题而是“前因后果”没搞清楚。我把这几类高频问题列成了一张表后面再逐个细说。现象常见原因解决方向VMware 扩展按钮灰色虚拟机未关机 / 有快照 / 非持久磁盘关机、删除快照、克隆后操作Windows 扩展卷灰色未分配空间不连续或有恢复分区挡路用第三方分区工具处理扩展后 C 盘大小没变化只扩了 vmdk没扩分区进入客户机执行分区扩容扩展时提示宿主机空间不足宿主机磁盘剩余空间不够先清理宿主机或换路径扩展后系统启动失败分区表损坏 / 引导记录被波及恢复快照或备份重新执行精简置备 vmdk 比目标还大原因是大文件残留用工具收缩 VM可选4.1 扩展按钮为什么是灰的这个问题我见过不下十次。如果你发现 VMware 界面里“扩展”按钮是灰的先别急着怀疑软件有问题按照下面顺序排查虚拟机是否处于“已挂起”状态挂起和运行都不行必须完全关机。虚拟机是否挂载了快照挂快照状态下扩展功能会被关闭或受限制。虚拟磁盘是否设置为“独立”模式在“虚拟机设置 - 硬盘 - 高级”里如果勾选了“独立”尤其是“非持久”模式扩展操作也会不可用。这种情况下你可以去掉“独立”勾选再试。如果以上都不是可能是 vmdk 文件被其他程序锁定了比如你正在用 DiskGenius 或者其他工具读它关掉相关软件再试。如果实在没法通过界面扩展还有一个思路新建一台临时虚拟机把这块 vmdk 挂上去然后用vmware-vdiskmanager命令扩展成功之后再挂回原虚拟机。这个骚操作在我这儿成功解决过几个棘手的“灰色按钮”案例。4.2 扩展之后进不了系统怎么救理论上扩容是安全的但任何涉及分区表的操作都有翻车概率尤其是你用了第三方分区工具并且中途断电、蓝屏、强杀进程。如果重启后虚拟机黑屏或者提示Boot device not found我救的优先级一般是先用 VMware 的“快照管理器”回滚到操作前的快照。这也是为什么我反复强调扩容前如果有重要数据一定先打个快照或者完整克隆。如果没有快照那就把 vmdk 挂到另一台正常的虚拟机上把里面数据全部备份出来再用 Windows 安装盘或者 PE 修复引导。这里的关键是千万不要在没备份的情况下反复折腾一个已经启动不了的 vmdk每一次挂载尝试都可能让数据雪上加霜。另外一个容易忽略的点如果你虚拟机是 UEFI 引导 GPT 分区那么做分区调整时第三方工具必须能处理 GPT 分区表如果工具版本太老可能把 ESP 分区搞坏。所以操作之前第一确认工具版本第二多吃备点数据第三尽量在 PE 环境而不是 Windows 系统内执行大型分区调整。4.3 精简置备磁盘把宿主机撑爆了扩展完虚拟磁盘之后虚拟机内部如果大量写入数据精简置备的 vmdk 会一路长大。很多人以为“虚拟磁盘显示 100GB宿主机只用实际使用的那部分”这没问题但问题是——宿主机自身的剩余空间是有限的。你如果一开始没给宿主机留够冗余就可能出现虚拟机内正常使用宿主机磁盘报警甚至 VMware 直接提示暂停 I/O。我的实操建议是扩展前记录宿主机磁盘剩余空间扩展完后定期查看虚拟机目录下的 vmdk 实际大小。如果你发现这个文件在涨而宿主机磁盘又吃紧可以考虑清理虚拟机内的临时文件或者给 vmdk 做一次“收缩”。VMware 的收缩功能在“虚拟机设置 - 硬盘 - 碎片整理/收缩”但这个操作前提是虚拟机内装了 VMware Tools 并且磁盘类型支持收缩。注意收缩和扩容不冲突一个管“瘦身”一个管“撑大”。如果确实想把 vmdk “瘦”回一个更紧凑的形态最稳妥的是用vmware-vdiskmanager -r做一个克隆压缩或者用“克隆虚拟机”功能克隆一份新副本新 vmdk 只会包含实际使用过的数据块然后再用新副本替换旧磁盘。不过这个替换过程要小心确认新虚拟机能正常启动后再删旧文件别把老底子一次性清掉。4.4 备份是最大的保险我把这个放最后说是因为它其实是最高优先级的。扩容虽然常规操作但每一次涉及分区表修改都等于在钢丝上走路。我在给客户的虚拟机扩容时标准流程一定是先打快照如果允许没有快照就完整克隆一份放一边然后再动手。这样做的好处是不管你在 VMware 层面还是在系统层面操作失败都能在一分钟之内回到操作之前的状态而不是花几个小时找恢复工具。如果你用的是第三方分区工具它也通常会在执行前创建一个“分区备份”或者“撤销文件”比如 DiskGenius 会生成.ptf文件。这个文件别删万一扩容后系统异常可以通过“从备份文件恢复分区表”找回原来的分区结构。5. 扩容之外的链路顺手把 C 盘瘦身一遍给 C 盘扩完容不代表你可以一劳永逸。如果不清掉虚拟机里那些“吃空间大户”下一次飘红只是时间问题。这里我分享几个在 Windows 虚拟机里特别奏效的清理手段配合扩容一起做能让空间状态健康很多。5.1 Windows 自带清理工具的正确姿势Windows 系统自带的“磁盘清理”不只是删几个临时文件那么简单。右键 C 盘 - 属性 - 磁盘清理进入后会扫出一堆可清理项。先把所有勾选框都勾上然后点“清理系统文件”这一步很关键只有点了它系统才会把 Windows 更新备份、旧的系统镜像、升级日志这些以管理员身份才能删的大文件列出来。之后按Win R输入cleanmgr再回车还能看到更完整的清理选项。对于 Windows 10/11Storage Sense存储感知建议直接开启设成“每周自动运行”或者“每个磁盘空间不足时自动运行”。虚拟机的系统盘空间管理不应该靠手动救火应该靠自动化和预警把一切能自动的都打开。想更激进一点还可以用 DISM 命令清理 WinSxS 组件存储这个命令能清掉旧版系统组件里面的垃圾文件有时候能腾出好几个 GBDism /Online /Cleanup-Image /StartComponentCleanup注意这个命令只清理组件存储不删用户数据可以大胆执行。5.2 值得手动处理的几个“吃空间大户”第一个是休眠文件hiberfil.sys。如果虚拟机里你压根不用睡眠和休眠功能这东西白占的空间相当于内存大小。可以在管理员命令行里执行powercfg /h off关掉休眠释放整个休眠文件。第二个是虚拟内存页面文件pagefile.sys如果内存充足可以把 C 盘的页面文件设为“自定义大小”或者直接移动到 D 盘如果有的话。第三个是C:\Windows\Temp和C:\Users\你的用户名\AppData\Local\Temp这两个目录里的文件基本都可以删但我会让你尽量用磁盘清理而不是手动删避免误删还在使用的文件。还有一类被很多人忽略的虚拟机的 vmdk “只增不减”问题。你在虚拟机里删了一堆大文件vmdk 并不会自动收缩宿主机依然占用原来的空间。所以如果你在虚拟机里清出了几十 GB但宿主机磁盘没见多出空间不要奇怪这是精简置备的正常表现。要想真正把 vmdk 瘦回去最好用“克隆”或者“收缩”的方式处理这部分前面已经讲过这里不再重复。我个人习惯是每隔两三个月给虚拟机的 vmdk 做一次瘦身目标不是追求文件最小而是让宿主机保持足够的冗余空间这样就算哪天虚拟机需要用突然增长也不至于把宿主机磁盘逼到绝路。虚拟化环境下最怕的不是单台虚拟机满了而是宿主机盘被拖死整个集群跟着遭殃。所以扩容不光是解决 C 盘红变蓝更是一次宿主机容量规划的提醒。说真的虚拟机 C 盘扩容这件事最怕的不是操作复杂而是“知道得太晚”。很多人都是等到 C 盘红到只剩几百 MB系统卡到鼠标都飘了才想起来处理。那时候你系统更新装不上、软件缓存写不进、临时表空间不足整个虚拟机的可用性大打折扣。与其等出问题不如趁现在还有余量提前检查一遍虚拟机的磁盘形态和宿主机空间该扩就扩该清就清该备份就备份这套流程你熟练之后一台虚拟机从头到尾弄下来也就半小时的事省下的是后面一大堆麻烦。
返回列表