七. 快照管理:时间旅行者指南
在虚拟机的日常管理中,快照和克隆可以说是最高频、也最实用的两个功能。从系统崩溃回滚到环境快速部署,没有它们,许多实验和运维工作都会变得异常繁琐。下面就从快照开始,逐一拆解这些关键操作。
7.1 快照的本质
那么,快照到底是怎么工作的?它跟备份是一回事吗?打个比方,快照更像是一张“修改记录”,而不是一次完整的复制。创建快照后,虚拟机继续写入的数据会被记录到一个新文件中,原始磁盘文件则变为只读状态,只负责提供“初始状态”。这就形成了一个差异数据链路。正因如此,快照链越长,读写操作的性能下降就越明显。一个实用的建议是:每台虚拟机最好只保留3到5个快照,完成实验目的后记得及时删除(或者说是合并),别让它拖慢系统。
7.2 VMware 快照操作
操作起来其实很简单。创建快照:右键点击虚拟机 → 快照 → 拍摄快照 → 输入有意义的名称和描述。有个小细节:建议勾选“捕获内存”,这样恢复到快照时就能直接回到之前的状态,无需重新启动系统。当然,这也会多占用一些磁盘空间。
恢复到快照:在快照管理器中选中目标快照,点击“转到”即可。删除快照:同样在快照管理器中选中并删除,背后其实是把差异数据合并到父磁盘,这会耗费一些时间。
另外,还可以直接从快照克隆:在快照管理器中选中快照 → 克隆,再选择是要链接克隆还是完整克隆。
如果你习惯用命令行,VMware Workstation自带的 vmrun 工具也能完成任务:
"C:Program Files (x86)VMwareVMware VIXvmrun.exe" snapshot "D:VMsubuntu.vmx" snap1
"C:Program Files (x86)VMwareVMware VIXvmrun.exe" revertToSnapshot "D:VMsubuntu.vmx" snap1
7.3 VirtualBox 快照操作
VirtualBox这边同样直观。创建快照:直接点击菜单栏的“拍摄快照”图标(或者通过:机器 → 拍摄快照)。管理快照:点击主界面的“快照”选项卡,在这里可以右键删除或恢复到某个历史状态。
VirtualBox的快照文件是独立存储在 Snapshots/ 文件夹里的,删除操作时背后也在进行数据合并。命令行方式如下:
VBoxManage snapshot "vm-name" take "snap1"
VBoxManage snapshot "vm-name" restore "snap1"
VBoxManage snapshot "vm-name" delete "snap1"
7.4 KVM 快照(qcow2 原生支持)
KVM得益于 qcow2 格式的天然优势,快照管理也相当灵活。创建磁盘快照(不包含内存):
virsh snapshot-create-as --domain ubuntu-vm --name snap1 --description "clean install"
如果需要包含内存状态(前提是磁盘格式为 qcow2),可以使用:
virsh snapshot-create-as --domain ubuntu-vm --name snap2 --disk-only --atomic
列出快照:virsh snapshot-list ubuntu-vm
恢复快照:virsh snapshot-revert ubuntu-vm snap1
删除快照:virsh snapshot-delete ubuntu-vm snap1 --metadata(需要谨慎,因为磁盘数据可能需要手动合并)
这里有一条很重要的实践经验:KVM的内存快照在虚拟机负载较高时,有一定概率导致故障。如果是生产环境,强烈建议使用磁盘快照,或者在关闭虚拟机后再进行备份。
7.5 快照最佳实践
积累了一些经验,分享几个养成好习惯的思路:
黄金快照:完成操作系统安装和基础软件配置后,立刻创建一个快照,命名为“初始状态”之类的。这就是你所有实验的“安全基地”。
实验前快照:在进行任何危险操作前,比如修改内核、安装来源不明的软件、改网络配置等,拍一张快照。一旦翻车可以秒回,省去重装系统的痛苦。
定期清理:每月花点时间检查一下快照列表,把那些早已无用的快照删掉。它们不仅占空间,还会拖慢性能。
不要依赖快照作为备份:这是很多人容易忽视的误区。快照文件与虚拟机磁盘文件是紧密耦合的,一旦原始磁盘损坏,所有快照都会一起失效。真正的备份,应该导出完整的虚拟机文件。
八. 虚拟机克隆:快速部署的艺术
快照擅长“回到过去”,而克隆则擅长“复制未来”。克隆是从现有虚拟机创建一个副本的过程,非常适合批量部署测试环境。
8.1 完整克隆 vs 链接克隆

两者最大的区别在于磁盘数据是否独立。VMware的链接克隆:右键虚拟机 → 管理 → 克隆 → 选择“链接克隆”。需要留意的是,原始虚拟机不能移动或删除,否则链接克隆会失效。VirtualBox的链接克隆:右键虚拟机 → 复制 → 选择“链接复制”。
8.2 跨平台克隆后的注意事项
克隆后的虚拟机虽然方便,但有“身份撞车”的风险——它们拥有完全相同的标识信息,比如MAC地址、主机名、SSH密钥等。直接启动的话,网络冲突、主机名重复等问题几乎是不可避免的。所以,克隆之后必须做一步“个性化”处理:
Linux 客户机:
# 重新生成 SSH 主机密钥(这一步非常重要!)
sudo rm /etc/ssh/ssh_host_*
sudo dpkg-reconfigure openssh-server # Debian/Ubuntu
# 或者
sudo ssh-keygen -A
# 更改主机名
sudo hostnamectl set-hostname new-hostname
# 重新生成 MAC 地址关联的 systemd 网络规则
sudo rm /etc/machine-id
sudo systemd-machine-id-setup
# 清理 DHCP 租约
sudo rm /var/lib/dhcp/dhclient.leases*
Windows 客户机:
运行 sysprep(C:WindowsSystem32Sysprepsysprep.exe),选择“进入系统全新体验(OOBE)”并勾选“通用化”。这会重置 SID 和其他唯一标识符,让克隆机像一台全新的 Windows 电脑。
8.3 命令行克隆(KVM)
virt-clone --original ubuntu-vm --name ubuntu-vm-clone --file /var/lib/libvirt/images/ubuntu-clone.qcow2
克隆完成后,启动克隆机前务必修改网络配置中的MAC地址,否则与原机发生IP冲突只是时间问题。
九. 虚拟磁盘管理:扩容、压缩与格式转换
虚拟磁盘用久了会有一个让人头疼的问题:内部文件虽然删了,但磁盘文件的大小却不会自动缩小,结果宿主机硬盘占用虚高。学会管理虚拟磁盘,是专业运维的必修课。
9.1 增加虚拟磁盘容量
VMware:关闭虚拟机 → 编辑设置 → 硬盘 → 扩展 → 输入新大小(例如从 40GB 扩大到 80GB)。注意,这只是增加了磁盘的总容量,分区和文件系统还需要在客户机内部手动扩展。
VirtualBox:
VBoxManage modifymedium disk "path/to/disk.vdi" --resize 81920 # 单位 MB
KVM(qcow2):
qemu-img resize /var/lib/libvirt/images/vm.qcow2 +20G # 增加 20GB
9.2 扩展客户机内部的分区与文件系统
Linux(以 LVM 为例):
# 查看当前磁盘布局
lsblk
# 假设 /dev/sda 扩容了,未分配空间在 sda 末尾
sudo fdisk /dev/sda # 创建新分区或扩展已有分区(注意使用正确的起始扇区)
# 对于 LVM:先扩展物理卷,再扩展逻辑卷,最后扩展文件系统
sudo pvresize /dev/sda3
sudo lvextend -l +100%FREE /dev/ubuntu-vg/root
sudo resize2fs /dev/ubuntu-vg/root # ext4
# xfs 则用 xfs_growfs
Windows 客户机:打开“磁盘管理”(diskmgmt.msc),右键点击 C 盘 → 扩展卷 → 按向导操作即可。
9.3 压缩虚拟磁盘文件(回收闲置空间)
扩容容易,压缩则需要一点技巧。关键在于:先让客户机内部把空闲空间用零填满,这样压缩工具才能识别哪些区域是“空的”。
VMware:在虚拟机内部清零空闲空间。Windows 使用 sdelete -z;Linux 使用 dd if=/dev/zero of=/zero.file bs=1M; rm /zero.file。然后关闭虚拟机,在VMware菜单中点击“文件” → “清理磁盘”。
VirtualBox:
VBoxManage modifymedium disk "path/to/disk.vdi" --compact
KVM(qcow2):
qemu-img convert -O qcow2 -c disk.qcow2 disk_compacted.qcow2 # -c 启用压缩
9.4 虚拟磁盘格式转换
不同平台间的虚拟机迁移经常会遇到格式兼容问题。比如想把 VirtualBox 的 VDI 格式迁移到 VMware 的 VMDK:
VBoxManage clonehd source.vdi destination.vmdk --format VMDK
反过来,VMware 转 VirtualBox 的话,通常需要用 qemu-img 作为中介工具进行转换。
