如何修复损坏的 VirtualBox VM?

如何修复损坏的 VirtualBox VM?

我在 Ubuntu 11.10 64 位主机上运行 Oracle VirtualBox,该主机带有 Ubuntu Server 12.04 LTS 64 位客户机,并带有许多快照。主机重新启动后(虚拟机正在运行),虚拟机变得“无法访问”。在四处寻找并制作了几 GB 的备份后,我让它启动到无法找到启动介质的屏幕。您对如何将我的数据(包括最新快照中的数据)传输到新虚拟机或(如果可能)修复此问题有什么建议或解决方案吗?我很乐意提供更多信息。

编辑:我认为我的快照链已损坏/损坏。

编辑2:我无法修复它,我刚刚创建了一个新的虚拟机。

答案1

除非能够返回到工作快照。将您的 VM 启动到实时 CD,看看您是否可以访问其硬盘。如果可以,最坏的情况是使用新服务器构建新 VM,从旧 VM 添加硬盘;然后从硬盘中检索数据。

答案2

  1. 恢复最新快照
  2. 编辑硬盘信息并删除所有无法访问的硬盘
  3. 将您能找到的所有硬盘添加到虚拟机(这使它们可访问)
  4. 使用恢复 CD 或 Live CD 启动
  5. 决定如何修复它...通常你需要挂载磁盘、chroot 并安装 grub

例如 #5:

  1. 挂载分区

    mkdir /mnt/fixme
    parted -s /dev/sda print
    (based on output of above, decide which device is your /boot, /, etc., and modify next mount commands accordingly)
    mount /dev/sda2 /mnt/fixme
    mount /dev/sda1 /mnt/fixme/boot
    ... for all your partitions
    
  2. 挂载特殊文件系统

    mount | grep "on /proc"
    mount | grep "on /dev"
    (based on the above, decide what the "from" and "type" should be; my example below is correct for openSUSE 12.1)
    mount -t proc proc /mnt/fixme/proc
    mount -t devtmpfs devtmpfs /mnt/fixme/dev
    

    例如,在 Ubuntu 上,dev 类型为“none”:mount -t none devtmpfs /mnt/fixme/dev

    您可能还需要挂载 /sys。我忘了。当您收到错误消息时,您就会知道。

  3. 启动 chroot shell(就像启动到你的硬盘一样)(附注:如果你的系统上有另一个磁盘,那么这个功能会很差,比如你把坏了的磁盘插入另一个不是从 CD 启动而是从磁盘启动的 Linux;它会在 mtab 中查找以确定哪个是你的启动盘,并将这些 guid 放在 grub 配置中,而不是修复后的磁盘中,因此你需要使用启动提示符进行恢复,然后稍后再次运行 grub-install)

    chroot /mnt/fixme
    
  4. 安装 grub

    On openSUSE:
        update-bootloader
    On Ubuntu:
        update-grub2
    Alternate, on most systems, but not openSUSE, use both:
        install stage 1 bootloader:
            grub-install
        install guids and stuff in /boot (change cfg file to whatever you find is the correct one [menu.lst on openSUSE, grub.cfg on Ubuntu, etc.]) (if you skip the -o option, it just prints to standard out and doesn't save it in any files)
            find /boot -name "*grub*" -or -name "*.cfg" -or -name "*menu*"
            grub-mkconfig -o /boot/grub/grub.cfg
    

相关内容