ループデバイスにms-dosパーティションテーブルを追加するには?

ループデバイスにms-dosパーティションテーブルを追加するには?

最近、ディスクパーティションでdd操作を行いました。仮想マシンでディスクとして使用したいです。ディスクにパーティションテーブルがないためできません。

ループデバイス用のパーティションテーブルを持つことはできますか?どのように?

明らかに同様の問題がここにあります。すべてのデータをコピーせずにこれを行う方法を知っている人がいれば良いでしょう。

私がやった dd if=/dev/sda1 of=myfile

sdaディスクが大きすぎるため、sdaディスク全体をコピーできません。

答え1

元のドライブがまだ残っている場合は、イメージを削除して次のコマンドを使用して再作成します。

dd if=/dev/sda1 of=myfile bs=512 seek=2048

これにより、後でパーティションテーブルを追加するために最初に通常1MiBのスペースが残ります。

未使用のチャンクにすべてのジャンクを含むフルネイティブイメージファイルの代わりに、イメージにqcow2を使用することを検討することもできます。

答え2

このような?

sda1_size=$((`blkdev --getsize64 /dev/sda1`/1024/1024+1))
dd if=/dev/sda of=myfile bs=1M count=$(($sda1_size+1))

sda全体のddを起動しますが、最初のパーティションを上書きするまでのみコピーします。これは、数に+1MiBを追加することによって達成されます。これは、sda1がディスクの先頭にあると仮定します。 1MiBを超える間隔がある場合は、上に+1を追加してください。

数学に加えて、パーティションプログラムを見て、パーティションのMiBサイズを確認して、もう少し余裕を持って追加できます。

関連情報