背景

背景

背景

SD カードが Raspberry pi 用に構成されています。目標は、SD カードを正確に複製 (OS、アプリ、データ) し、レプリカが rPi で元のマスター SD カードとまったく同じように機能することです。

更新: 仮定:

  • レプリケーションはUNIX系オペレーティングシステムで構成されたラップトップで実行されます
  • rPiから複製は実行されない
  • 対象のSDカードは同じメーカー/モデルです
  • ソース SD カードは異なるファイル システムでパーティション分割されています。

ここに画像の説明を入力してください

質問

SD カード スロットおよび USB SD カード リーダー/ライターを備えた Ubuntu HP ラップトップで使用できる UNIX クローン作成オプションは何ですか。

USB SD カード RW がリーダーかライターかによって違いはありますか?

目的(制約)は、追加のハードウェアを購入しないようにすることです。

ソリューションの観察

date; sudo sh -c 'cat sdcard.image >/dev/mmcblk0'; date

2019 年 6 月 3 日月曜日 17:53:18 EDT [sudo] ユーザーのパスワード: 2019 年 6 月 3 日月曜日 23:42:17 EDT

date; sudo sh -c 'pv sdcard.image >/dev/mmcblk0'; date

2019 年 6 月 4 日火曜日 00:33:50 EDT [sudo] ユーザーのパスワード: 119GiB 6:06:12 [5.56MiB/s] [==================================>] 100%
2019 年 6 月 4 日火曜日 06:43:05 EDT

フラッシュされた SD カードの gParted 分析では、同一のパーティション分割が示されています。

ここに画像の説明を入力してください

MacOS \ OSX

SDカードの場所を見つけるには:

diskutil list

書き込むときは必ず SD カードをアンマウントしてください。

sudo diskutil unmount /dev/disk#

ここで # は 1、2、3... です。

答え1

SDカードをあるカードから別のカードに正確にコピーしたいだけなら、ddコマンドラインで。

Raspberry Pi の独自の OS からこれを実行しないでください。これは、コピー中に OS が SD カードに書き込み、コピーが破損する可能性があるためです。

SD カードをコピーするには、両方を 2 つのリーダーに接続します (USB かどうかは関係ありません)。次に、 の内容を確認します/dev。カードは として表示されます/dev/sd*。例/dev/sdb: 内蔵ハードドライブがすでにオンになっている可能性があるので注意してください /dev/sda

どちらの SD カードもマウントされていないことを確認し、コマンド プロンプトで次のように入力して出力を確認します。

mount | grep /dev/sd

また、どのカードにどのファイル名があるかを知るために、次の出力を確認します (root として):

sudo blkid

実際にコピーするには(例:/dev/sdb から /dev/sdc へ)、次のように入力します(root として):

dd if=/dev/sdb of=/dev/sdc bs=4096 status=progress

答え2

Unixシステムでは、ストレージデバイスをデバイスファイルデバイス ファイルは、多くの点で通常のファイルと同じように動作します。特に、ストレージ デバイスの正確なコピーを作成するには、ソース デバイスのコンテンツをターゲット デバイスにコピーするだけです。

まず、ソースデバイスファイルとターゲットデバイスファイルを決定する必要があります。名前はUnixの種類と設定方法によって異なりますが、実際にはデバイスファイルは常にディレクトリの下にあります/dev。SDカードをマウントしている場合は、デバイスファイルが何であるかを見つけることができます。

df /media/sdcard1/some/file/on/the/sdcard

lsblkデバイス ファイルは最初の列にあります。SD カードを挿入したときのカーネル ログ メッセージやLinux のコマンドなど、他のツールでも同じ情報を提供できます。

カードにパーティションがある場合があります。その場合、パーティションが 1 つしかない場合でもカード全体をコピーします。これは、一部のブート時情報がパーティションの外部にある可能性があるためです。たとえば、Linux で がdf表示される場合は、だけではなく をコピーします。/dev/sdb1/dev/sdb/dev/sdb1

SD カードを抜き取って再度挿入すると、通常は以前と同じデバイス ファイル名になりますが、保証されるわけではありません。

コピーする前に、次の点を確認してください。

  • ソース デバイスがマウントされていないか、読み取り専用でのみマウントされています。
  • ターゲットデバイスがまったくマウントされていません。
  • ターゲット デバイスは少なくともソースと同じ大きさです。Linux では、lsblkデバイス サイズが表示されます。
  • 正しいターゲット デバイスがあります。以下のコマンドは確認を求めずにその内容を上書きすることに注意してください。

ソースデバイスが で/dev/sdb、ターゲットデバイスがであると特定したとします/dev/sdc。内容をコピーするには、root として次のコマンドを実行します。

cat /dev/sdb >/dev/sdc

sudoを使用する場合、リダイレクトは>rootとして行う必要があるため、次のように記述する必要があります。

sudo sh -c 'cat /dev/sdb >/dev/sdc'

あるいは、間違ったデバイスを誤って上書きしないようにするには、次の 2 つの手順を実行します。

  1. ユーザー (gatorbackこの例では ) に、ソース デバイス (dev/sdbこの例では ) からの読み取り権限と、ソース デバイス (/dev/sdcこの例では ) への書き込み権限を付与します。
    sudo setfacl -m user:gatorback:r /dev/sdb
    sudo setfacl -m user:gatorback:w /dev/sdc
    
  2. sudo なしでコピーを実行します。
    cat /dev/sdb >/dev/sdc
    

ディスク イメージをファイルにコピーし、そのイメージ ファイルをターゲット デバイスにコピーすることができます。これは、複数のコピーを作成する必要がある場合、SD カード リーダーが 1 つしかない場合、または間違った方向にコピーするリスクを軽減する場合に便利です。

  1. sudo cat /dev/sdb >sdcard.image
  2. ソースカードを引き出し、ターゲットカードを挿入します。
  3. オプションで、コンテンツを確認するには、イメージをマウントする例えばsudo mount -o loop -r sdcard.image /mnt
  4. sudo sh -c 'cat sdcard.image >/dev/sdb'

進捗情報を便利に確認したい場合は、pvの代わりにcat(pvはデフォルトでインストールされることはほとんどありませんが、ほとんどのディストリビューションでパッケージとして利用できます)。

関連情報