我有超过 30 个使用不同映像打开的 qemu-kvm 进程。他们的图像被意外删除。我进行了搜索,发现该文件仍在进程中打开。还是可以恢复的。所以我遵循了这个https://unix.stackexchange.com/questions/297475/accidentally-removed-a-libvirt-image-file-can-i-recreate-it。我停止了这个过程。使用 dd 命令复制文件 /proc/pid/fd/19。
问题就从这里开始了。
我复制了该文件并恢复了它,然后重新启动了该过程,现在我恢复了该文件。整个问题是,当我使用 dd 命令复制打开的描述符时,它会占用大量空间。 “它不应该占用任何空间,因为在处理它之后,我终止了该进程,因此描述符被删除,只有复制的文件存在,因此存储应该是相同的”。我在不同的过程中尝试过相同的接受答案。但我使用的是 cp 命令而不是 dd。杀死进程后,它不占用任何空间。现在我想知道我的空间去了哪里。我使用 dd 命令恢复了 20 多个进程,现在我的磁盘已满,无法恢复其余进程。我想释放 dd 命令占用的空间,并且我将在其余进程中使用 cp,因为它比 dd 对我来说更好,而且不占用任何空间。
答案1
可能原始文件是一个稀疏文件,也就是说,它被标记为占用 X 空间,而实际上,它小于 X。但是当您从 fd 复制它时,稀疏性消失了,您复制了完整的 X 大小。