web-dev-qa-db-ja.com

ある同一のディスクから別のディスクにパーティションテーブルをコピーして書き込むにはどうすればよいですか?

私はホームラボの実験の一部として使用する数十のラズベリーパイを持っています。 1つのPiにRasbian(DebianのPi固有バージョン)のインストールを作成しましたが、それを残りのPiに広げたいと思います。

PisはMicroSDカードを使用しています(私が購入したものはすべて同じ8GBの容量と同じモデル番号です)。以前は、ddを使用して「ゴールドマスター」MicroSDカードのイメージを作成していましたが、8GB SDカードのバイト単位のイメージを作成し、すべてを書き込む必要があるため、長い時間がかかります(カードの合計使用スペースはおそらく300メガバイト以下ですが)。

3つのパーティションがあります。ブートパーティション(カーネルを含む)、ルートファイルシステムパーティション(OSの大部分を含む)、および3番目の特別なパーティション。

Ddを使用するのではなく、パーティションテーブルをファイルにコピーし、パーティションテーブルを新しいSDカードに書き戻し、信頼できるrsyncコマンドを使用してデータ自体だけをそれぞれにコピーする方法があるのではないかと考えていました。パーティション。

これは可能ですか?または、partedを使用して、パーティションテーブルを複製するスクリプトを作成する方がよいでしょうか。

ありがとう!

3
Harsha K

...パーティションテーブルをコピーして書き込む...」について明示的に尋ねたとしても、本当に必要だと思います。

  • ゴールドマスターイメージを他の新しい同一のSDカードに複製するには:
  • 300 MBのデータしか含まれていないため、8GBのソースSDカード全体を「dd-ing」しないようにします。

このような場合、「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を含めることはできません

5

確かに– 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ツールをスクリプト化して、特定のサイズのパーティションを作成することをお勧めします。

3
user1686

ddフラグを使用してブロックサイズを増やすことにより、bsを高速化できます。私は通常以下を使用します:dd if=/dev/source of=/dev/destination bs=8M。正直なところ、ddまたはpartedが最良の選択肢であり、ddが品質の優れた選択肢です(私の意見では)。

3
Ray

https://unix.stackexchange.com/questions/12986/how-to-copy-the-partition-layout-of-a-whole-disk-using-standard-tools の複製)

私は個人的に、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
1
rrauenza

(十分な担当者がいれば、上記の@rayの回答にコメントしたでしょう)

データがSDカードの先頭にあることに満足している場合は、countddオプションを使用してください。

@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に保存すると仮定して)高速になるという追加の利点があります。

0