web-dev-qa-db-ja.com

VirtualBox VDIの内容をパーティションにコピーし、そこからOSをデュアルブートする方法は?

私はLinuxユーザーですが、何かをするためにWindowsが絶対に必要な場合に備えて、圧縮されたWindows XP ISOをペンドライブに保存しています。これは、ほとんどの場合VirtualBoxで機能します。

しかし、今はいくつかのゲームをプレイしたいので、Windowsイメージをネイティブに実行したいと思います。私のコンピュータにはCDドライブがないので、ISOを書き込んで通常どおりにインストールすることはできません。

私がやろうとしているのは、インストールされているWindowsイメージをHDDの物理NTFSパーティションに移動し、GRUBをセットアップして、デュアルブートできるようにすることです。

物理ドライブへのVDIの作成を扱ったチュートリアルをたくさん見つけました。しかし、彼らは私がドライブ全体を上書きしたいと思っています。 ddを含むrawディスクイメージをパーティションに移動すると、パーティションが破損しました。

また、VMDKのトリックを試して、その空のパーティションを使用し、そのパーティションにWindowsをインストールしました。インストールのテキストモードフェーズは問題​​なく終了しますが、VMは機能せず、クラッシュして再起動を続けるか、すぐにフリーズします(VMDKの作成方法に応じて、-rawdisk /dev/sda3または-rawdisk /dev/sda -partition 3)。

12
Calmarius

私は昨日すべてを調査に費やし、ついにWindows XPを起動することができました。他のOSでも同様のはずです。しかし、操作はすべてですが、簡単ではありません。

これは危険な操作なので、貴重なデータをバックアップすることをお勧めします。

手順は次のとおりです。

準備

Windows XPの場合、現在のディスク文字とパーティションの設定を忘れさせる必要があるため、移行前に仮想マシンのHKEY_LOCAL_MACHINE/MountedDevicesキーからすべての値を消去する必要があります。カーネルは次回の再起動時に再構築します。Linux仮想マシンでは、これは移行後にfstabを修正することを意味します。

VDIイメージのマウント

VDIにはMBRも含まれているため、VDI全体をパーティションにコピーすることはできません。仮想パーティションのみをコピーする必要があるため、最初にVDIをマウントする方法を見つける必要があります。

nbdドライバーとqemu-nbdコマンドが必要です。 Ubuntuでは、qemu-kvmパッケージに含まれています。

最初にnbdドライバーをロードします。

# modprobe nbd

これにより、/devにいくつかのnbdデバイスが作成されます。

次に、VDIをマウントします。

# qemu-nbd -c /dev/nbd0 path_to.vdi

これにより、すべての仮想パーティションに対して/dev/nbd0p1/dev/nbd0p2/dev/nbd0p3などが作成されます。これらは通常のデバイスと同じように取り付けることができます。

パーティションの移行

そのためにddを使用し、操作の前に両方のパーティションをアンマウントします。

# dd -if=<nbd_device> -of=<real_partition>

例えば。:

# dd -if=/dev/nbd0p3 -of=/dev/sda4

ddの操作はサイレントです。これには数分、場合によっては30分かかる場合があります。操作中にターミナルを開き、fdisk -lを使用してすべてが順調に進んでいることを確認できます。

更新:

どうやらnbdは絶対確実な解決策ではありません。 I/Oエラーが発生し、ddが失敗する可能性があります。さらに、次の試行はすぐに失敗します。次のコマンドを使用して、rawディスクVMDKを作成することもできます(Linuxの場合)。

$ VBoxManage internalcommands createrawvmdk -filename physical.vmdk -rawdisk /dev/sda

それを機能させるには、diskグループに属している必要があります。次に、このvmdkをセカンダリハードドライブとして仮想マシンに追加し、Live LinuxISOを使用してパーティションをddします。

NTFSパーティションのブートセクターを修正する

これはハックな部分です。

ほぼ準備ができていますが、ファイルシステムの非表示セクターの数をオフセット0x1Cに設定する必要があるため、Windows XPは起動しません。これは、基本的にセクターの数です。 NTFSパーティションの前。この番号はfdisk -ulコマンドから取得できます。出力のstartフィールドには、特定のパーティションが開始するセクターが示されます。これは基本的に、パーティションの前のセクター数です。そこから数値を取得し、たとえばgcalctoolを使用して16進数に変換します。

次のように、hexeditでパーティションを開きます。

# hexedit /dev/sda4

次に、1Cオフセットにリトルエンディアン順で非表示セクターの数を書き込みます。リトルエンディアンとは、0xABCDEFGHGH EF CD ABになることを意味します。 16進数が8桁より短い場合は、その前にゼロを付けます。

完了したら、保存して終了します(Ctrl + X)。

GRUBのセットアップ

GRUBは、そのパーティションを直接起動するように指示する必要があります。GRUBの場合、次のメニューエントリを追加します。

title       Microsoft Windows XP Professional
root        (hd0,3)
savedefault
makeactive
chainloader +1

ここで、(hdX, Y)はパーティションを識別します。 Xはデフォルトのハードディスクの場合は0、/dev/sdaの場合は1、/dev/sdbの場合は2などです。Yはパーティション番号です。 /dev/sda1の場合は0、/dev/sda2の場合は1など。

これはGRUB2でも同様であるはずですが、メニューエントリに少し異なる構文を使用します。

最後の仕上げ

新しいNTFSパーティションを起動する準備ができました。ただし、Windows XPデスクトップに到達するには、ハッキングが必要です。他のシステムでは、別のハッキングが必要になる場合があります。最初に、boot.iniを修正する必要があります。

[boot loader]
timeout=1
default=multi(0)disk(0)rdisk(0)partition(3)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

それに応じてパーティション番号を設定します。/dev/sda4にインストールしました。したがって、パーティション番号は3にする必要があります。

ログオン画面の直前にWindowsがフリーズした場合は、レジストリのMountedDevicesエントリを修正する必要がある場合があります。

レジストリは<path to windows>/system32/config/systemにあり、chntpwで表示できます。これは、システムのドライブ文字がCでない場合に問題になる可能性があります。chntpwのレジストリ書き込み機能は非常に制限されているため、フォールバックして、ghex2などの16進エディタを使用して修正する必要があります。 \DosDevices\C:を見つけて、Cを別のドライブ文字(私の場合はF)に置き換える必要があります。

これらの後、デスクトップに到達できるはずです。今度はすべてのドライバーを探す必要がありますが、これはこのチュートリアルの範囲外です。

ソース

Windowsの移動XP別のパーティションへ

LinuxでVDIをマウントする

4
Calmarius

partimageとgdiskを使用してtahtを実行してみてください。 gdiskまたは別のパーティションプログラムを使用して、現在のディスクのサイズを変更するか、ディスクのどこかにパーティションを設定します。理想的には、プライマリパーティションになります。私は通常、Windows用にパーティション1を、Linuxデータ用に2+を保持しています。

パーティションが設定されると、gdiskまたは別のゴーストクローンを使用して、バックアップファイルまたはストレートイメージを他のドライブに作成できます。ファイルをそのようにドロップする必要がある場合、またはimgファイルを作成してから、vmdkファイルからホストシステムにコピーしてから、イメージソフトウェアを使用してパーティションを復元する場合は、ホストへのネットワーク接続を設定できます。ホストシステムで作成した場所に

必要に応じてgrubを構成し、そのntfsパーティションにブートを追加します。

0
Kendrick