Eu gostaria deescreva uma imagemem dois cartões SD ao mesmo tempo. Imagino pelo menos dois cenários de escrita simultâneos:
- É possível escrever a imagem com um
tee
mecanismo de bifurcação semelhante? É 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 cat
comando?
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 tee
comportamento 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 tee
comando, 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 parallel
e 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