dd
현재 희소 파일을 input( if
)으로 사용하고 파일을 output( )으로 사용 of
하여 호출하는 데 문제가 있습니다 conv=sparse
. dd
CPU 코어 1개( Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz
4코어+인텔 하이퍼스레딩 4개)(1코어 100%)만 사용하는 것 같아서 병렬화가 가능한지 궁금합니다 dd
. 나 거기 가봤 어
- 살펴보면 corutils 버전 8.23에 내장 기능이 있는 것 같습니다
info dd
.man dd
sgp_dd
패키지에서 확인했지만sg3-utils
(내 요구 사항에 맞는지 모르겠습니다) 희소 파일을 처리하지 않는 것 같습니다.dcfldd
병렬화 기능이 없는 것 같습니다.
AFAIK
- 다중 스레드에서 프로그램 일부의 내부 처리보다 향상된 버전/분기(컨텍스트 변경으로 인해 I/O 성능이 저하되는 것을 방지하기 위해)
- GNU를 로컬에서 실행하기 위한 솔루션은
parallel
다음보다 낫습니다. - 사용자 정의(테스트되지 않은) 코드 조각
I/O 집약적인 작업으로 인해 CPU가 병목 현상을 일으키는 것을 방지하는 방법은 무엇입니까? Linux 3.13이 설치된 Ubuntu 14.04에서 이 명령을 실행하고 스파스 파일을 지원하는 모든 파일 시스템의 스파스 파일 디스크 이미지와 함께 사용하고 싶습니다(적어도 솔루션이 하나의 특정 파일 시스템에 연결되어서는 안 됩니다).
배경: zfs(zfsonlinux 0.6.4 불안정한 버전, 버그가 있고 CPU 병목 현상이 발생할 수 있음(궁극적으로 느린 홀 검색))에서 11TB 스파스 파일(~2TB의 데이터 포함)의 복사본을 만들려고 합니다. 이것은 dd(매우 일반적인 방식으로)를 병렬화하는 방법에 대한 질문에 아무 것도 변경해서는 안 됩니다.
답변1
Bash에서 테스트:
INFILE=in
seq 0 1000 $((`stat --format %s $INFILE` /100000 )) |
parallel -k dd if=$INFILE bs=100000 skip={} conv=sparse seek={} count=1000 of=out
1000을 조정해야 할 수도 있습니다.
답변2
테스트되지 않은 사용자 정의 코드 조각이 곧 나타납니다.
dd if=oldf conv=sparse bs=1k count=3000000000 of=newf &
dd if=oldf conv=sparse bs=1k skip=3000000000 count=3000000000 seek=3000000000 of=newf &
dd if=oldf conv=sparse bs=1k skip=6000000000 count=3000000000 seek=6000000000 of=newf &
dd if=oldf conv=sparse bs=1k skip=9000000000 count=3000000000 seek=9000000000 of=newf &
wait
이렇게 하면 파일을 논리적으로 4개의 3TB 청크로 나누어 병렬로 처리해야 합니다. ( skip=
입력 블록은 건너뛰고 seek=
출력 블록은 찾습니다.) 물론 네 번째 명령은 이전 파일의 끝까지 읽으므로 이 count=
매개변수가 꼭 필요한 것은 아닙니다.