私はホームラボの実験の一部として使用する数十のラズベリーパイを持っています。 1つのPiにRasbian(DebianのPi固有バージョン)のインストールを作成しましたが、それを残りのPiに広げたいと思います。
PisはMicroSDカードを使用しています(私が購入したものはすべて同じ8GBの容量と同じモデル番号です)。以前は、ddを使用して「ゴールドマスター」MicroSDカードのイメージを作成していましたが、8GB SDカードのバイト単位のイメージを作成し、すべてを書き込む必要があるため、長い時間がかかります(カードの合計使用スペースはおそらく300メガバイト以下ですが)。
3つのパーティションがあります。ブートパーティション(カーネルを含む)、ルートファイルシステムパーティション(OSの大部分を含む)、および3番目の特別なパーティション。
Ddを使用するのではなく、パーティションテーブルをファイルにコピーし、パーティションテーブルを新しいSDカードに書き戻し、信頼できるrsyncコマンドを使用してデータ自体だけをそれぞれにコピーする方法があるのではないかと考えていました。パーティション。
これは可能ですか?または、partedを使用して、パーティションテーブルを複製するスクリプトを作成する方がよいでしょうか。
ありがとう!
「...パーティションテーブルをコピーして書き込む...」について明示的に尋ねたとしても、本当に必要だと思います。
このような場合、「dd」の代わりに、必要なことを正確に実行できます。ディスククローンを作成しますが、ファイルシステムのプロパティ/構造/境界を考慮します。
そのような選択肢の1つはpartimage [1]: "...セクターベースでサポートされているファイルシステムを持つパーティションをイメージファイルに保存します[...]- Partimageはパーティションの使用された部分からのみデータをコピーします ... "
partimageはクライアントサーバーネットワーク環境でも使用でき、SystemRescueCD [2]のようにいくつかのlive-linux-CDに含まれていることに注意してください(簡単にするため)システムディスクのクローンを作成するプロセス)。
あなたがチェックしたいと思うかもしれないもう一つのツールはFSArchiverです。
[1] http://www.partimage.org/Main_Page
[2] http://www.sysresccd.org/SystemRescueCd_Homepage
追記:他の関連するURLを投稿しなくてすみませんが...これは私の最初の答えであり、2つ以上のURLを含めることはできません
確かに– dd
を使用してそれを行うことができます。 MSDOS、別名MBRパーティションテーブルは最初の512バイトにあります。
head -c 512 /dev/sdb > mbr.bin
cp mbr.bin /dev/sdc
partprobe
dd if=/dev/sde bs=512 count=1 of=mbr.bin
dd if=mbr.bin of=/dev/sdf
partprobe
ただし、これは実際のfilesystem構造を複製しません。とにかく、空白のパーティションでmkfs
を実行する必要があります。
代わりに、sfdisk
またはparted
ツールをスクリプト化して、特定のサイズのパーティションを作成することをお勧めします。
dd
フラグを使用してブロックサイズを増やすことにより、bs
を高速化できます。私は通常以下を使用します:dd if=/dev/source of=/dev/destination bs=8M
。正直なところ、dd
またはparted
が最良の選択肢であり、dd
が品質の優れた選択肢です(私の意見では)。
私は個人的に、UUIDの重複を避けるためにddを使用しないことを好みます。
Sfdiskを使用します。
-d, --dump
Dump the partitions of a device in a format that is usable as input to sfdisk. For example,
% sfdisk -d /dev/hda > hda.out
% sfdisk /dev/hda < hda.out
will correct the bad last extended partition that the OS/2 fdisk creates.
これはGPTでは機能しないことに注意してください-しかし...代わりにsgdiskを使用できます:
sgdisk -R=/dev/sdb /dev/sda # copy the table
sgdisk -G /dev/sdb # randomize the GUIDs
(十分な担当者がいれば、上記の@rayの回答にコメントしたでしょう)
データがSDカードの先頭にあることに満足している場合は、count
のdd
オプションを使用してください。
@rayの例に追加するには:
dd if=/dev/source of=/dev/destination bs=8M count=38
それぞれ8MBの38ブロックは304MBです。中間ファイルを使用している場合、これは304MBのサイズになり、書き戻すときにcount
オプションを省略できます。
dd if=/dev/source of=~/intermediate_file bs=8M count=38
dd if=~/intermediate_file of=/dev/destination bs=8M
中間ファイルには、クローンを作成するたびにSDカードからの読み取りが遅くなることがないため、(中間ファイルをHDDまたはSSDに保存すると仮定して)高速になるという追加の利点があります。