하나의 USB 드라이브에서 다른 여러 드라이브로 파일을 복사하는 bash 스크립트를 작성 중입니다.
현재 rsync를 사용하여 소스에서 단일 대상으로 복사하고 모든 출력 드라이브를 한 번에 하나씩 반복하고 있습니다.
for line in $(cat output_drives_list); do
rsync -ah --progress --delete mountpoints/SOURCE/ mountpoints/$line/
done
저는 이 프로세스를 최적화하여 USB 대역폭 사용을 최대화하고 단일 드라이브의 쓰기 속도에 병목 현상을 방지하려고 노력하고 있습니다.
rsync와 같은 작업을 수행할 수 있지만 여러 출력 디렉터리를 사용하여 한 번에 모든 출력 드라이브에 쓰고 입력에서 한 번만 읽을 수 있습니까?
나는 이 중 일부가 이미 시스템 캐시에 의해 처리된 것으로 추측하지만 이것은 단지 읽기에 최적화되어 있습니다.
여러 rsync 프로세스를 병렬로 실행하면 쓰기 속도가 최적화될 수 있지만 읽기 속도가 느려질 수도 있다는 우려도 있습니다.
병렬로 복사할 때 단일 읽기에 신경써야 합니까?
답변1
테스트할 수는 없지만 백그라운드에서 더 많은 프로세스를 시작하면 해결책이 될 수 있습니다.
START=$(date +%s)
for line in $(cat output_drives_list); do
rsync -ah --progress --delete mountpoints/SOURCE/ mountpoints/$line/ &
done
jobs # get a list of running jobs
wait # wait for all processes to complete
sync
echo It took: $(( $(date +%s)-START )) seconds
편집: date
"벤치마킹" 언급 후에 -stuff를 추가했습니다.
답변2
읽기 속도는 대상 쓰기의 가장 큰 병목 현상이 됩니다.
원본 디스크의 크기에 따라 @hschou가 위에서 설명한 것처럼 복사기에서 RAM 디스크를 만들고 그 안에 파일을 캐시한 다음 동시 프로세스를 사용하여 거기에서 여러 대상으로 복사하려면 어떻게 해야 합니까?
메모리를 유지하는 "실제" RAM 디스크를 만드는 방법
RAM 읽기는 RAM 디스크 중 일부가 로컬 물리적 디스크로 교체되는 경우에도 플래시 또는 SSD에 대한 다중 무작위 액세스보다 항상 빠릅니다.