Me gustaríaescribe una imagenen dos tarjetas SD al mismo tiempo. Imagino al menos dos escenarios de escritura simultáneos:
- ¿Es posible escribir la imagen con un
tee
mecanismo de bifurcación similar? ¿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é cat
comando?
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 tee
comportamiento predeterminado: lo que tee
envías a un archivo, lo envías a uno de tus dispositivos de destino, dándole ese dispositivo como argumento de archivo del tee
comando, y lo que tee
enví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 parallel
es el GNU parallel
y 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