虚拟机快照回滚:它恢复什么,不恢复什么
虚拟机快照恢复的是客户机的磁盘与内存状态,而不是远程账户操作、共享文件副本或别处保存的记录:先界定回滚范围。
检查点会把客户机的一部分退回去,而让其他每个系统留在原处。离开客户机的东西——已投递的消息、复制到主机的文件、网站已接受的账户操作——属于接收它的系统,而不属于检查点。回滚有明确的本地范围,把它称作擦除会把恢复计划变成虚假陈述。下表就是一次还原实际触及范围的核对清单。
桌面会回来,远程会话不会
常见的抱怨总是事后才来。虚拟机启动在上周的状态,浏览器历史不见了,而用户登录过的服务仍把该会话列为活跃。没有什么坏掉;这两个系统从未处在同一个事务里。
| Where the effect landed | Who owns undoing it | How you verify it is gone |
|---|---|---|
| Guest virtual disk | The hypervisor, through the checkpoint you restore | The disk state matches the checkpoint's timestamp |
| Guest memory | Only a checkpoint type that saved memory | The guest resumes or cold-boots, as that type dictates |
| Host share or clipboard | The owner of that host path | The copied file is absent at its destination |
| Remote account or session | The service that accepted the action | The session list shows nothing active for that account |
| Mail or message queue | The mail system that delivered it | The message is gone from the recipient's mailbox, not from the guest |
这种错位正是教训。检查点还原的是虚拟机监控程序所跟踪的东西:客户机的虚拟硬件,以及依类型而定的内存。它不跟踪某个 Web 应用的会话表、邮件服务器的投递队列或同事的下载文件夹。还原之前先读类型,因为类型决定一次还原究竟能拿回什么。
虚拟机监控程序实际保存了什么
Microsoft 的 Hyper-V 文档区分标准检查点与生产检查点:前者连同虚拟磁盘一起捕获内存,后者使用数据一致机制而跳过内存。标准检查点从客户机正在执行的指令处继续;生产检查点则从一致的磁盘启动。这一差别决定还原返回的是仍在运行的进程,还是一次干净的启动。不要把一种监控程序的行为套到另一种上,因为术语与一致性机制随产品而变。
Microsoft 还警告说,检查点不是备份,这一警告很重要。同一卷上的检查点链与该卷同命运,因此它防的是糟糕的改动,而不是主机丢失。
活在客户机磁盘之外的文件
共享文件夹是呈现给客户机的主机文件系统,还原客户机并不会还原它。如果用户在客户机内下载了文件,又通过共享路径复制出去,那份第二副本有它自己的生命周期和自己的所有者。还原客户机会删掉第一份副本,而把第二份留在原处。
在承诺回滚之前,先问清每条路径归谁。主机共享、剪贴板传输和上传到云盘是三个目的地,只有第一个可能位于监控程序存储的旁边。
确实需要删除副本的地方,就在其目的地删除,并单独记录这一步。只列了快照的恢复计划是不完整的,而这种不完整没人会注意到,直到副本被找到。同样的谨慎也适用于客户机运行期间主机写下的日志。
监控程序从未见过的账户
服务从客户机接受的任何东西,都是服务的记录,而不是客户机的记录。监控程序从未见过那笔事务,因此无法将其逆转。改密码、下单、发帖和 API 调用都留在处理它们的系统里。还原磁盘映像触及不到那个系统。
浏览器状态让这种错位变得具体。被还原的客户机可能还留着某服务更早的 cookie,而该服务此后已轮换了会话,于是用户看起来已登录却被静默拒绝,或者看起来已登出而服务仍认为会话有效。在服务端吊销会话,才是唯一能终结它的操作。
还原无法撤销的东西
检查点对经过批准的测试或范围已明了的配置实验有用。它是对本地状态的本地撤销,是一句比听起来更窄的承诺,也不是主机、监控程序或任何外部系统保持干净的证据。VPN 改变数据包走哪条路,并不会让客户机里的软件变得可以安全运行。这两项主张各自独立,只有一项与隧道有关。
$cp = Get-VMSnapshot -VMName lab-desktop -Name baseline
Get-VMHardDiskDrive -VMSnapshot $cp | Select-Object ControllerType, ControllerNumber, ControllerLocation, Path
第一行把检查点解析成对象,第二行列出了它覆盖的磁盘,这就用证据而不是记忆回答了范围问题。在拥有该密钥的服务上轮换并吊销已泄露的密钥。若涉及已知的恶意代码,请使用获授权的调查环境和组织的响应流程,而不要以为快照就让执行变得安全。
还原之前写下三件事:你要取回哪个客户机状态、哪些外部系统仍持有那项效果、此后你会信任哪个时间点。那份计划比一台重新看起来熟悉的机器更有力。把它和工单放在一起,让下一次还原从同一份清单开始。