tar | tar가 왜 cp보다 훨씬 빠릅니까?


10

디렉토리를 재귀 적으로 복사 tar하려면 디렉토리 tar를 압축 한 다음 출력 을 언 팩킹하기 위해 출력을 파이핑하는 것이 cp -r(또는 cp -a)를 사용하는 것보다 훨씬 빠릅니다 .

왜 이런거야? 그리고 cp후드에서 같은 방식으로 더 빨리 만들 수없는 이유는 무엇입니까?

편집 : 수만 개의 파일과 폴더가 포함되어 있고 깊이 중첩되어 있지만 약 50MB에 불과한 거대한 디렉토리 구조를 복사하려고 할 때이 차이점을 발견했습니다. 관련이 있는지 확실하지 않습니다.


흥미로운 질문입니다. 여기에 대한 답변을 찾을 수 있습니다 : stackoverflow.com/questions/316078 및 여기 : unix.stackexchange.com/questions/66647
Teresa e Junior

답변:


6

Cp모든 파일에 대해 루프에서 open-read-close-open-write-close를 수행합니다. 따라서 한 곳에서 읽고 다른 곳으로 쓰는 것은 완전히 인터리브됩니다. Tar|tar별도의 프로세스에서 읽고 쓰기를 수행하며, tar여러 스레드를 사용하여 여러 파일을 '한 번에'읽고 (쓰기) 수행하므로 디스크 컨트롤러가 한 번에 많은 데이터 블록을 페치, 버퍼링 및 저장할 수 있습니다. 대체로 tar각 구성 요소가 효율적으로 작동하면서도 cp문제가 발생하는 이질적인 비효율적 인 작은 청크를 분류 할 수 있습니다.


실제로 모든 cp구현에 해당한다고 말할 수 있습니까 ? 이것이 사실인지 어떻게 알 수 있습니까? 그리고 왜 그렇게 cp비효율적 인 방식으로 쓰여질 것입니까? 파일 사본의 모든 교과서 구현은 한 번에 n 바이트의 버퍼를 읽고 다른 n 바이트를 읽기 전에 디스크에 씁니다. 그러나 당신은 cp전체 사본을 쓰기 전에 항상 전체 파일을 읽는 다고 말하고 있습니까?
LarsH
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.