壊れた VirtualBox VM を修復するにはどうすればいいですか?

壊れた VirtualBox VM を修復するにはどうすればいいですか?

私は、多数のスナップショットを持つ Ubuntu Server 12.04 LTS 64 ビット ゲスト マシンを備えた Ubuntu 11.10 64 ビット ホストで Oracle VirtualBox を実行しています。ホストを再起動すると (VM の実行中)、VM は「アクセス不能」になりました。いろいろ調べて数ギガバイトのバックアップを作成した後、起動するとブート メディアが見つからないという画面が表示されるようになりました。最新のスナップショットのデータを含むデータを新しい VM に取り込む方法、または可能であればこの問題を修正する方法について、何かアドバイスや解決策はありますか? 詳細情報を提供させていただきます。

編集: スナップショット チェーンが壊れている/破損していると思います。

編集 2: 修正できません。新しい VM を作成しました。

答え1

作業中のスナップショットに戻ることができない場合。 VM をライブ CD で起動し、ハード ドライブにアクセスできるかどうかを確認します。アクセスできる場合、最悪のケースでは、新しいサーバーで新しい VM を構築し、古い VM からハード ドライブを追加して、ハード ディスクからデータを取得します。

答え2

  1. 最新のスナップショットを復元する
  2. ハードドライブ情報を編集し、アクセスできないハードドライブをすべて削除します
  3. 見つかったすべてのハードドライブを VM に追加します (これによりアクセス可能になります)
  4. リカバリCDまたはライブ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 シェルを起動します (これはハードディスクから起動するのと似ています) (補足: システムに別のディスクがある場合、これはうまく機能しません。たとえば、壊れたディスクを 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
    

関連情報