実際のパーティションが収まる場合、ddを使用して大きなSDカードを小さなSDカードに複製できますか?


9

いくつかのパーティションがある16GB SDカードを持っています(実際にはRaspberry Pi用のカードです)。プライマリカードのクローンを作成したい他の4GBカードがいくつかあります。プライマリカードの3つのパーティションは次のとおりです。

  • Raspブートパーティション、FAT、60MB
  • Linuxパーティション、ext2、1GB
  • 追加の「ストレージ」パーティション、FAT、1GB

を使用ddしてカードの画像を作成する場合:

dd if=/dev/sdb of=~/sd-card.bin

結果の.binのサイズは16GBです。dd実際に使用されているもの、つまり4 GB未満をコピーddして新しい4 GBカードにコピーする方法はありますか?または、私が使用すべきより良い解決策はありますか?


私は新しい4GBカードに正確なコンテンツを作成し、ddそれを他の多くのカードに複製しました。それでも、最初の問題を解決できるかどうか知りたいのですが。

回答:


9

ラズベリーpi自体ではなく、PCのLinuxまたはMacコンピューターを使用してコピーを実行していると思います。おそらく、ブロックサイズを追加する必要があります。

bs = 1Mまたはbs = 4Mを指定して、Raspberry piディスクに使用される1つおよび4つのmegを確認しました。大きな転送は小さな転送より速いので、ディスクを書き込むときはブロックサイズがより重要だと思います。これはディスクのブロックサイズを設定するのではなく、ddが使用する転送のサイズに影響を与えるだけです。大きなブロックサイズを設定する理由の1つは、フラッシュを書き込む前にフラッシュを消去する必要があることです。これは自動的に行われますが、最小消去サイズより大きい転送の場合は高速です。

「count」を使用して、ddによってコピーされるデータの総量を制限できます。「カウント」はブロック単位です。ソースディスクの最後のパーティションの最後が宛先のサイズより前である場合、必要な操作を実行できます。

のようなものdd if=/dev/sdb of=~/sd-card.bin bs=1M count=4000は、サイズが4000MBの画像を作成します。

詳細については、http://en.wikipedia.org/wiki/Dd_(Unix)およびhttp://elinux.org/RPi_Easy_SD_Card_Setupを参照してください。最後のパーティションの終わりやカードの合計サイズを見つける方法がわかりません。ただし、ディスクをフォーマットした場合は、おそらくこれを行う方法を知っているでしょう。


情報をありがとう。カウントオプションを知らなかった。やってみます。

@charlieカウントオプションを付けて、または付けずに試して、報告することができれば、魅力的です。ただし、ディスクのサイズがどのように報告されているか、ファイルを追加できるかどうか、サイズが変更されているかどうかを確認してください。'cosが、異なるサイズのディスクに関連してddが失敗すると、そのような問題が発生します。これは、2つの異なるサイズのドライブでddをめちゃくちゃにした例です。superuser.com/questions/538583/difficulty-resizing-a-partition 結局、クローン作成にddを使用しませんでした。
barlop

3

ウィリアムの答えを拡張すると、最後のパーティションの終わりをfdisk計算機を使って計算できます。

$ fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 7.4 GiB, 7948206080 bytes, 15523840 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00057540

Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        2048  186367  184320   90M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      186368 3667967 3481600  1.7G  5 Extended
/dev/mmcblk0p5      188416 3667967 3479552  1.7G 83 Linux

合計使用容量(バイト)=最後のパーティションの最終セクターXセクターサイズ(ここでは3667967 x 512)。

総使用容量(GB)=総使用容量(バイト)/ 1024 3(ここでは1.749023 GB)。

通常、データの最後の有用なビットまで切り詰められたイメージを作成することは重要ではないので、上記の例では、同じ以前の回答でウィリアムによって説明された方法を使用して2 GBのイメージを作成します

dd if=/dev/mmcblk0 of=/path/to/pi_updated.img bs=1M count=2048

画像の最後に含まれるのは、最後の有用なデータの後の役に立たないガフのほんの一部ですが、それは原則として、画像をメディアに書き戻すときに上書きされる役に立たないガフと同じです。

この方法は、ダースほどのクローンで私のために働いています。この方法に致命的な欠陥がある場合、それらはまだ表面化されていません。

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