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.