在VMware Workstation中使用vmrun命令,在VirtualBox中使用VBoxManage snapshot命令,或者直接通过图形界面的快照功能一键完成。所谓"拍照",在虚拟化领域中的标准术语是快照(Snapshot),它记录的是虚拟机在某一时刻的磁盘状态和内存状态,用于后续的快速回滚,下面我直接带你走一遍命令和界面操作两条路。
虚拟机拍照命令是什么?先分清两个主流平台
很多朋友在搜索"虚拟机拍照命令"时,其实并不清楚自己用的是哪个虚拟化软件,行业共识认为,市面个人电脑上使用率最高的就是VMware Workstation和Oracle VM VirtualBox这两款,它们的拍照命令完全不同,记混了会直接报错。
VMware Workstation的拍照命令:vmrun
VMware自带的命令行工具vmrun藏在安装目录里,默认路径是C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe,使用前需要先把该目录加入系统环境变量PATH,或者直接在CMD中切换到该目录执行。
创建快照的命令格式如下:
vmrun snapshot "虚拟机文件路径.vmx" 快照名称
举个例子,你要给位于D:\VMs\Ubuntu\Ubuntu.vmx的虚拟机拍一张名为"干净系统"的快照,就执行:
vmrun snapshot "D:\VMs\Ubuntu\Ubuntu.vmx" 干净系统
这里有个细节极易踩坑:虚拟机必须处于关闭或挂起状态,否则命令会提示无法创建快照,虚拟机文件路径必须用英文引号包住,路径中不能有空格的话可以省略。
VirtualBox的拍照命令:VBoxManage
VirtualBox的命令行工具叫VBoxManage,在安装目录的Oracle\VirtualBox文件夹下,它的快照命令层级更清晰,分两步走。
第一步,列出当前虚拟机名称,确保拼写准确:
VBoxManage list vms
第二步,执行拍照,命令格式:
VBoxManage snapshot "虚拟机名称" take "快照名称"
比如给名为"CentOS7"的虚拟机拍一张"初始化完成"的快照:
VBoxManage snapshot "CentOS7" take "初始化完成"
虚拟机里执行拍照操作的图形界面流程
命令虽快,但多数新手更习惯用鼠标点。不用记命令也能完成拍照,下面是两个平台的完整点击路径。
VMware Workstation图形界面操作步骤
- 打开VMware Workstation,在左侧库中选中目标虚拟机。
- 确保虚拟机处于关闭或挂起状态(右键虚拟机标签,点击"电源"→"挂起客户机"即可)。
- 点击顶部菜单栏的"虚拟机",在下拉菜单中选择"快照"→"拍摄快照"。
- 在弹出的对话框中填写快照名称和备注,安装完Python环境之后"。
- 点击"拍摄快照"按钮,等待右下角进度条跑完。
之后想恢复,点击"虚拟机"→"快照"→"快照管理器",选中任意快照点"转到"即可。
VirtualBox图形界面操作步骤
- 打开VirtualBox主界面,选中虚拟机,点击工具栏的"备份"按钮(形状是一个蓝色文件夹带箭头)。
- 在"备份"窗口中点击"生成备份"图标(铅笔加纸张的图标)。
- 输入快照名称,系统更新前",勾选"包含系统内存状态"可以保存当前运行中的应用现场。
- 点击"确定",右侧列表会出现该快照,双击后点击"恢复备份"即可回滚。
虚拟机连续拍照命令怎么执行?批量自动化实战
如果你做测试环境,需要每小时自动拍一张快照,连续拍照命令就派上用场了。连续拍照的本质是循环执行快照命令,Windows下用批处理,Linux下用Shell脚本。
Windows批处理实现定时连续快照(VirtualBox示例)
写一个auto_snapshot.bat文件:
@echo off for /f "tokens=1-3 delims=/ " %%a in ('date /t') do set today=%%a%%b%%c VBoxManage snapshot "WebServer" take "auto_%today%_%time:~0,2%"
配合Windows任务计划程序,设置为每2小时执行一次,就能实现无人值守的连续快照,注意%time:~0,2%取的小时数在上午会带空格,建议改用%time:~0,2%前先set hour=%time:~0,2%并替换空格。
Linux Shell脚本实现定时快照(VMware示例)
在装有vmrun的Linux宿主机上,编辑snapshot_cron.sh:
#!/bin/bash
STAMP=$(date +%Y%m%d_%H%M)
vmrun snapshot "/vm/ubuntu.vmx" "cron_$STAMP"
加入crontab:
0 /4 /opt/scripts/snapshot_cron.sh
快照数量太多怎么办?删除与整理命令
快照不会无限占用空间,但数量多了会影响虚拟机性能,因为VMware和VirtualBox的快照采用链式存储,读取时需要回溯多个层。
VMware删除快照命令
vmrun deleteSnapshot "虚拟机文件路径.vmx" 快照名称
VirtualBox删除快照命令
VBoxManage snapshot "虚拟机名称" delete "快照名称"
拍照失败常见原因排查
很多人在执行虚拟机拍照命令时收到错误提示,大概率是下面几种情况。
- 虚拟机正在运行且未启用内存快照:部分配置下,VMware不支持对运行中虚拟机拍摄内存快照,请先挂起或关机。
- 磁盘空间不足:快照会占用宿主机磁盘空间,建议预留至少虚拟机磁盘文件大小20%的剩余空间。
- 路径包含中文或特殊字符:命令行工具对非ASCII字符兼容性一般,把虚拟机路径改为纯英文目录可规避多数问题。
- 权限不足:确保执行命令的终端以管理员身份运行,尤其对位于C盘Program Files下的虚拟机。
业内专家指出,快照不是备份的替代品,快照文件与虚拟机磁盘文件存储在同一位置,一旦宿主机的物理磁盘损坏,快照同样会丢失,重要数据应定期导出OVA文件或复制磁盘文件到独立存储介质上。

快照命令与截图命令的区别
有些新朋友会把"虚拟机拍照命令"理解为截屏,这在搜索时会产生歧义,虚拟机截图获取的是当前屏幕的像素图像,而快照保存的是CPU、内存、磁盘的完整运行状态,两者容量天差地别,需要截取虚拟机屏幕图像时,VMware用vmrun并不支持截图,应使用宿主机自带截图工具,或VirtualBox的VBoxManage controlvm "虚拟机名" screenshot "输出文件.png"命令完成。
Q&A:虚拟机快照常见疑问解答
Q1:虚拟机拍照命令和物理机Ghost备份有什么区别?
快照是增量式的状态记录,创建速度极快,几秒即可完成,恢复时也是瞬间切换,而Ghost备份等物理机工具是完整镜像复制,耗时长、恢复慢,但快照无法脱离宿主机独立存在,Ghost备份可以制作成光盘启动盘,在系统完全崩溃时从外部恢复。
Q2:给虚拟机多次拍照会不会越用越卡?
会,每张快照都会创建一个差异磁盘文件,读取时需要依次回溯快照链,链越长,虚拟机磁盘I/O延迟越高,建议控制在3-5个关键节点以内,用完后及时删除,不要拿快照当日常备份用,据多数运维人员的经验,快照链长度超过10层后,开机速度会有可感知的下降。
Q3:拍快照时虚拟机里的数据库数据安全吗?
对于运行中且内存存在脏数据的数据库,快照只能保证文件系统层面的崩溃一致性,无法保证数据库事务的一致性,拍快照前最好先优雅关闭数据库服务,或者使用数据库自带的备份工具导出数据后再拍快照,否则恢复后可能遇到数据表损坏需要修复。
快照命令是虚拟化运维的基础技能,掌握VMware和VirtualBox这两条命令分支,配合图形界面的操作路径,你就已经能应对绝大多数日常场景,优先记住命令,其次记住操作入口,最后记住快照不是备份,这套逻辑会帮你少走不少弯路。

