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


9

私はディスクイメージを持っています。それは「全体」のディスクイメージです。たとえば、複数のパーティションが含まれていて、それらの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 Linux
#

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


パーティションを複製する場所とイメージファイルの場所を正確に指定してください!
fromnaboo 2013

回答:


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


あなたのlosetupコマンドは動作しませんでした-それは認識できないオプションを述べました--find。削除しましたが、認識できませんでした--show。それを外すと、が文句を言うよう--partscanになりました。そのとき、コマンドはすぐには何もしませんでした。他の方法を試すことにしましたが、両方とも「コマンドが見つかりません」partxkpartx返します。
JamesTheAwesomeDude 2013

私は走るだけですがdd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc skip=122880、それは戻りますdd: ‘2013-02-09-wheezy-raspbian.img’: cannot skip: Invalid argument
JamesTheAwesomeDude 2013

1
skipに依存するbsため、使用した場合bs=1M(またはこれを行うエイリアスがある場合)、それが機能しない理由を説明します。で試してくださいbs=512。また、fdiskが131072と言っているのに、なぜ122880なのでしょうか。また、私のlosetupはlosetup from util-linux 2.22.2です。partxについても同じです。kpartxはmultipath-tools(使用されたデバイスマッパー)からのものです。
frostschutz 2013

kpartxLVM用です。 partprobe別のパッケージから、仕事もします。
psusi 2013

@frostschutz画像ファイルの先頭から12280バイト。
JamesTheAwesomeDude 2013

0

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

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

if =クローンするイメージを設定します

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


1
私は予想されるエラーをdd: opening ‘2013-02-09-wheezy-raspbian.img2’: No such file or directory
受け取り

/path/to/2013-02-09-wheezy-raspbian.img2を画像ファイルへの実際のパスに置き換えましたか?:|
fromnaboo 2013

1
**** facepalm ****はい、あなたが言ったように、最後に2を追加しました
JamesTheAwesomeDude

これは機能しません、ddはそのようなイメージファイルのパーティションを表示しません
Michal Artazov

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

0

あなたはできる:

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

これで別のイメージに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をアンマウントしてください。

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