有没有人有这样的经历,在虚拟机运行时不小心删除了使用过的磁盘映像?
我原本以为虚拟机会立即失败,但出乎意料的是,它仍然运行良好。我尝试执行许多 I/O 命令,甚至通过“dd”创建非常大的文件,这些文件完全大于虚拟机的内存大小。但它仍然处于活动状态。
有人能解释一下为什么吗?
服务器信息:ubuntu 12.04,从默认 repo 安装了 KVM 和 libvirt。VM 的磁盘映像是 qcow2 格式。
答案1
删除文件实际上并不会删除该文件,而是会减少指向 inode 的名称数量。如果文件的名称数量和打开的文件描述符数量都达到 0,则数据将被删除。
因此,如果您删除某个应用程序仍打开的文件,该应用程序仍可以顺利使用该文件。只有当最后一个文件描述符关闭时,该文件才会被删除(然后您会看到已使用的空间再次被回收)。
答案2
当您删除具有打开文件描述符的文件时,直到文件描述符关闭后,它才真正被删除。您可能可以使用lsof | grep deleted
命令找到该文件。
如果您想取消删除该文件,请尝试以下操作: http://www.serverwatch.com/tutorials/article.php/3822816/Recovering-Deleted-Files-With-lsof.htm