いくつかのパーティションがある16GB SDカードを持っています(実際にはRaspberry Pi用のカードです)。プライマリカードのクローンを作成したい他の4GBカードがいくつかあります。プライマリカードの3つのパーティションは次のとおりです。
dd
を使用してカードの画像を作成する場合:
dd if=/dev/sdb of=~/sd-card.bin
結果の.binのサイズは16GBです。 dd
を使用して実際に使用されているものだけをコピーする方法はありません。つまり、4GB未満で、これをdd
を新しい4GBカードにコピーできますか?または、私が使用すべきより良い解決策はありますか?
Raspberry Pi自体ではなく、PCのLinuxまたはMacコンピューターを使用してコピーを実行していると思います。おそらく、ブロックサイズを追加する必要があります。
Bs = 1Mまたはbs = 4Mを指定して、Raspberry Piディスクに使用される1メガと4メガを確認しました。大きな転送は小さな転送より速いので、ディスクを書き込むときはブロックサイズがより重要だと思います。これはディスクのブロックサイズを設定するのではなく、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 を参照してください。最後のパーティションの終わりやカードの合計サイズを見つける方法がわかりません。ただし、ディスクをフォーマットした場合は、おそらくこれを行う方法を知っているでしょう。
William's answer を拡張すると、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)=総使用容量(バイト)/ 10243 (ここでは1.749023 GBです)。
通常、データの最後の有用なビットまで切り詰められたイメージを作成することは重要ではないため、上記の例では、Williamが説明した方法を使用して2 GBのイメージを作成します 以前の回答と同じ :
dd if=/dev/mmcblk0 of=/path/to/pi_updated.img bs=1M count=2048
画像の最後に含まれるのは、最後の有用なデータの後の役に立たないガフの小さな部分ですが、それは原則として、画像をメディアに書き戻すときに上書きされる役に立たないガフと同じです。
この方法は、ダースほどのクローンで私のために働いています。この方法に致命的な欠陥がある場合、それらはまだ表面化されていません。