DD を使用してディスク イメージからパーティションを複製するにはどうすればよいですか?

DD を使用してディスク イメージからパーティションを複製するにはどうすればよいですか?

ディスクイメージを持っています。それは「全体の」ディスクイメージで、例えば複数のパーティションを含んでおり、クローンを作成したいのですが1つそれらの 1 つ (最初の 1 つではありません) を、複数のパーティションがある外付けドライブのパーティションにコピーします (ディスクの最初のパーティションにクローンを作成するわけでもありません...)

イメージを FDisk すると次のようになります:

# fdisk -l 2013-02-09-wheezy-raspbian.img

ディスク 2013-02-09-wheezy-raspbian.img: 1939 MB、1939865600 バイト
255 ヘッド、63 セクター/トラック、235 シリンダー、合計 3788800 セクター
単位 = 1 セクター * 512 = 512 バイト
セクターサイズ(論理/物理):512バイト/512バイト
I/O サイズ (最小/最適): 512 バイト / 512 バイト
ディスク識別子: 0x00014d34

                         デバイス ブート 開始 終了 ブロック ID システム
2013-02-09-wheezy-raspbian.img1 8192 122879 57344 c W95 FAT32 (LBA)
2013-02-09-wheezy-raspbian.img2 122880 3788799 1832960 83 Linux
#

ブロックデバイスは次のようになります。

# fdisk -l /dev/sdc

ディスク /dev/sdc: 8014 MB、8014266368 バイト
247 ヘッド、62 セクター/トラック、1022 シリンダー、合計 15652864 セクター
単位 = 1 セクター * 512 = 512 バイト
セクターサイズ(論理/物理):512バイト/512バイト
I/O サイズ (最小/最適): 512 バイト / 512 バイト
ディスク識別子: 0x00000000

   デバイス ブート 開始 終了 ブロック ID システム
/dev/sdc1 2048 131071 64512 e W95 FAT16 (LBA)
/dev/sdc2 131072 15652863 7760896 83 リナックス
#

イメージの 2 番目のパーティションをブロック デバイスの 2 番目のパーティションに置き換えます。末尾の破損した空き領域については心配しないでください。GParted を使用してそれをクリーンアップします。いずれにしても、他の用途に必要です。

答え1

# losetup --find --show --partscan --read-only 2013-02-09-wheezy-raspbian.img
/dev/loop7
# dd if=/dev/loop7p2 of=/dev/narnia bs=1M

--partscan動作しない場合は、次のいずれかを使用することもできます。

# partx -a /dev/loop7
# kpartx /dev/loop7

または同様のパーティション マッピング ソリューション。

おそらく最初にマウントして、それが正しいものかどうかを確認する必要があります。

もちろん、fdisk の出力を読み取って、または直接指定することもできますddskip=131072つまり、その数の入力ブロックをスキップして、パーティションが配置されている場所から読み取りを開始できます。ただし、ループ デバイスを使用して実際のパーティションを確認する方が便利です。

答え2

次のようなものが機能するはずです:

dd if=/path/to/2013-02-09-wheezy-raspbian.img2 of=/dev/sdc2 bs=4096 conv=notrunc,noerror

もし= 複製したい画像を設定します

= イメージをクローンするターゲットパーティションを設定します

答え3

  1. イメージをループバック デバイスとしてマウントします。losetup -fP yourImage.img
  2. これで、イメージの各パーティションに直接アクセスできるようになりました。 を使用する必要がある場合はddを実行できますdd if=/dev/loop0p1 of=image.imgが、 の方が良いと思いますcat。ルートシェルでは、 を実行するだけですcat /dev/loop0p1 > image.img。どちらの例でも、最初のパーティションが必要で、割り当てられたループバックデバイスが/dev/loop0
  3. ループバック デバイスの使用が終わったら、 を使用して切断できますlosetup -d /dev/loop0。ここでも、 が/dev/loop0ループバック デバイスであると想定しています。

答え4

2番目のパーティションだけを別のイメージにコピーするには、

dd if=2013-02-09-wheezy-raspbian.img of=second.img bs=512 skip=122880

その後、ディスク上のパーティションの代わりにコピーすることができます

dd if=second.img of=/dev/sdc2 bs=512

あるいは1つのコマンドで実行することもできます

dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc2 bs=512 skip=122880

書き込む前に、必ず /dev/sdc2 をアンマウントしてください。

関連情報