作成された既存のパーティションを使用するイメージがありますdd if=/dev/sdXN of=image.bin
。これで、このイメージを仮想マシンの基盤として使用したいと思います。 VirtualBoxで利用可能な形式に画像を変換する方法を知っています。
問題は、「ディスク」イメージは実際にはパーティションイメージにすぎないため、MBRやパーティションテーブルを含まないことです。これにより、仮想マシンの起動が非常に困難になります。
パーティションイメージが与えられたら、正しいディスクイメージ(パーティションテーブルを含む)を簡単に作成する方法はありますか?
答え1
ホストコンピュータでこれを行うことができます。ほとんどのツールはfdisk
ファイルに対して機能しますkpartx
ファイル内のパーティションにアクセスできます。
新しい空の100GiBスパース画像を作成します(パーティション画像サイズよりわずかに大きくします)。
dd if=/dev/zero of=myvm.img bs=1G count=0 seek=100
パーティションイメージファイル
fdisk
fdisk myvm.img
さまざまなデバイスでイメージファイルのパーティションを有効にする
sudo kpartx -a myvm.img
パーティションイメージをパーティションにコピー
sudo cp image.bin /dev/mapper/loop0p1
パーティション全体を埋めるためのファイルシステムの拡張
sudo resize2fs /dev/mapper/loop0p1
パーティションを閉じる
sudo kpartx -d myvm.img
ループバックデバイスの取り外し
sudo losetup -D
答え2
元の質問はずっと前に解決されたと確信していますが、同様の問題がある人は次のとおりです。
完全なイメージのコピーを防ぐ 1 つの方法は、パーティション表とパーティションの内容の別々の拡張ファイルを参照する .vmdk 形式のイメージを作成することです。
しばらく前に実行したテストには、.vmdkファイルに次のコードが含まれていました。
RW 63 FLAT "parttable.bin" 0
RW 585937489 FLAT "partition-image.bin" 63
すなわち、オフセット0から始まるセクタ63はソースファイル「parttable.bin」から読み出されるが、セクタ63以上はソースパーティションダンプ「partition-image.bin」から読み出される。 (もちろん、63を最初のパーティションの実際のオフセット(現在は通常2048)に置き換えます。)
最終結果は、VBox内で長いコピー操作を実行することなく、パーティションイメージの前にパーティションテーブルを追加したように見えます。
仮想マシン内でドライブを分割し、オフセットが正しい場合は、新しく作成されたパーティションにパーティションイメージの内容を表示する必要があります。
答え3
興味深い質問です。これが私がやろうとしていることです。
- 適切なサイズのディスクでVMを作成し、回復CDから起動します。
- 何らかの方法で既存のディスクイメージ(nfs、cifsなど)にアクセスします。
- 仮想マシンのローカルディスクに必要なパーティションを作成します。
- dd を使用して VM ディスクのパーティションにパーティションイメージを書き込みます。
これを完了したら、ブートローダを更新する必要があります。 GRUBを使用すると仮定して、新しく作成されたパーティションをマウントしてからそのパーティションにchrootして実行しますupdate-grub
(ただし、正しく機能するには設定ファイルを調整する必要があるかもしれませんので注意してください)。
頑張ってください!
答え4
私は個人的にを使用することを好みますdd
。
これには512バイトのセクタがあるとします。 2048バイトセクタの場合があるかもしれませんので、数字を変えて計算してみてください。
それぞれの場合に512MBのテストファイルを使用しました。たとえば、次のようになります。
dd if=/dev/zero of=testfs.img bs=512 count=1M mkfs.ext4 testfs.img
膜バイオリアクター
構成
私は個人的に最初のMB(2048セクタ)を先頭に追加することを好みます。
dd if=testfs.img skip=2048 bs=512 of=full.img
最後に、fdiskを実行してパーティションテーブルを作成するか、独自のパーティションテーブルにコピーし、デフォルト値を使用して1つのパーティションを作成しました。
確認中
確認するには、ループパーティションを作成して自動検出します。
sudo losetup -fP full.img
file
そして、結果として分割されたループバックデバイスで実行します。
sudo file -s /dev/loop2p1 /dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)
GPT
構成
私は個人的に最初のMB(2048セクタ、gdiskは1MBにソートされているので、デフォルトではその数を使用するため)を開始MBRとして先頭に追加し、34セクタを最後(または2048フルMB)に追加することを好みますします。終了GPT(終了セクタは異なる場合があります)後続GPTを省略すると、データが失われる可能性があります。
dd if=testfs.img skip=2048 bs=512 of=full.img dd if=/dev/zero seek=1050624 bs=512 of=full.img count=34
最後に、gdiskを実行してパーティションテーブルを作成するか、独自のパーティションテーブルにコピーし、デフォルト値を使用して1つのパーティションを作成しました。
確認中
確認するには、ループパーティションを作成して自動検出します。
sudo losetup -fP full.img
file
そして、結果として分割されたループバックデバイスで実行します。
sudo file -s /dev/loop2p1 /dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)
この方法を使用すると、推測、サイズ変更、または手動ソートは発生しません。