同时写入2张SD卡

同时写入2张SD卡

我想写一个图像同时在两张 SD 卡上。我设想至少有两种并发写作场景:

  1. tee是否可以用类似的分叉机制来编写图像?
  2. 是否可以从两个不同的 BASH shell 执行 cat 或 pv 命令?

    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

是否可以用 T 恤或类似的分叉机制来写入图像?

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

答案2

是否可以从两个不同的 BASH shell 执行 cat 命令?

哪个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'

是因为你不想读取该文件两次吗?

&&只有当第一个命令成功时,才会执行第二个命令;如果您仍然想执行第二个命令,您可以更改&&a ;


要仅从文件系统读取一次文件,您可以这样做:

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

这是并发复制的最低限度的 shell 脚本。如果有任何错误,这会将它们抛出到 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

相关内容