나는하고 싶다이미지를 쓰다동시에 두 개의 SD 카드에. 나는 적어도 두 가지 동시 쓰기 시나리오를 구상합니다.
tee
또는 유사한 분기 메커니즘을 사용하여 이미지를 작성할 수 있습니까 ?두 개의 서로 다른 BASH 쉘에서 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
티 또는 유사한 분기 메커니즘을 사용하여 이미지를 쓰는 것이 가능합니까?
sudo tee /dev/sdb /dev/mmcblk0 < sdcard.image > /dev/null
답변2
두 개의 다른 BASH 쉘에서 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'
파일을 두 번 읽고 싶지 않기 때문입니까?
( 를 사용하면 &&
첫 번째 명령이 성공한 경우에만 두 번째 명령이 실행됩니다. 어쨌든 두 번째 명령을 실행하려면 &&
for 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
이것은 동시 복사를 위한 최소한의 쉘 스크립트입니다. 오류가 있으면 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