昨日すべてを研究に費やし、ようやくWindows XPを起動することができました。他のOSも同様です。しかし、操作はすべてですが、些細なことではありません。
これは危険な操作なので、貴重なデータをバックアップすることをお勧めします。
手順は次のとおりです。
準備
Windows XPの場合、現在のディスク文字とパーティションの設定を忘れるようにする必要があるため、移行前に仮想マシンのHKEY_LOCAL_MACHINE / MountedDevicesキーからすべての値を消去する必要があります。カーネルは、次回の再起動時にそれを再構築します。Linux仮想マシンでは、これは移行後にfstabを修正することを意味します。
VDIイメージのマウント
MBRも含まれているため、VDI全体をパーティションにコピーすることはできません。仮想パーティションのみをコピーする必要があるため、最初にVDIをマウントする方法を見つける必要があります。
nbd
ドライバーとqemu-nbd
コマンドが必要です。Ubuntuでは、qemu-kvm
パッケージに含まれています。
最初にnbdドライバーをロードします。
# modprobe nbd
これにより、いくつかのnbd
デバイスがになり/dev
ます。
次に、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をセカンダリハードドライブとして仮想マシンに追加してから、ライブLinux ISOをdd
パーティションに使用します。
NTFSパーティションのブートセクターの修正
これはハッキングの部分です。
準備はほぼ整っていますが、ファイルシステムの非表示セクターの数をoffsetに設定する必要があるため、Windows XPは起動しません0x1C
。これは基本的にNTFSパーティションの前のいくつかのセクターです。この番号はfdisk -ul
コマンドから取得できます。start
出力のフィールドには、特定のパーティションが開始するセクターが示されます。これは、基本的にパーティションの前のセクターの数です。そこから番号を取得し、たとえばgcalctoolを使用して16進数に変換します。
次のhexedit
ように、パーティションを開きます:
# hexedit /dev/sda4
次に、1C
オフセットでリトルエンディアンの順序で隠しセクターの数を書き込みます。リトルendiean手段は:0xABCDEFGH
となりますGH EF CD AB
。ヘキサ番号が8桁より短い場合は、ゼロの前に付けます。
完了したら、保存して終了します(Ctrl + X)。
GRUBのセットアップ
GRUBにそのパーティションを直接起動するように指示する必要があります。GRUBには次のメニューエントリを追加します。
title Microsoft Windows XP Professional
root (hd0,3)
savedefault
makeactive
chainloader +1
(hdX, Y)
パーティションを識別する場所。Xはデフォルトのハードディスクでは0、1は/dev/sda
、2は/dev/sdb
などです。Yはパーティション番号です。0 /dev/sda1
、1 /dev/sda2
等、
これは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などのhexeditorを使用して修正する必要があります。私の場合\DosDevices\C:
、C を見つけて別のドライブ文字に置き換える必要がありますF
。
これらの後、デスクトップに到達できるはずです。すべてのドライバーを探す必要がありますが、これはこのチュートリアルの範囲外です。
ソース
Windows XPを別のパーティションに移動する
LinuxでVDIをマウントする