LinuxライブシステムからVHDディスクイメージを作成する方法


29

繰り返しになりますが、他の情報源(主にGoogle ;-))はあまり役に立たなかったため、ここSuperUserの専門家に頼らなければなりません...

したがって、基本的には、物理​​ディスクのVHDイメージを作成して、アーカイブ/アクセス/仮想マシンにマウントすることもできます。現在、Web上でそれを行う方法に関する記事やチュートリアルが多数ありますが、私が達成したい条件を完全に満たしているものはありません。

  • Windows 7はネットワーク経由でネイティブにマウントでき、他の多くのプログラムがそれを使用できるため、宛先ファイルVHDイメージにしたいと思います(VirtualBoxなど)
  • イメージしようとしているディスクにはWindows XPインストールが含まれているため、理論的にはdisk2vhdユーティリティを使用できますが、そのWindows XPインストールの起動を必要としないソリューションを見つけたい(つまり、ディスクを読み取り専用にしたい) )
  • したがって、ある種のライブシステム(USBスティックまたはネットワークから実行)を含むソリューションを探していました。

ただし、出会ったすべてのソリューションは、Linuxでコマンドをdisk2vhd使用するか使用します。このddコマンドは、ディスクの完全なコピー(空のブロックも含む)を実行し、VHDファイルを出力しません。LinuxにVHDファイルを直接作成できるツール/プログラムはありますか?または、空のブロックにスペースを割り当てずに、ddを使用して作成されたrawディスクイメージをVHDファイルに変換できますか?どうしますか?

いつものように、アドバイスやコメントは大歓迎です!!


BSDには、他の形式の中でvhdイメージを作成できるmkimgというツールがあります。
ジュリアン

回答:


30

将来の参考のために、ここで私が最終的にどのように進んだか、さまざまな問題や遭遇した落とし穴についてのコメントをいくつか示します。

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

.imgファイルを使用してvdfuseqemu-nbdまたは.imgファイルに変換してvhdイメージをマウントできるはずです(詳細:askubuntu.com/questions/19430/…
Francesco

1
遅いマシンでは、sshの暗号化がボトルネックになる場合があります。暗号化が不要な場合は、代わりにnetcat(man nc)の使用を検討してください。
ジェレミー14年

2
ゼロファイルを作成する前に、マウントされたディスクにcdするのを忘れていました:mount -o loop、rw、offset = 26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd / mnt / tmp_mnt; cd / mnt / tmp_mnt; cat / dev / zero> zero.file; rm zero.file; また、ddの代わりにpvを使用して、すぐに進行状況を表示できます。
Smeterlink

1
たとえばbs=4M、プロセスを大幅に高速化するために、おそらくddで大きなブロックサイズを使用する必要があります。
フリッツ

13

私はOPとまったく同じことをしようとして(Windowsインストールをレスキューしている間)、そのための新しいツールを作成することになりましたntfsclone2vhd

その後、次のようなことを行うだけです。

ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd

1
ゲームに3年遅れましたが、このページは関連するキーワードのGoogleヒットのトップであるため、将来的には貧しい人々の助けになる可能性があります。
イルカ

2
このソリューションはトップに投票する必要があります。それは、make私が何時間もの検索で見つけた、はるかに簡単なソリューションです(Linuxのコピーを必要とするバー)。イールカの主導権を握ったブラボー!
user66001

3

1つのアプローチは、VirtualBoxとntfsprogsパッケージという便利なテクノロジーを使用することです。

VirtualBoxの最近のバージョンでntfsprogsは、ntfscloneユーティリティを提供しながらVHDハードディスクファイルを作成できます。その名前が示すように、ntfscloneNTFSファイルシステムのクローンを作成します。未使用のディスクブロックをスキップして、ファイルシステムレベルでそれを行うと信じています。

そのため、開始するには、VirtualBoxで新しいVMを作成し、新しい空のVHDファイルドライブをプロビジョニングします。VHDドライブは、クローンを作成する物理ドライブで使用中のデータのサイズと同じ大きさである必要があります(実際には、多少の余裕を持たせるために少し大きくします)。

次に、ntfsprogsパッケージとを含むLinuxライブCDを見つけますopenssh-server。私はこのためにSystem Rescue CDが好きですが、DebianベースまたはUbuntuベースのライブCDはほぼすべて同様に機能するはずです。

Linux Live CDでVirtualBox VMを起動sshdし、VM内で起動して、リモートでコマンドを実行できるようにします。空のVHDドライブを適切にパーティション分割します。好みのパーティション分割ツールを使用します(私は昔ながらのfdiskものが好きですが、やや古い学校です)。

LinuxライブCDの別のコピーを使用して、クローンを作成する物理ディスクを含むマシンを起動します。VirtualBox VMとこのマシンは、ネットワークを介して相互にアクセス可能であると想定しています。このマシンで、次のコマンドを実行します(すべて1行で)。

ntfsclone --save-image -o - /dev/sdXX |
    ssh root@VirtualBox-VM 'ntfsclone --restore-image --overwrite /dev/sdYY -'

ここで:

  • /dev/sdXX クローンを作成する物理ドライブのデバイス名(ローカルマシン上)
  • /dev/sdYY VHD宛先ドライブのデバイス名(VM内)です。

説明:ntfscloneパイプラインの最初のコマンドはソースNTFSファイルシステムのイメージを抽出してsshトンネル経由で送信し、2番目のntfscloneコマンドはイメージを受信して​​VHDドライブに復元します。

操作が完了すると、VHDファイルには、元の物理ディスクのファイルごとの完全なクローンが含まれている必要があります(不良セクターなど、プロセスが途中で中断する可能性のあるハードウェアエラーがない限り)。

最後にしたいことの1つはchkdsk、VHDドライブでWindowsを実行することです。これにより、クローン作成で問題が発生しないことを確認できます(問題はないはずですが、ちょっと私はこれらのことについて少し妄想しています)。


こんにちは、提案されたソリューションに感謝します!最終的に、バックアップするディスクにいくつかのパーティションがあり、バックアップするマシンのVirtualBoxを簡単に使用できなかったため、別の方法を使用しました(詳細については私の回答を参照)が、VirtualBoxとsshを使用する提案は非常に有用でした!
フェデリコ

1

(私はこれが古い投稿であることを知っていますが、これは少なくとも他の人に役立つでしょう。)

Linuxで本当にイメージを作成できる必要がありますか?WindowsハードドライブをVHDにバックアップしようとしていると思います。LinuxファイルシステムをVHDコンテナーにカプセル化できるとは思いません。

Disk2vhdと呼ばれる無料のSysInternalsユーティリティは、現在実行中のWindows XP以降のシステムのVHDを作成します。これは、USBマウントされたドライブのイメージングでも機能するはずです。


0

最近、ライブLinuxシステムのクローンを作成しようとしています。

完璧なソリューションはまだありません。あなたが試すことができる2つの方法を提案してください:

(1)VMware vConverter(無料)

宛先としてvsphere hypervisor(無料)をインストールする必要があります。

私はこの数日前に成功しました。VirtualBoxにvSphereをインストールすると思います。

ここを参照:http : //xrubenx.blogspot.com.au/2010/01/vmware-converter-standalone.html

(2)これを使用しますhttp://www.r1soft.com/tools/linux-hot-copy/

今週末、R1Softホットコピーを試します。


このため、ホットコピーは試しません。wiki.r1soft.com
display / LTR1D /

0

WindowsでライブCDを使用することもできます。Microsoftの公式ではありませんが、動作します。cdまたはusbドライブに置くことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.