同時寫入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

相關內容