Escribir en 2 tarjetas SD al mismo tiempo

Escribir en 2 tarjetas SD al mismo tiempo

Me gustaríaescribe una imagenen dos tarjetas SD al mismo tiempo. Imagino al menos dos escenarios de escritura simultáneos:

  1. ¿Es posible escribir la imagen con un teemecanismo de bifurcación similar?
  2. ¿Es posible ejecutar el comando cat o pv desde dos 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'
    

Puedo prever un problema en el sentido de que si los dos objetivos se pueden escribir a velocidades diferentes, entonces puede ser necesario reducir la velocidad de escritura para no sobrecargar al escritor más lento. La imagen es grande: la capacidad de grabar múltiples objetivos es una ventaja significativa.

Respuesta1

¿Es posible escribir la imagen con una T o un mecanismo de bifurcación similar?

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

Respuesta2

¿Es posible ejecutar el comando cat desde dos shells BASH diferentes?

¿Qué catcomando?


Si solo desea lograr el mismo resultado que aquí:

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

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

pero con una pulsación de Enter, ¿por qué no simplemente combinar los comandos de esta manera?:

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

¿Es porque no quieres leer el archivo dos veces?

(con &&, el segundo comando se ejecuta, solo si el primer comando tiene éxito; si desea ejecutar el segundo comando de todos modos, puede cambiar el &&por a ;)


Para leer el archivo del sistema de archivos solo una vez, puedes hacer esto:

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

Aquí, estás aprovechando el teecomportamiento predeterminado: lo que teeenvías a un archivo, lo envías a uno de tus dispositivos de destino, dándole ese dispositivo como argumento de archivo del teecomando, y lo que teeenvía asalida estándar, lo redirige a su otro dispositivo objetivo.


O, leyendo la imagen dos veces, pero haciendoambos escriben al mismo tiempo, enparalelo, con parallel:

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

Nota: tenga en cuenta que este paralleles el GNU parallely no elmoreutils parallel

Respuesta3

Este es un script de shell mínimo para realizar copias simultáneas. Si hay algún error, esto lo enviará a 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

información relacionada