2枚のSDカードに同時に書き込む

2枚のSDカードに同時に書き込む

私はしたいと思います画像を書く同時に 2 枚の SD カードに書き込みます。少なくとも 2 つの同時書き込みシナリオを想定しています。

  1. または同様の分岐メカニズムを使用してイメージを書き込むことは可能ですかtee?
  2. 2 つの異なる BASH シェルから cat または pv コマンドを実行することは可能ですか?

    sudo sh -c 'pv sdcard.image >/dev/sdb'
    sudo sh -c 'pv sdcard.image >/dev/mmcblk0'
    
    sudo sh -c 'cat sdcard.image >/dev/sdb'
    sudo sh -c 'cat sdcard.image >/dev/mmcblk0'
    

2 つのターゲットが異なる速度で書き込まれる可能性がある場合、遅い方の書き込み装置に過負荷をかけないように書き込み速度を遅くする必要があるかもしれないという問題が予測できます。イメージが大きいため、複数のターゲットを書き込むことができるのは大きな利点です。

答え1

T 字型または類似の分岐機構を使用して画像を書き込むことは可能ですか?

sudo tee /dev/sdb /dev/mmcblk0 < sdcard.image > /dev/null

答え2

2 つの異なる BASH シェルから cat コマンドを実行することは可能ですか?

どのcatコマンドですか?


ここでと同じ結果を達成したいだけの場合:

sudo sh -c 'pv sdcard.image >/dev/sdb'

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

しかし、Enter キーを 1 回押すだけで、次のようにコマンドを単純に組み合わせてみませんか?

sudo sh -c 'pv sdcard.image /dev/sdb && pv sdcard.image /dev/mmcblk0'

ファイルを2回読みたくないからでしょうか?

( では&&、最初のコマンドが成功した場合にのみ 2 番目のコマンドが実行されます。2 番目のコマンドをとにかく実行したい場合は、 の を変更でき&&ます;)


ファイルシステムからファイルを 1 回だけ読み取るには、次のようにします。

cat sdcard.image | tee /dev/sdb > /dev/mmcblk0

teeここでは、デフォルトの動作を利用しています。teeファイルに送信するものは、デバイスターゲットの1つに送信し、そのデバイスをコマンドのファイル引数として指定しますteetee標準出力、他のデバイス ターゲットにリダイレクトします。


あるいは、画像を2回読み取っても、両方同時に書く、 で平行、 とparallel

parallel 'cat sdcard.image >' ::: /dev/{sdb,mmcblk0}

parallel注: これはでありGNU parallel、 ではないことに注意してください。moreutils parallel

答え3

これは同時コピーのための最小限のシェル スクリプトです。エラーが発生した場合は、STDERR にスローされます。

#!/bin/sh
echo "Image file ${1}"
echo "1st SD Card Path ${2}"
echo "2nd SD Card Path ${3}"

dd if=${1} of=${2}&
dd if=${1} of=${3}

使用法sh script.sh image_file first_card_path second_card_path

関連情報