Запись на 2 SD-карты одновременно

Запись на 2 SD-карты одновременно

Я хотел бынаписать изображениена двух SD-картах одновременно. Я предполагаю как минимум два сценария одновременной записи:

  1. Можно ли записать изображение с помощью teeили подобного бифуркационного механизма?
  2. Можно ли выполнить команду cat или pv из двух разных оболочек BASH?

    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'
    

Я могу предвидеть проблему в том, что если две цели могут быть записаны с разной скоростью, то может потребоваться снизить скорость записи, чтобы не перегружать более медленный писатель. Изображение большое: возможность записывать несколько целей является существенным преимуществом.

решение1

Можно ли написать изображение с помощью тройника или подобного разветвляющегося механизма?

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

решение2

Можно ли выполнить команду cat из двух разных оболочек BASH?

Какая catкоманда?


Если вы просто хотите добиться того же результата, что и здесь:

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

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

но почему бы просто не объединить команды одним нажатием Enter следующим образом?:

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

Это потому, что вы не хотите читать файл дважды?

(при использовании &&, вторая команда выполняется только в том случае, если первая команда выполнена успешно; если вы хотите выполнить вторую команду в любом случае, вы можете изменить &&на ;)


Чтобы прочитать файл из файловой системы только один раз, можно сделать следующее:

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

Здесь вы пользуетесь преимуществом teeповедения по умолчанию: то, что teeотправляется в файл, вы отправляете на одно из целевых устройств, указывая это устройство в качестве аргумента файла команды tee, а то, что teeотправляется настандартный вывод, вы перенаправляете его на другое целевое устройство.


Или, прочитав изображение дважды, но делаяоба пишут одновременно, впараллельный, с 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

Связанный контент