Pol*_*Ron 5 kvm virtual-machine disk-image libvirt
我不小心删除了 /var/lib/libvirt/images 目录中的错误图像文件。我不知道如何重新创建一个或撤消我的删除。任何提示?
Ste*_*ris 15
由于您尚未关闭 VM,因此使用该映像文件的进程仍然打开该文件,并且实际上尚未将其删除。只要进程继续运行,您就应该能够恢复它。
对于这个答案,我有一个名为testdelete
. VM 已启动,但我已删除该文件。
首先,您需要找到使用该文件的进程。最简单的方法是使用lsof
.
# lsof | grep /var/lib/libvirt/images/testdelete.img
qemu-kvm 29627 qemu 9u REG 9,0 2147483648 399357 /var/lib/libvirt/images/testdelete.img (deleted)
Run Code Online (Sandbox Code Playgroud)
这告诉我它是进程 29627 和文件描述符 9。让我们看看这个
# cd /proc/29627/fd
# ls -l 9
lrwx------ 1 qemu qemu 64 Jul 21 18:13 9 -> /var/lib/libvirt/images/testdelete.img (deleted)
Run Code Online (Sandbox Code Playgroud)
好的,不错。那匹配。现在让我们恢复它!您需要一个有足够可用空间的磁盘来保存整个图像
理想情况下,您的 VM 应尽可能保持静止;因为我们正在复制原始磁盘映像,所以如果某些进程正在写入磁盘,我们确实存在损坏的风险。我们可以尝试通过发送 STOP 信号来最小化这种风险。
# kill -STOP 29627
Run Code Online (Sandbox Code Playgroud)
这有效地“冻结”了该过程。我们现在采取的备份相当于硬崩溃后发生的情况;重新启动时,操作系统将fsck
(或等效的)恢复。
现在我们可以复制数据
# dd if=9 of=/home/sweh/recovered.img bs=1M
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 5.74931 s, 374 MB/s
Run Code Online (Sandbox Code Playgroud)
看起来很完美;磁盘映像是 2Gb,这就是它复制的内容。
这张图好看吗?
# cd /home/sweh
# sfdisk -l recovered.img
Disk recovered.img: cannot get geometry
Disk recovered.img: 261 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
recovered.img1 0+ 65- 66- 524288 82 Linux swap / Solaris
recovered.img2 * 65+ 261- 196- 1571840 83 Linux
recovered.img3 0 - 0 0 0 Empty
recovered.img4 0 - 0 0 0 Empty
Run Code Online (Sandbox Code Playgroud)
是的,这看起来像我的分区表。此时,您可以进行其他测试以验证图像是否正常。
就是这样!您已恢复您的图像文件。
注意:在本例中,我将终止现有qemu
进程。该步骤是不可撤销的,因为它会导致磁盘被释放。如果您想做一些“并行运行”测试,那么您可以创建一个新的映像文件和virsh define
一个新的 VM 来使用它。
让我们用这个重启虚拟机。销毁旧 VM,将数据文件复制到位并重新启动。
# virsh destroy testdelete
# cp -v recovered.img /var/lib/libvirt/images/testdelete.img
`recovered.img' -> `/var/lib/libvirt/images/testdelete.img'
# virsh start testdelete
Domain testdelete started
Run Code Online (Sandbox Code Playgroud)
我们可以连接到控制台吗?
# virsh console testdelete
Connected to domain testdelete
Escape character is ^]
CentOS release 6.8 (Final)
Kernel 2.6.32-642.3.1.el6.x86_64 on an x86_64
dhcp226.spuddy.org login:
Run Code Online (Sandbox Code Playgroud)
恢复完成:-)
小智 -1
libvirt 映像默认位于/var/lib/libvirt/images
您需要找到一种方法来恢复文件,使用一些取消删除的软件。这篇文章也许可以帮助您:Unix/Linux 取消删除/恢复已删除的文件
归档时间: |
|
查看次数: |
4635 次 |
最近记录: |