我在一台 Ubuntu 10.04 主机上运行了几个 KVM 客户机。由于粗心大意,正在运行的主机的 qcow2 映像已被删除。它们仍在运行,并能正确响应以及读取/写入等。但是,如果您停止客户机,它会因缺少映像而拒绝启动。
我很好奇这些文件目前被写入和读取的位置。是在内存中吗?附加问题是,是否可以将数据恢复到 qcow2 映像中?这不是任务关键数据,所以我很高兴在这里进行实验。如果我不必拯救数据并重新创建每个客户机,这主要会节省时间。
答案1
拥有打开的文件描述符和拥有目录条目是不同的,但有些相关。只要 KVM 打开了 qcow2 文件,它们就会像以前一样存在于磁盘上的相同块中。在 Linux 上,您可以/proc/[pid]/fd/[file descriptor]
使用本文中描述的方法恢复文件超级用户问题。
答案2
当后端消失时,所有内容都会缓存在内存或交换中。因此,如果您只想恢复数据,您仍然可以 ssh,然后 rsync 到其他对您重要的服务器。
您尝试 dd if 并通过管道将 ssh dd 到另一个映像。这可能会或可能不会起作用。因此,第一个顺序应该是保存数据,然后如果还有时间,您可以尝试复制映像。
答案3
不久前我在 esx 中做过类似的事情。支持人员的回答是该文件仍然存在于磁盘上,并且已从文件系统表中取消链接。关闭文件时,打开的句柄会丢失,尝试使用该表查找文件会失败。
如果我没记错的话,我们使用 lsof 来追踪打开的句柄并将其从磁盘拉入重建的文件中。不过这已经是很久以前的事了。