恢复正在运行的KVM客户机磁盘映像

我在Ubuntu 10.04主机上运行多个KVM客户机。 由于疏忽,运行主机的qcow2镜像已被删除。 他们仍然正在运行和响应正常,以及读/写等,如果你停下来的客人,它会拒绝启动,由于一个失踪的图像,虽然。

我很想知道这些文件在哪里被写入和读取。 它在记忆中吗? 奖金的问题是,是否有可能将数据恢复成qcow2图像? 这不是关键任务数据,所以我很高兴在这里做实验。 如果我不需要挽救数据并重新创build每个客户,那么这将大大节省时间。

有一个打开的文件描述符,并有一个目录条目是不同的,有点相关的东西。 只要KVM打开了qcow2文件,它们仍然存在于磁盘上,就像以前一样。 在Linux上,您可以使用此超级用户问题中描述的方法从/proc/[pid]/fd/[file descriptor]恢复文件。

当后端消失时,所有东西都被caching在内存或交换中。 所以如果你只是想恢复数据,你仍然可以SSH,然后rsync到其他服务器什么是重要的。

你尝试dd如果和pipe道ssh dd到另一个图像。 它可能会或可能不会工作。 所以第一个顺序应该是数据保存,然后如果你有时间,你可以尝试复制一个图像。

前段时间我在esx做了类似的事情。 支持的答案是,该文件仍然存在于磁盘上,并已从文件系统表中断开链接。 在closures文件时,打开的句柄会丢失,并尝试使用该表查找文件失败。

如果我没有记错的话,我们使用lsof来追踪打开的句柄,并将它从磁盘中拖到重build的文件中。 不过这是很久以前的事了。