1.8TB 정도의 큰 디렉토리 트리를 복사해야합니다. 모두 현지입니다. 습관이 없으면 rsync
를 사용 하겠지만 요점이 많고 cp
를 사용해야하는지 궁금합니다.
권한과 uid/gid가 사본에 보존되어야하기 때문에 사용 권한과 UID가 걱정됩니다 (rsync 가이 작업을 수행한다는 것을 알고 있습니다). 심볼릭 링크와 같은 것들.
대상이 비어 있으므로 일부 파일을 조건부로 업데이트하는 것에 대해 걱정할 필요가 없습니다. 그것은 모두 로컬 디스크이므로 ssh 또는 네트워크에 대해 걱정할 필요가 없습니다.
Rsync에서 유혹을 느끼는 이유는 rsync가 필요한 것보다 많은 것을 할 수 있기 때문입니다. rsync 체크섬 파일. 나는 그것을 필요로하지 않으며 cp보다 오래 걸릴 수 있다고 우려합니다.
rsync
또는 cp
는 무엇이라고 생각하십니까?
Rsync를 사용하므로 어떤 이유로 든 중단되면 매우 적은 비용으로 쉽게 다시 시작할 수 있습니다. 그리고 rsync이기 때문에 큰 파일을 통해 부분적으로 다시 시작할 수도 있습니다. 다른 사람들이 언급했듯이 파일을 쉽게 제외시킬 수 있습니다. 대부분의 것들을 보존하는 가장 간단한 방법은 -a
플래그 –‘아카이브’따라서 :
rsync -a source dest
UID/GID 및 심볼릭 링크는 -a
(보다 -lpgo
), 귀하의 질문은 파일 시스템 정보의 full 사본을 원할 것임을 암시합니다. -a
에는 하드 링크, 확장 된 속성 또는 ACL (Linux의 경우) 또는 위의 nor 리소스 포크 (OS X의 경우)가 포함되어 있지 않습니다. 따라서 파일 시스템의 강력한 사본의 경우 해당 플래그를 포함해야합니다.
rsync -aHAX source dest # Linux
rsync -aHE source dest # OS X
기본 cp는 -u
플래그는 "SOURCE 파일이 대상 파일보다 최신이거나 대상 파일이 누락 된 경우에만 복사". 그리고 -a
(아카이브) 플래그는 재귀 적이며 권한을 다시 시작하고 보존해야하는 경우 파일을 다시 복사하지 않습니다. 그래서:
cp -au source dest
로컬 파일 시스템으로 복사 할 때 다음 옵션과 함께 rsync를 사용하는 경향이 있습니다.
# rsync -avhW --no-compress --progress /src/ /dst/
내 추론은 다음과 같습니다.
-a is for archive, which preserves ownership, permissions etc.
-v is for verbose, so I can see what's happening (optional)
-h is for human-readable, so the transfer rate and file sizes are easier to read (optional)
-W is for copying whole files only, without delta-xfer algorithm which should reduce CPU load
--no-compress as there's no lack of bandwidth between local devices
--progress so I can see the progress of large files (optional)
다른 답변에서 제안한대로 다음 tar 명령보다 위의 rsync 설정을 사용하여 전송 속도가 17 % 빨라졌습니다.
# (cd /src; tar cf - .) | (cd /dst; tar xpf -)
많은 양의 데이터를 복사해야 할 때 일반적으로 tar와 rsync의 조합을 사용합니다. 첫 번째 단계는 다음과 같이 tar하는 것입니다.
# (cd /src; tar cf - .) | (cd /dst; tar xpf -)
일반적으로 많은 양의 파일을 사용하면 tar가 어떤 이유로 든 처리 할 수없는 파일이 있습니다. 또는 프로세스가 중단되거나 파일 시스템 마이그레이션 인 경우 실제 마이그레이션 단계 전에 초기 복사를 수행 할 수 있습니다. 어쨌든, 초기 복사 후, 나는 모든 것을 동기화하기 위해 rsync 단계를 수행합니다.
# cd /dst; rsync -avPHSx --delete /src/ .
/src/
의 슬래시가 중요합니다.
여기에 내가 사용하는 rsync가 있습니다. 이것이 아니라 간단한 명령에 cp를 선호합니다.
$ rsync -ahSD --ignore-errors --force --delete --stats $SRC/ $DIR/
더 안전한 방법은 다음과 같습니다. cpio. 타르만큼 빠르며 조금 더 빠를 수도 있습니다.
$ cd $SRC && find . -mount -depth -print0 2>/dev/null | cpio -0admp $DEST &>/dev/null
이것도 좋고 읽기 실패로 이어집니다.
$ tar --ignore-failed-read -C $SRC -cf - . | tar --ignore-failed-read -C $DEST -xf -
이것들은 모두 로컬 사본 전용입니다.
당신이 선호하는 것. 잊지 말고 -a
cp
를 사용하기로 결정하면 전환합니다.
정말 대답이 필요한 경우 : rsync를 사용하면 훨씬 유연합니다. 복사가 완료되기 전에 종료해야합니까? ctrl-c 만하고 등을 돌리 자마자 다시 시작하십시오. 일부 파일을 제외해야합니까? --exclude-from
. 소유권 또는 권한을 변경해야합니까? rsync가 당신을 위해 그것을 할 것입니다.
rsync
명령은 항상 전송하는 모든 바이트에서 체크섬을 계산합니다.
명령 행 옵션 --checksum
는 파일의 체크섬을 사용하여 전송할 파일을 결정하는 데만 사용됩니다.
-c, --checksum
모드 시간 및 크기가 아닌 체크섬을 기준으로 건너 뛰기 "
맨 페이지에서도 다음과 같이 말합니다.
Rsync는 항상 전체 파일 체크섬을 확인하여 전송 된 각 파일이 수신 측에서 올바르게 재구성되었는지 확인하지만 전송 후 자동 확인은이 옵션의 전송 전 "와 관련이 없습니다. 업데이트 할?" 검사.
따라서 rsync
또한 항상 -c/ --checksum
옵션이 "꺼짐"입니다.
rsync -aPhW --protocol=28
는 RSYNC를 사용하여 큰 사본의 속도를 높이는 데 도움이됩니다. 90GiB를 통해 중간에 있다는 생각 때문에 항상 rsync로 이동하고 끊기 때문에 CP에서 멀어집니다.
이 스레드는 매우 유용했으며 결과를 얻을 수있는 옵션이 너무 많았 기 때문에 그 중 몇 가지를 벤치마킹하기로 결정했습니다. 내 결과가 다른 사람들에게 도움이 될 수 있다고 생각합니다.
1,753,200 파일 사이에 분산 된 데이터의 532Gb 를 이동하려면 다음과 같은 시간을 가졌습니다.
rsync
는 232 분이 걸렸습니다tar
소요 206 분cpio
소요 225 분rsync + parallel
209 분 소요제 경우에는 rsync + parallel
. 이 정보가 더 많은 사람들이 이러한 대안 중에서 결정하는 데 도움이되기를 바랍니다.
전체 벤치 마크가 게시됩니다 here
rsync는 훌륭하지만 트리를 메모리에 저장하기 때문에 실제로 큰 디렉토리 트리에 문제가 있습니다. 나는이 스레드를 발견했을 때 그들이이 문제를 해결할 수 있는지보고 싶었습니다.
나는 또한 발견했다 :
http://matthew.mceachen.us/geek/gigasync/
트리를 수동으로 분리하고 여러 rsync를 실행할 수도 있습니다.
로컬 로컬 디렉토리 복사를 수행 할 때 "cp -van src dest"가 rsync보다 20 % 빠릅니다. 재시작 가능성까지는 "-n"이하는 것입니다. 부분적으로 복사 된 파일 만 rm하면됩니다. ISO 또는 그와 같은 것이 아니면 고통스럽지 않습니다.
ARJ IS SO OLD SCHOOL !!) ARJ 및/또는 rsync가 성능을 제공 할 것 같지는 않습니다.
확실히 내가 항상하는 일은 cpio를 사용하는 것입니다.
find . -print | cpio -pdm /target/folder
이것은 CP보다 거의 빠르며, tar보다 빠르며 파이프가 없습니다.
rclone 시도해보십시오. 이건 미친 짓이야
Sudo rclone sync /usr /home/fred/temp -P -L --transfers 64
Transferred: 17.929G / 17.929 GBytes, 100%, 165.692 MBytes/s, ETA 0s
Errors: 75 (retrying may help)
Checks: 691078 / 691078, 100%
Transferred: 345539 / 345539, 100%
Elapsed time: 1m50.8s
LITEONIT LCS-256 (256GB) SSD와 로컬 복사본입니다.
--ignore-checksum
더 빨리 만들기 위해 첫 번째 실행에서.
둘 다 잘 작동합니다.
rsync
에 적용 할 수있는 몇 가지 속도 향상이 있습니다.
-z
/--compress
: 전송은 네트워크가 아닌 RAM을 통해 전송되므로 CPU 만로드됩니다.--append-verify
: 중단 된 전송을 재개합니다. 이것은 좋은 생각처럼 들리지만 위험한 실패 사례가 있습니다. 소스와 크기가 같거나 큰 대상 파일은 무시됩니다. 또한 마지막에 전체 파일을 체크섬하므로 --no-whole-file
위험한 실패 사례를 추가하는 중입니다.-S
/--sparse
: null 시퀀스를 희소 블록으로 변환--partial
또는 -P
--partial --progress
: 나중에 다시 시작하기 위해 부분적으로 전송 된 파일을 저장하십시오. 참고 : 파일 이름은 임시 이름이 아니므로 전체 사본이 완료 될 때까지 대상을 사용할 것으로 예상되지 않도록하십시오.--no-whole-file
재전송해야하는 것은 델타 전송을 사용합니다. 부분적으로 전송 된 파일의 절반을 읽는 것이 다시 쓰는 것보다 훨씬 빠릅니다.--inplace
파일 복사 방지 (전체 전송이 완료 될 때까지 대상을 읽는 것이없는 경우에만)tar
도 작업을 수행하지만 rsync처럼 중단되지 않습니다.
ARJ를 사용하면 어떻게 되나요?
arj a -jm -m1 -r -je filepack /source
어디 -jm -m1
는 압축 수준이며 -je
는이를 실행 파일로 만듭니다. 이제 파일의 캡슐화 된 bash가 있습니다.
그런 다음 대상 맵으로 추출
filepack -y
소스 맵이 만들어지는 위치 (여기서 -y
항상 수락, 덮어 쓰기, 건너 뛰기 등)
그런 다음 파일 팩을 대상 영역으로 scp ftp하여 가능한 경우 실행할 수 있습니다.