背景
SDカードがRaspberrypi用に構成されています。目標は、SDカード(OS、アプリ、データ)を正確に複製して、レプリカが元のマスターSDカードとまったく同じようにrPiで機能するようにすることです。
更新:想定:
- レプリケーションは、UNIXライクな
オペレーティングシステムで構成されたラップトップで実行されます - rPiから複製を実行してはなりません
- 対象のSDカードは同じメーカー/モデルです
- ソースSDカードはさまざまなファイルシステムでパーティション化されています:
質問
SDカードスロットとUSBSDカードリーダー/ライターを備えたUbuntuHPラップトップで使用できるUNIXクローン作成オプション。
USB SDカードRWがリーダーまたはライターのどちらであるかによって違いはありますか?
目的(制約)は、追加のハードウェアを購入しないようにすることです。
ソリューションの観察
date; sudo sh -c 'cat sdcard.image >/dev/mmcblk0'; date
Mon Jun 3 17:53:18 EDT 2019
[sudo]ユーザーのパスワード:
Mon Jun 3 23:42:17 EDT 2019
date; sudo sh -c 'pv sdcard.image >/dev/mmcblk0'; date
Tue Jun 4 00:33:50 EDT 2019
[sudo]ユーザーのパスワード:
119GiB 6:06:12 [5.56MiB / s] [================================>] 100%
Tue Jun 4 06:43:05 EDT 2019
フラッシュされたSDカードのgParted分析は、同一のパーティショニングを示しています:
承認された回答:
Unixシステムは、デバイスファイルを介してストレージデバイスを利用できるようにします。デバイスファイルは、多くの点で通常のファイルのように動作します。特に、ストレージデバイスの正確なコピーを作成するには、ソースデバイスのコンテンツをターゲットデバイスにコピーするだけです。
まず、ソースデバイスファイルとターゲットデバイスファイルを決定する必要があります。名前はUnixバリアントとその構成方法によって異なりますが、実際には、デバイスファイルは常に/dev
の下にあります。 ディレクトリ。 SDカードをマウントしている場合は、デバイスファイルが何であるかを確認できます
df /media/sdcard1/some/file/on/the/sdcard
デバイスファイルは最初の列にあります。 SDカードを挿入したときのカーネルログメッセージやlsblk
など、他のツールでも同じ情報を提供できます。 Linuxでのコマンド。
カードにパーティションがある可能性があります。その場合、一部の起動時情報がパーティションの外部にある可能性があるため、単一のパーティションがある場合でも、カード全体をコピーします。たとえば、df
の場合 /dev/sdb1
を表示します Linuxでは、/dev/sdb
をコピーします /dev/sdb1
だけではありません 。
SDカードを引き出して再度挿入すると、通常は以前と同じデバイスファイル名になりますが、これは保証されません。
コピーする前に、次のことを確認してください。
- ソースデバイスがマウントされていないか、読み取り専用でのみマウントされています。
- ターゲットデバイスがまったくマウントされていません。
- ターゲットデバイスは、少なくともソースと同じ大きさです。 Linuxでは、
lsblk
デバイスサイズを表示します。 - 正しいターゲットデバイスがあります。以下のコマンドは、確認を求めずに内容を上書きすることに注意してください!
ソースデバイスが/dev/sdb
であることを確認したとします。 ターゲットデバイスは/dev/sdc
です。 。内容をコピーするには、rootとして次のコマンドを実行します。
cat /dev/sdb >/dev/sdc
sudoを使用する場合、リダイレクト>
ルートとして発生する必要があるため、次のように記述する必要があります
sudo sh -c 'cat /dev/sdb >/dev/sdc'
または、誤って間違ったデバイスを上書きしないようにするために、次の2つの手順に進むことができます。
- ユーザーに提供する(
gatorback
私の例では)ソースデバイスから読み取る権限(dev/sdb
私の例では)そしてソースデバイス(/dev/sdc
私の例では)。sudo setfacl -m user:gatorback:r /dev/sdb sudo setfacl -m user:gatorback:w /dev/sdc
- sudoを使用せずにコピーを実行します。
cat /dev/sdb >/dev/sdc
ディスクイメージをファイルにコピーしてから、イメージファイルをターゲットデバイスにコピーできます。これは、複数のコピーを作成する必要がある場合、SDカードリーダーが1つしかない場合、または間違った方向にコピーするリスクを減らす場合に役立ちます。
-
sudo cat /dev/sdb >sdcard.image
- ソースカードを引き出し、ターゲットカードを挿入します。
- オプションで、イメージをマウントしてコンテンツを確認します。例:
sudo mount -o loop -r sdcard.image /mnt
。 -
sudo sh -c 'cat sdcard.image >/dev/sdb'
進捗情報を便利に表示したい場合は、pv
を使用してください cat
の代わりに (pv
デフォルトでインストールされることはめったにありませんが、ほとんどのディストリビューションでパッケージとして利用できます。