web-dev-qa-db-ja.com

DDを使用してディスクイメージからパーティションを複製する方法

私はディスクイメージを持っています。それは「全体」のディスクイメージです。たとえば、複数のパーティションが含まれていて、それらのone(最初のものではない)だけを外部のパーティションにクローンしたいのです。複数のパーティションが存在するドライブ(ディスクの最初のパーティションにクローンを作成していません...)

イメージを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 Linux 
#

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

9
# 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または直接何か、つまり、入力のブロックをスキップして、パーティションが配置されている場所から読み取りを開始します。ただし、ループデバイスを使用して実際のパーティションを表示する方が適しています。

8
frostschutz

あなたはできる:

Sudo partx --add -v 2013-02-09-wheezy-raspbian.img 
# time Sudo dd if=/dev/loop0p1 |pv -s 80M |Sudo dd of=/dev/sdc1
time Sudo dd if=/dev/loop0p2 |pv -s 4G |Sudo dd of=/dev/sdc2
Sudo partx --delete -v /dev/loop0
0
Frank Breitling

これで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をアンマウントしてください。

0
Michal Artazov
  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がループバックデバイスであると想定しています。
0
John Leuenhagen

このようなものはうまくいくはずです:

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

if=複製するイメージを設定します

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

0
fromnaboo