큰 파일의 경우 먼저 압축 한 다음 전송 또는 rsync -z? 어느 것이 가장 빠를까요?


14

많은 상대성 작은 데이터 파일이 있지만 약 50GB를 차지하므로 다른 컴퓨터로 전송해야합니다. 나는 이것을하는 가장 효율적인 방법을 생각하려고했습니다.

나는 모든 것을 압축하고 rsync하고 압축을 풀고 rsync -z를 사용하여 압축하고 gzip을 사용하여 rsync -z를 사용해야한다고 생각했습니다. rsync -z가 정확히 어떻게 구현되는지 확실하지 않기 때문에 어느 것이 가장 효율적인지 잘 모르겠습니다. 어떤 옵션이 가장 빠를까요?

답변:


11

gzip은 하나의 파일 만 압축하므로 "gzip으로 전체를 압축"할 수 없으며 tar 파일을 작성하여 "gzip으로 전체를 압축"하기 위해 gzip으로 압축 할 수 있지만 수정 된 파일 만 복사하는 rsync 기능을 잃게됩니다.

그래서 문제는 : gzip으로 rsync하거나 rsync의 -z 옵션에 의존 해야하는 파일을 저장하는 것이 좋습니다.
대답은 아마도 서버에서 파일을 압축 해제하지 않으려는 것입니다. 예라고 생각합니다. 따라서 rsync를 수행하기 전에 gzip 파일을 관리하는 방법을 알 수 없습니다.

수정 된 파일 만 복사하는 rsync 기능이 필요하지 않습니까? 이 경우 물건을 포함하는 tar.gz 파일의 scp를 수행하는 대신 rsync를 사용하는 이유는 무엇입니까?

어쨌든 질문에 대답하기 위해 rsync gzip은 gzip을 사용하는 gzip 파일보다 약간 덜 효율적입니다. 왜 ? rsync는 청크별로 데이터 청크를 gzip으로 압축하므로 gzip이 압축을 수행하는 데 사용하는 테이블을 만드는 데 더 작은 데이터 세트가 사용되므로 더 큰 데이터 세트 (gzip은 전체 파일을 한 번에 사용)가 더 나은 압축 테이블을 제공합니다. 그러나 차이는 대부분의 경우 매우 작지만 매우 드물게 차이가 더 중요 할 수 있습니다 (파일에서 많은 시간을 반복하지만 서로 멀리 떨어져있는 매우 긴 파일이있는 경우). 매우 간단한 예)


1
내가 그의 질문을 어떻게 읽었을 때, 그는 와이어를 통해 그것을 압축 한 다음 반대편을 압축 해제 할 것이다. 50GB를 압축 및 압축 해제하는 데 상당한 시간이 걸릴 수 있기 때문에 gzip을 통한 rsync 기본 압축을 사용합니다. 그런 다음 파일이 대부분 텍스트 인 경우 다시 압축됩니다. 세 번째 옵션 : 파일을 USB 드라이브에 복사하십시오.

3
@Randolph 포터 : 그는 압축하기 전에 수행 할 수 없습니다 (단 변경된 파일을 복사) rsync를 자체 활용하려면 50 기가 바이트 압축하는 손실 네 시간은 로컬 다음 rsync를 어쨌든, 사용 rsync를 -z보다 높은 것
반경

아주 좋은 지적입니다. +1 당신을 위해 :-)

gzip은 스트림 압축기라는 것도 기억하십시오.
Falcon Momot

6

데이터를 한 번만 복사하는 경우 rsync가 그 자체로 큰 승리는 아닙니다. gzip (또는 파일이 많으므로 tar + gzip)이 마음에 들면 다음과 같이 해보십시오.

tar -cz /home/me/source/directory | ssh target tar -xz --directory /home/you/target/directory

그것은 당신이 찾고있는 압축을 얻고 rsync를 사용하지 않고 직접 복사합니다.


난 아마 훨씬 빠르고 낮은 CPU 오버 헤드 여전히 텍스트를 좋은 압축 비율을 가지고 ... 그 대신 gzip을 위해 --lzop 사용하십시오
언더런

5

@radius, gzip작동 방식 을 선택하는 작은 니트 - gzip블록 기반 압축 알고리즘이며 상당히 간단한 알고리즘입니다. 전체 파일은 압축 테이블에 대해 고려되지 않으며 각 블록 만 고려됩니다. 다른 알고리즘은 파일의 전체 내용을 사용할 수 있으며 여러 블록 또는 가변 크기 블록의 내용을 사용하는 몇 가지가 있습니다. 매혹적인 lrzip저자 중 하나가 바로 이것입니다 rsync!

스키니 온 gzip알고리즘 .

요약하면,를 사용 rsync -z하면 먼저 압축 하는 것과 동일한 압축을 얻을 gzip수 있습니다. 차등 전송을 수행하는 경우 rsync의 diffing 알고리즘으로 인해 더 좋습니다 .

즉, 나는 차등이 아닌 전송에 대해 정기적으로 수 scp월히 이길 것이라고 생각할 것입니다. rsync왜냐하면 rsync알고리즘 보다 오버 헤드가 훨씬 적기 때문입니다 ( scp어쨌든 언더웨어를 사용할 것 입니다!).

네트워크가있는 경우 않는 병목 현상이, 당신은 와이어에 압축을 사용하고자하는 것입니다.

귀하의 경우 디스크가 병목 현상 압축 파일로 스트리밍 최선을 다 할 것입니다 때, 그건. (예를 들어, netcat한 시스템에서 다음 시스템으로 스트리밍 gzip -c)

일반적으로 속도가 중요한 경우 기존 파일을 미리 압축하는 것은 낭비입니다.

TIMTOWTDI, YMMV, IANAL 등


2

이 사람 에 따르면 사용하기 가 더 빠를 수도 rsync -z있지만 전송하기 전에 각 파일을 먼저 압축하는 것만 큼 효율적이라고 생각합니다. 다른 사람들이 제안한 것처럼 tar 스트림을 압축하는 것보다 빠릅니다.

매뉴얼 페이지에서 :

          Note  that  this  option  typically  achieves better compression
          ratios than can be achieved by using a compressing remote  shell
          or  a  compressing  transport  because it takes advantage of the
          implicit information in the matching data blocks  that  are  not
          explicitly sent over the connection.

1
빠른 네트워크가있는 경우 --compress-level = 1을 rsync -z와 함께 사용하는 것이 좋습니다. 총 전송 시간을 최소화하기 위해 네트워크가 CPU 또는 디스크 IO가 아닌 병목 상태가 되길 원합니다. 네트워크 속도가 느리면 기본 -z (gzip -6과 동일)를 사용하면 프로세스 네트워크가 계속 바인딩 될 수 있습니다.
rmalayter

1

압축 파일의 scp와 rsync는 매우 유사한 전송 시간이 걸리기 때문에 "이 작업을 수행하는 가장 효율적인 방법"은 압축 전송이 아니라 즉석 압축입니다.

"fastness"외에도 다른 고려 사항은 다음과 같습니다.

모든 파일이 전송되지 않는 경우 rsync를 쉽게 다시 시작할 수 있습니다.

rsync를 사용하여 원격 시스템에서 파일을 유지 보수 할 수 있습니다.

로컬 tar 또는 gzip에는 로컬 공간이 필요합니다.

대상 시스템과 방화벽 모두에 대한 포트 사용 고려 사항 : 1) scp는 허용되지 않을 수있는 포트 22 (기본적으로)를 사용합니다. 2) rsync 사용자 포트 873 (기본적으로)

반경이 원래 포스터가 압축 해제 된 파일을 저장하지 않기를 기대하는 이유를 잘 모르겠습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.