복사 또는 rsync 명령


83

다음 명령이 예상대로 작동합니다 ...

cp -ur /home/abc/* /mnt/windowsabc/

rsync가 그것에 비해 이점이 있습니까? 24 시간마다 동기화 된 폴더를 백업하는 더 좋은 방법이 있습니까?


예상대로 정확히 작동하지 않습니까?
lunixbochs

12
-u는 "업데이트"를 나타냅니다. 누락되거나 오래된 파일 만 복사합니다. -r은 "재귀 적"을 나타냅니다. 디렉토리 구조를 드릴 다운합니다. 다른 멍청이들을 도와 주면서 찾아봐야했습니다. :-)
mightypile 2015-04-26

명령의 도움말 섹션에있는 특정 플래그에 대한 정보는 일반적으로 다음과 같습니다. <cp --help | grep -e -u> 또는 플래그 'r'에 대한 정보를 찾으려면 <cp --help | grep -e -r>. "-e"다음에 작성한 내용이있는 도움말 부분 만 표시됩니다.
paramvir

답변:


58

Rsync는 전체 파일 대신 업데이트 된 파일의 업데이트 된 부분 만 복사하므로 더 좋습니다. 또한 원하는 경우 압축 및 암호화를 사용합니다. 이 자습서를 확인하십시오 .


59

rsync가 수행하는 파일 및 블록의 더 자세한 인벤토리로 인해 반드시 더 효율적인 것은 아닙니다. 알고리즘은 그것이하는 일에 환상적이지만, 그것이 정말로 최선의 선택이 될 것인지를 알기 위해 당신의 문제를 이해해야합니다.

파일이 추가되는 경향이 있지만 업데이트되지 않는 매우 큰 파일 시스템 (예 : 수천 또는 수백만 개의 파일)에서 "cp -u"가 더 효율적일 수 있습니다. cp는 메타 데이터에만 복사하기로 결정하고 단순히 복사 업무를 수행 할 수 있습니다.

파일 크기, 네트워크 성능, 기타 디스크 활동 등에 따라 직선 cp 대신 tar를 사용하여 버퍼링을 원할 수 있습니다. 다음 아이디어가 매우 유용합니다.

tar cf - . | tar xCf directory -

메타 데이터 자체는 실제로 매우 큰 (클러스터) 파일 시스템에서 상당한 오버 헤드가 될 수 있지만 rsync와 cp는이 문제를 공유합니다.

rsync가 자주 선호되는 도구 인 것 같습니다 (일반 용도의 응용 프로그램에서는 일반적인 기본 선택입니다).하지만 생각없이 rsync를 맹목적으로 사용하는 사람들이 많을 것입니다.


19

작성된 명령은 현재 날짜 및 시간 스탬프가있는 새 디렉토리와 파일을 만들고 자신을 소유자로 만듭니다. 시스템의 유일한 사용자이고 매일이 작업을 수행하는 경우 그다지 중요하지 않을 수 있습니다. 그러나 이러한 속성을 유지하는 것이 중요하다면 다음을 사용하여 명령을 수정할 수 있습니다.

cp -pur /home/abc/* /mnt/windowsabc/

-p는 파일의 소유권, 타임 스탬프 및 모드를 유지합니다. 이것은 백업하는 항목에 따라 매우 중요 할 수 있습니다.

rsync를 사용하는 대체 명령은 다음과 같습니다.

rsync -avh /home/abc/* /mnt/windowsabc

rsync에서 -a는 위에서 언급 한 모든 속성을 보존하는 "아카이브"를 나타냅니다. -v는 "상세"를 나타내며 각 파일이 실행될 때 수행하는 작업을 나열합니다. -z는 로컬 복사본의 경우 생략되지만 압축 용이므로 네트워크를 통해 백업하는 경우 도움이됩니다. 마지막으로 -h는 rsync에 MB, GB 등과 같은 사람이 읽을 수있는 형식으로 크기를보고하도록 지시합니다.

호기심에서 나는 시스템을 프라이밍하고 첫 번째 실행에 대한 편향을 피하기 위해 하나의 사본을 실행 한 다음 내부 SSD 드라이브에서 USB 연결 HDD로 1GB 파일의 테스트 실행에서 다음 시간을 측정했습니다. 이들은 단순히 빈 대상 디렉토리에 복사됩니다.

cp -pur    : 19.5 seconds
rsync -ah  : 19.6 seconds
rsync -azh : 61.5 seconds

압축 및 압축 해제는 분명히 대역폭이 병목 현상이 아닌 시스템에 부담을 주지만 두 명령은 거의 동일한 것처럼 보입니다.


6

특히 BTRFS 또는 ZFS와 같은 copy-on-write 파일 시스템을 사용하는 경우 rsync훨씬 좋습니다.

나는 BTRFS를 사용하고 내 ~/.bashrc다음 과 같이 있습니다 .

alias cp="rsync -ah --inplace --no-whole-file --info=progress2"

여기 BTRFS 같은 암소 금융 감독원에 대한 중요한 플래그는 --inplace파일의 그것을 단지 복사 변경된 부분은, 참조 등 파일의 아이 노드 사이의 작은 변화를 새로운 생성하지 않기 때문에 .


1
--inplace옵션 설명서 에 따르면 : The option implies --partial. 그래서 --partial적어도 현재 버전에서는 필요하지 않다고 생각 합니다.
Dcortez

4

네트워크 전송이 아닌 시스템에서 내부적으로 파일을 전송하는 동안 -z 플래그를 사용하면 전송에 걸리는 시간이 크게 달라질 수 있습니다.

동일한 기계 내에서 전송

Case 1: With -z flag:
    TAR took: 9.48345208168
    Encryption took: 2.79352903366
    CP took = 5.07273387909
    Rsync took = 30.5113282204

Case 2: Without the -z flag:
    TAR took: 10.7535531521
    Encryption took: 3.0386879921
    CP took = 4.85565590858
    Rsync took = 4.94515299797

3

로컬 복사본의 경우 rsync의 유일한 장점은 파일이 대상 디렉터리에 이미있는 경우 복사를 방지한다는 것입니다. "이미 존재 함"의 정의는 (a) 동일한 파일 이름 (b) 동일한 크기 (c) 동일한 타임 스탬프입니다. (동일한 소유자 / 그룹 일 수 있습니다. 잘 모르겠습니다 ...)

"rsync 알고리즘"은 느린 네트워크 링크를 통해 파일을 증분 업데이트하는 데 적합하지만 "차이"계산을 실행하기 위해 기존 (부분) 파일을 읽어야하므로 로컬 복사본을 구입하는 데 큰 도움이되지 않습니다.

따라서 이러한 종류의 명령을 자주 실행하고 변경된 파일 집합이 총 파일 수에 비해 작다면 rsync가 cp보다 빠르다는 것을 알 수 있습니다. (또한 rsync에는 --delete유용한 옵션이 있습니다.)


3

무엇이 더 효율적인지에 대한 질문이 아닙니다.

'rsync'및 'cp'명령은 동일하지 않으며 다른 목표를 달성합니다.

1- rsync는 기존 파일 생성 시간을 보존 할 수 있습니다. (-a 옵션 사용)
2- rsync는 다중 프로세스를 실행하고 로컬 소켓 또는 네트워크 소켓을 사용하여 전송합니다. (즉, 여러 프로세스로 포크)
3- 멀티 프로세싱 및 스레딩은 많은 수의 작은 파일을 복사 할 때, 그리고 여러 개의 큰 파일을 복사 할 때 처리량을 증가시킵니다.

따라서 결론은 rsync는 대용량 데이터 용이고 cp는 소규모 로컬 복사 용입니다. (MB에서 작은 GB 범위). 여러 GB 또는 TB 범위에 들어가기 시작하면 rsync를 사용하십시오. 그리고 물론 네트워크 복사, rsync.


"rsync는 기존 파일 생성 시간을 보존 할 수 있습니다. (-a 옵션 사용)"- "cp -a"는 동일한 작업을 수행 할 수 있으며 "rsync -a"보다 더 잘 수행 할 수 있습니다. "Better"는 가능한 한 많은 원본 데이터와 메타 데이터를 보존한다는 의미입니다. unix.stackexchange.com/questions/443911/…을 읽어 보십시오 . Rsync 및 cp는 -a와 관련하여 거의 동일합니다.
Rublacava 20.09.09

@Rublacava 감사합니다 -a. 특별히 비교를 위해 웹을 검색하고 있었습니다.
Francois

1

cp를 사용하는 경우 동일한 이름의 폴더를 복사 할 때 기존 파일을 저장하지 않습니다. 다음 폴더가 있다고 가정 해 보겠습니다.

/myFolder
  someTextFile.txt

/someOtherFolder
  /myFolder
    wellHelloThere.txt

그런 다음 하나를 복사합니다.

cp /someOtherFolder/myFolder /myFolder

결과:

/myFolder
  wellHelloThere.txt

이것은 적어도 macOS에서 일어나는 일이며 diff 파일을 보존하고 싶었으므로 rsync를 사용했습니다.

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