Gravando em 2 cartões SD ao mesmo tempo

Gravando em 2 cartões SD ao mesmo tempo

Eu gostaria deescreva uma imagemem dois cartões SD ao mesmo tempo. Imagino pelo menos dois cenários de escrita simultâneos:

  1. É possível escrever a imagem com um teemecanismo de bifurcação semelhante?
  2. É possível executar o comando cat ou pv a partir de dois shells BASH diferentes?

    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'
    

Posso prever um problema: se os dois destinos puderem ser gravados em taxas diferentes, poderá ser necessário diminuir a velocidade de gravação para não sobrecarregar o gravador mais lento. A imagem é grande: a capacidade de queimar vários alvos é uma vantagem significativa.

Responder1

É possível escrever a imagem com um tee ou mecanismo de bifurcação semelhante?

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

Responder2

É possível executar o comando cat a partir de dois shells BASH diferentes?

Qual catcomando?


Se você deseja apenas obter o mesmo resultado que aqui:

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

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

mas com um toque de Enter, por que não simplesmente combinar os comandos assim?:

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

É porque você não quer ler o arquivo duas vezes?

(com &&, o segundo comando é executado, somente se o primeiro comando for bem-sucedido; se você quiser executar o segundo comando de qualquer maneira, você pode alterar o &&para a ;)


Para ler o arquivo do sistema de arquivos apenas uma vez, você pode fazer o seguinte:

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

Aqui, você está aproveitando o teecomportamento padrão: o que teeé enviado para um arquivo, você o envia para um dos destinos do seu dispositivo, fornecendo esse dispositivo como um argumento de arquivo do teecomando, e o que teeé enviado parasaída padrão, você o redireciona para o outro destino do dispositivo.


Ou, lendo a imagem duas vezes, mas fazendoambos escrevem ao mesmo tempo, emparalelo, com parallel:

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

Nota: tenha em mente que este parallelé o GNU parallele não omoreutils parallel

Responder3

Este é o script de shell mínimo para cópia simultânea. Se houver algum erro, isso irá lançá-lo para 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}

Usosh script.sh image_file first_card_path second_card_path

informação relacionada