私は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
)。
私は昨日すべてを調査に費やし、ついにWindows XPを起動することができました。他のOSでも同様のはずです。しかし、操作はすべてですが、簡単ではありません。
これは危険な操作なので、貴重なデータをバックアップすることをお勧めします。
手順は次のとおりです。
Windows XPの場合、現在のディスク文字とパーティションの設定を忘れさせる必要があるため、移行前に仮想マシンのHKEY_LOCAL_MACHINE/MountedDevicesキーからすべての値を消去する必要があります。カーネルは次回の再起動時に再構築します。Linux仮想マシンでは、これは移行後にfstabを修正することを意味します。
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
します。
これはハックな部分です。
ほぼ準備ができていますが、ファイルシステムの非表示セクターの数をオフセット0x1C
に設定する必要があるため、Windows XPは起動しません。これは、基本的にセクターの数です。 NTFSパーティションの前。この番号はfdisk -ul
コマンドから取得できます。出力のstart
フィールドには、特定のパーティションが開始するセクターが示されます。これは基本的に、パーティションの前のセクター数です。そこから数値を取得し、たとえばgcalctoolを使用して16進数に変換します。
次のように、hexedit
でパーティションを開きます。
# hexedit /dev/sda4
次に、1C
オフセットにリトルエンディアン順で非表示セクターの数を書き込みます。リトルエンディアンとは、0xABCDEFGH
がGH EF CD AB
になることを意味します。 16進数が8桁より短い場合は、その前にゼロを付けます。
完了したら、保存して終了します(Ctrl + X)。
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
)に置き換える必要があります。
これらの後、デスクトップに到達できるはずです。今度はすべてのドライバーを探す必要がありますが、これはこのチュートリアルの範囲外です。
partimageとgdiskを使用してtahtを実行してみてください。 gdiskまたは別のパーティションプログラムを使用して、現在のディスクのサイズを変更するか、ディスクのどこかにパーティションを設定します。理想的には、プライマリパーティションになります。私は通常、Windows用にパーティション1を、Linuxデータ用に2+を保持しています。
パーティションが設定されると、gdiskまたは別のゴーストクローンを使用して、バックアップファイルまたはストレートイメージを他のドライブに作成できます。ファイルをそのようにドロップする必要がある場合、またはimgファイルを作成してから、vmdkファイルからホストシステムにコピーしてから、イメージソフトウェアを使用してパーティションを復元する場合は、ホストへのネットワーク接続を設定できます。ホストシステムで作成した場所に
必要に応じてgrubを構成し、そのntfsパーティションにブートを追加します。