![哪个文件已从一个 VM 覆盖更改为下一个 VM 覆盖?](https://linux22.com/image/737662/%E5%93%AA%E4%B8%AA%E6%96%87%E4%BB%B6%E5%B7%B2%E4%BB%8E%E4%B8%80%E4%B8%AA%20VM%20%E8%A6%86%E7%9B%96%E6%9B%B4%E6%94%B9%E4%B8%BA%E4%B8%8B%E4%B8%80%E4%B8%AA%20VM%20%E8%A6%86%E7%9B%96%EF%BC%9F.png)
我有一个 Windows10 机器的基本映像。
[win10_base image].qcow2 -- [overlay_with_bug].qcow2
我的应用程序有一个 bug,我可以重现它。这个 bug 确实改变了系统上的某些东西。
我想在无辜的 Windows VM 上重现该错误。所有更改都应在此映像的覆盖层中跟踪。我如何检索存储在覆盖层中的更改?哪种格式最好?是否有类似 VM-Images 的比较/分析工具?
答案1
virt-diff可以列出原始或 qcow2 映像之间的不同文件。它声称允许覆盖层之间的差异,在这种情况下,请尝试为参数创建一个空的 qcow2 -a
。或者,使用该选项比较有覆盖层和没有覆盖层的客户端-d
。
虽然RHEL 版本似乎从 libguestfs 中修补了 NTFS所以你可能需要其他工具。
了解客人正在做什么也很有价值。使用进程监控或者也许有一个调试器来详细观察问题程序正在做什么。
答案2
Qcow2 跟踪以逐块方式进行;这意味着没有简单的方法来发现哪些文件发生了变化。我建议您挂载两个磁盘文件,计算所有相关文件的 md5 总和并比较结果。
在执行此操作时,请确保不要更改磁盘文件和/或双重安装它们。
编辑:我不知道 virt-diff (约翰的回答 +1),它似乎可以实现我上面建议的功能 - 挂载两个磁盘映像并比较其中的单个文件,但方法要简单得多。无论如何,在guestfs
不支持 NTFS(除了win-virt-reg
)的 RHEL 世界中,您可能需要以困难(手动)的方式进行比较。