七. 快照管理:时间旅行者指南
快照是虚拟机最强大的功能之一,它允许你保存虚拟机在某个时刻的完整状态(包括内存内容和磁盘数据),之后随时恢复。合理使用快照可以极大地提高实验效率。
7.1 快照的本质
快照不是增量备份,而是存储差异的数据结构。创建快照后,虚拟机继续写入的数据会被记录到一个新文件中,原始磁盘文件变为只读。因此,快照链越长,性能下降越明显。建议每台虚拟机最多保留 3-5 个快照,完成实验后及时删除(合并)。
7.2 VMware 快照操作
创建快照:右键虚拟机 → 快照 → 拍摄快照 → 输入名称和描述。建议开启“捕获内存”以便恢复时无需重新启动系统。
恢复到快照:快照管理器 → 选择快照 → 转到。
删除快照:快照管理器 → 选择快照 → 删除(删除操作会将数据合并到父磁盘,需要时间)。
从快照克隆:快照管理器 → 克隆 → 链接克隆或完整克隆。
命令行操作(使用 vmrun,VMware Workstation 自带):
"C:\Program Files (x86)\VMware\VMware VIX\vmrun.exe" snapshot "D:\VMs\ubuntu.vmx" snap1
"C:\Program Files (x86)\VMware\VMware VIX\vmrun.exe" revertToSnapshot "D:\VMs\ubuntu.vmx" snap1
7.3 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 原生支持)
创建磁盘快照(不包含内存):
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(磁盘数据需手动合并?一般使用 --disk-only 时需要小心)
警告:KVM 内存快照在虚拟机负载较高时可能导致故障,建议生产环境使用磁盘快照 + 关闭虚拟机后备份。
7.5 快照最佳实践
黄金快照:完成操作系统安装和基础软件配置后,立刻创建一个快照(例如“初始状态”)。
实验前快照:在进行任何危险操作(如修改内核、安装未知软件)前拍摄快照。
定期清理:每月检查快照列表,删除早已无用的快照以释放磁盘空间。
不要依赖快照作为备份:快照文件与虚拟机磁盘文件紧密耦合,一旦原始磁盘损坏,所有快照都会失效。真正的备份应该导出完整虚拟机。
八. 虚拟机克隆:快速部署的艺术
克隆是从现有虚拟机创建一个副本的过程,常用于批量部署测试环境。
8.1 完整克隆 vs 链接克隆
VMware 链接克隆:右键虚拟机 → 管理 → 克隆 → 选择“链接克隆”。注意,原始虚拟机不能移动或删除,否则链接克隆失效。
VirtualBox 链接克隆:右键虚拟机 → 复制 → 选择“链接复制”。
8.2 跨平台克隆后的注意事项
克隆后的虚拟机具有与原始虚拟机完全相同的标识信息,可能导致网络冲突、主机名重复等问题。你需要执行以下“个性化”步骤:
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:\Windows\System32\Sysprep\sysprep.exe),选择“进入系统全新体验(OOBE)”并勾选“通用化”。这会重置 SID 和其他唯一标识符。
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 虚拟磁盘格式转换
有时需要将 VDI 转换为 VMDK 以迁移到 VMware:
VBoxManage clonehd source.vdi destination.vmdk --format VMDK
VMware 转 VirtualBox:使用 qemu-img 作为中介。
来源:
https://fndvx.cn/