GNU/Linux >> Linux の 問題 >  >> Linux

SDカードを複製しますか?

背景

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 デバイスサイズを表示します。
  • 正しいターゲットデバイスがあります。以下のコマンドは、確認を求めずに内容を上書きすることに注意してください!
関連:「sh互換」とはどういう意味ですか?

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

cat /dev/sdb >/dev/sdc

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

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 デフォルトでインストールされることはめったにありませんが、ほとんどのディストリビューションでパッケージとして利用できます。


Linux
  1. Ddは信じられないほど速く完了しますか?

  2. Pci-stubとVfio-pci?

  3. AsoundrcでデフォルトのAlsaデバイス(hw:0,0)を設定しますか?

  1. setpci コマンド – PCI デバイスを構成する

  2. デバイスに空き容量がありません

  3. 永久ループ装置?

  1. Linuxにデバイスドライバーをインストールする方法

  2. RAM にブロック デバイスを作成する

  3. ストレージを効率的に複製する