检查点会把客户机的一部分退回去,而让其他每个系统留在原处。离开客户机的东西——已投递的消息、复制到主机的文件、网站已接受的账户操作——属于接收它的系统,而不属于检查点。回滚有明确的本地范围,把它称作擦除会把恢复计划变成虚假陈述。下表就是一次还原实际触及范围的核对清单。

桌面会回来,远程会话不会

常见的抱怨总是事后才来。虚拟机启动在上周的状态,浏览器历史不见了,而用户登录过的服务仍把该会话列为活跃。没有什么坏掉;这两个系统从未处在同一个事务里。

Where the effect landedWho owns undoing itHow you verify it is gone
Guest virtual diskThe hypervisor, through the checkpoint you restoreThe disk state matches the checkpoint's timestamp
Guest memoryOnly a checkpoint type that saved memoryThe guest resumes or cold-boots, as that type dictates
Host share or clipboardThe owner of that host pathThe copied file is absent at its destination
Remote account or sessionThe service that accepted the actionThe session list shows nothing active for that account
Mail or message queueThe mail system that delivered itThe 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

第一行把检查点解析成对象,第二行列出了它覆盖的磁盘,这就用证据而不是记忆回答了范围问题。在拥有该密钥的服务上轮换并吊销已泄露的密钥。若涉及已知的恶意代码,请使用获授权的调查环境和组织的响应流程,而不要以为快照就让执行变得安全。

还原之前写下三件事:你要取回哪个客户机状态、哪些外部系统仍持有那项效果、此后你会信任哪个时间点。那份计划比一台重新看起来熟悉的机器更有力。把它和工单放在一起,让下一次还原从同一份清单开始。

相关文章