쉘 스크립트를 사용하여 많은 작은 파일이 포함된 4개의 디렉토리를 압축하고 싶습니다. 이 스크립트는 실행하는 데 시간이 너무 오래 걸리기 때문에 사용 가능한 리소스를 더 잘 활용하기 위해 쉘 스크립트를 사용하여 4개의 tar 명령을 병렬로 실행하고 싶습니다.
현재 사용하고 있는 명령은 다음과 같습니다.
tar cf - /ebs/uat/uatappl | gzip -c > /ebs/backup/uatappl.tar.gz
tar cf - /ebs/uat/uatcomn | gzip -c > /ebs/backup/uatcomn.tar.gz
tar cf - /ebs/uat/uatora | gzip -c > /ebs/backup/uatora.tar.gz
tar cf - /ebs/uat/uatdata | gzip -c > /ebs/backup/uatdata.tar.gz
답변1
다음과 같이 모든 tar를 백그라운드에 넣을 수 있습니다.
tar cf - /ebs/uat/uatappl | gzip -c > /ebs/backup/uatappl.tar.gz &
tar cf - /ebs/uat/uatcomn | gzip -c > /ebs/backup/uatcomn.tar.gz &
tar cf - /ebs/uat/uatora | gzip -c > /ebs/backup/uatora.tar.gz &
tar cf - /ebs/uat/uatdata | gzip -c > /ebs/backup/uatdata.tar.gz &
그러나 충분한 프로세서 성능과 빠른 디스크가 있어야 합니다. 그렇지 않으면 동시성으로 인해 총 실행 시간이 순차 실행 시간보다 길어집니다.
답변2
&
명령줄 끝에 a를 추가하면 문제가 발생합니까?
tar cf - /ebs/uat/uatappl | gzip -c > /ebs/backup/uatappl.tar.gz &
tar cf - /ebs/uat/uatcomn | gzip -c > /ebs/backup/uatcomn.tar.gz &
tar cf - /ebs/uat/uatora | gzip -c > /ebs/backup/uatora.tar.gz &
tar cf - /ebs/uat/uatdata | gzip -c > /ebs/backup/uatdata.tar.gz &
wait
wait
작업이 완료될 때까지 기다립니다.
답변3
작업을 병렬로 실행하기 위한 도구인 GNU Parallel을 사용할 수 있습니다. 나는 다음을 테스트했으며 이 줄이 작동할 것이라고 믿습니다.
ls -1 /ebs/uat | parallel 'tar cf - /ebs/uat/{} | gzip -c > /ebs/backup/{}.tar.gz'
웹페이지는 여기에 있습니다:https://www.gnu.org/software/parallel/, 그리고 빠른 Google은 사용 가능한 Solaris 패키지가 있음을 나타내는 것으로 보이므로 수동으로 설치할 필요조차 없습니다.
답변4
이제 Solaris 태그를 추가했으므로 어떤 버전을 사용하고 있습니까? 그리고 어떤 파일 시스템을 사용하고 있습니까? UFS인 경우 UFS보다 더 작은 파일을 많이 처리하는 ZFS로 이동할 수 있습니다. 아마도 Roche가 이것을 벤치마킹했을 것입니다.
예: ZFS를 사용하는 경우 각 홈 디렉터리에 대한 데이터 세트를 만들고 이를 다른 파일 시스템이나 압축 설정 수준이 더 높은 시스템에 복사할 수 있습니다. 가능한 중복 제거가 포함됩니다.
디렉터리 구조에 따르면 모든 파일은 백업하려는 동일한 FS에 있는 것으로 보입니다. 따라서 CPU 리소스보다는 IO가 제한 요인이 될 것으로 예상되므로 병렬 옵션은 아마도 도움이 되지 않을 것입니다.
@Romeo Ninov가 제안한 대로 작업을 백그라운드에 넣어볼 수 있습니다. 또는 각 디렉터리에 대한 스크립트를 생성하고 동시에 실행할 수도 있습니다. 결국, 다양한 옵션을 시도하고 테스트해야만 귀하의 요구 사항에 가장 적합한 옵션을 찾는 데 무엇이 도움이 될 수 있고 그렇지 않을 수 있는지 판단할 수 있습니다. 다양한 아카이버 및 압축 알고리즘이 포함됩니다.
예를 들어 속도가 더 중요하다면 또는 에서 더 낮은 압축 수준을 gzip
사용해 보십시오 .compress
zip
또한 CPU가 문제가 아니라고 생각하고 CPU가 두 개 이상인 경우 Pigz(gzip의 병렬 구현)를 사용하여 도움이 되는지 확인할 수 있습니다. pkg는 v11용 지원 저장소에 있지만 소스 코드를 구해 이전 버전의 Solaris에 대해 컴파일해야 합니다.
Reco는 timex
디렉토리 중 하나일 수도 있으므로 모든 명령 앞에 옵니다. 당신에게 느림을 가져옵니다. 그렇다면 이를 최적화하는 데 노력을 집중하십시오.