将来の参考のために、ここで私が最終的にどのように進んだか、さまざまな問題や遭遇した落とし穴についてのコメントをいくつか示します。
1. Linuxライブシステムでマシンを起動する
最初のステップは、Linuxライブシステムを使用して、イメージを作成するディスクを含むマシンを起動することでした。
注:私の最初のアイデアはUbuntu Live USBディスクを使用することでしたが、マシンはUSBからの起動をサポートしていなかったため、古いKnoppixライブCDを使用する方が簡単であることがわかりました。
2.を使用dd
してディスクのイメージを作成し、データをパイプ処理しますssh
次に、すべてのディスクコンテンツをローカルサーバー上のファイルイメージにコピーしdd
、データを使用してパイプ処理しましたssh
。
$ dd if = / dev / hdX bs = 4k conv = noerror、sync | ssh -c blowfish myuser @ myserver 'dd of = myfile.dd'
ここでいくつかのコメント:このメソッドはすべてのディスクの内容を読み取るため、非常に長い時間がかかる可能性があります(80Gbディスクの場合は5時間かかりました)。ボトルネックはネットワークではなく、実際にはディスク読み取り速度です。コピーを起動する前に、BIOS /ディスク/システムパラメーターをチェックして、ディスクとマザーボードが可能な限り最高の速度で動作していることを確認することをお勧めします(これは、コマンドhdparm -i
を使用してテストを実行することで確認できますhdparm -Tt /dev/hdX
)。
注:dd
操作の進行状況を出力しませんが、別の端末からプロセスPIDにUSR1信号を送信することにより、強制的にdd
実行できます。
$ kill -USR1 PIDofdd
3.未使用のスペースを再利用する
この時点で、ソースマシンは不要になり、移行先サーバー(Linuxを実行しているサーバー)のみで作業します。VirtualBoxを使用してrawディスクイメージをVHD形式に変換しますが、その前に未使用のブロックをゼロにして、VirtualBoxが最終ファイルでそれらのスペースを割り当てないようにすることができます。
そのために、ループバックデバイスとしてイメージをマウントしました。
$ mount -o loop,rw,offset=26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd /mnt/tmp_mnt
$ cat /dev/zero > zero.file
$ rm zero.file
注:ディスクイメージ内のパーティションの開始を示すオフセットparted
は、イメージファイルで使用して取得できます。
$ parted /mnt/mydisk/myfile.dd
(parted) unit
Unit? [compact]? B
(parted) print
Model: (file)
Disk /mnt/mydisk/myfile.dd: 80026361856B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32256B 21936821759B 21936789504B primary ntfs boot
2 21936821760B 80023749119B 58086927360B extended lba
5 26608813056B 80023749119B 53414936064B logical ntfs
注2:デフォルトのLinuxカーネルNTFSドライバは読み取り専用アクセスを提供するため、ユーザースペースntfs-3g
ドライバをインストールして使用する必要があります。そうしないと、ディスクへの書き込みでエラーが発生します!
4. VBoxManageを使用してVHDイメージを作成します
この時点で、VirtualBoxユーティリティを使用して生の画像をVHDファイルに変換できます。
VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD