한 서버에서 다른 서버로 약 300GB의 파일 전송


20

오늘 새 서버로 전송중인 약 20 만 개의 파일이 있습니다. 나는 이전에 그렇게 큰 규모로 아무것도 한 적이 없으며, 어떻게해야하는지에 대한 조언을 원했습니다. 나는 두 Centos 6 배포판 사이에서 그것들을 옮기고 있으며, 그들은 나라의 다른 위치에 있습니다. 원본 서버에 모든 디렉토리와 파일을 하나의 거대한 타르볼로 압축하기에 충분한 HDD 공간이 없기 때문에 내 질문은 어떻게 이러한 파일을 모두 전송해야합니까? rsync? rsync를 사용하는 특별한 방법은 무엇입니까? 그것을하는 방법에 대한 모든 의견 / 제안은 훌륭 할 것입니다.

감사

편집 : 궁금해하는 사람들을 위해 이와 같은 screenrsync명령을 실행할 때 a를 사용하는 것이 좋습니다 . 특히 어리석은 일이 발생하여 rsync명령을 실행중인 서버 A에 대한 연결이 끊어진 경우 . 그런 다음 화면을 분리하고 나중에 다시 시작하십시오.


4
rsync아직 해봤 어 ? 어쩌면 작은 파일 세트에 있습니까? 이를위한 이상적인 도구 여야합니다.
slhck

이 작업에 가장 적합한 도구는 아니지만, 파일을 이동하기 전에 파일로 압축하지 않고 ssh 연결을 통해 tar를 스트리밍 할 수 있다는 사실에 관심이있을 수 있습니다.tar cz | ssh user@example.com tar xz
Aesin

2
주제가 아닐 수도 있지만 (특히 초기로드 및 rsync후속 업데이트에 사용) : "테이프로 가득 찬 스테이션 왜건의 대역폭을 과소 평가하지 마십시오"(예 : 2nd hd 배치 또는 usb2 연결 고려) / usb3 디스크)를 백업하고 페덱스를 통해 원격 위치로 전송하는 경우 다른 것보다 훨씬 빠르며 다른 용도로 대역폭을 절약 할 수 있습니다
Olivier Dulac

한 공급 업체에 대한 BW 제한이 없으며 다른 한 달에 도달하지 않습니다. 그래서 나는 그것을 낭비하는 문제가 실제로 없다 : P
MasterGberry

1
@OlivierDulac what-if.xkcd.com/31
Bob

답변:


24

그냥 사이먼의 살을 대답을 , rsync작업을위한 완벽한 도구입니다 :

   Rsync  is  a  fast  and extraordinarily versatile file copying
   tool.  It can copy locally,  to/from  another  host  over  any
   remote  shell,  or to/from a remote rsync daemon.  It offers a
   large number of options  that  control  every  aspect  of  its
   behavior  and permit very flexible specification of the set of
   files to be copied.  It is famous for its delta-transfer algo‐
   rithm,  which reduces the amount of data sent over the network
   by sending only the differences between the source  files  and
   the  existing  files in the destination.  Rsync is widely used
   for backups and mirroring and as an improved copy command  for
   everyday use.

원격 시스템에 ssh 액세스 권한이 있다고 가정하면 다음과 같이하십시오.

rsync -hrtplu path/to/local/foo user@remote.server.com:/path/to/remote/bar

이 디렉토리를 복사합니다 path/to/local/foo으로 /path/to/remote/bar원격 서버에. 이름 bar/foo이 지정된 새로운 서브 디렉토리 가 작성됩니다. 대상에 해당 이름의 디렉토리를 작성하지 않고 디렉토리 의 내용 만 복사하려면 후행 슬래시를 추가하십시오.

rsync -hrtplu path/to/local/foo/ user@remote.server.com:/path/to/remote/bar

이것은 foo/원격 디렉토리에 내용을 복사합니다 bar/.

몇 가지 관련 옵션 :

 -h,                         output numbers in a human-readable format 
 -r                          recurse into directories
 -t, --times                 preserve modification times
 -p, --perms                 preserve permissions
 -l, --links                 copy symlinks as symlinks
 -u, --update                skip files that are newer on the receiver
 --delete                    delete extraneous files from dest dirs
 -z, --compress              compress file data during the transfer
 -C, --cvs-exclude           auto-ignore files in the same way CVS does
 --progress                  show progress during transfer
 --stats                     give some file-transfer stats

rsync -hrtplu --progress진행 상황을 확인하고 싶다면 어떻게 해야합니까?
MasterGberry

@MasterGberry p, 정확히. 실행되는 백업 스크립트가 rsync --progress --stats -hrtl --update source destination있습니다.
terdon

실행하는 데 문제가있는 것 같습니다. rsync -hrtplu --progress --rsh='ssh -p2202'내가 사용하고 있으며 연결할 수 없습니다. 255 오류가 계속 발생합니다. 그러나 나는 그것에 sshd'd입니다. 방화벽이 아니라는 것을 알고 있습니다 ... cmd를 통해 암호를 제공해야합니까? 아니면 그냥 물어 보지 않겠습니까?
MasterGberry

Derp, nvm. 방화벽에서 아웃 바운드 트래픽을 잊었습니다. 감사합니다
MasterGberry

중요 사항 : rsync를 사용하면 "--delete"를 사용할 때 특히주의해야합니다. 많은 정보를 읽고 다른 (/ tmp / ...) 폴더를 테스트하고 후행 "/"를 추가하거나 추가하지 않을 때 변경 사항에주의하십시오. 소스 디렉토리 또는 대상 디렉토리의 끝에
Olivier Dulac

14

복사 속도와 사용 가능한 대역폭에 따라 다릅니다.

네트워크 연결 상태가 좋지 않으면 테이프로 채워진 트럭의 대역폭을 고려하십시오. (읽기 : 2.5 인치 HDD를 우편으로 보내거나 직접 드라이브하십시오. 300 기가비트 드라이브를 쉽게 찾을 수 있어야합니다).

시간이 덜 중요하거나 대역폭이 충분하면 rsync가 좋습니다. 오류가 있으면 이전 파일을 다시 복사하지 않고 계속할 수 있습니다.

[편집] 복사하는 동안 데이터가 사용되면 rsync를 여러 번 실행할 수 있다는 것을 추가하지 않았습니다.

예 :
1) 사용중인 데이터. Rsync-> 모든 데이터가 복사됩니다. 시간이 좀 걸릴 수 있습니다.
2) rsync를 다시 실행하면 변경된 파일 만 복사됩니다. 이것은 빠르다.

변경 사항이 없을 때까지이 작업을 여러 번 수행하거나 복사 중에 데이터를 읽기 전용으로 만들어 스마트 / 안전한 방법으로 수행 할 수 있습니다. (예 : 공유 전용 읽기 전용 공유 세트에있는 경우 또는 데이터를 재 동기화 한 후 야간에 공유를 두 번째로 실행하는 동안 공유 전용을 설정하십시오).


1
대역폭이 적당한 시간 내에 300G를 처리 할 수없는 곳에서 서버를 사용해서는 안됩니다.
Dan

1
그것은 '합리적인'것에 달려 있습니다. 가장 약한 링크가 100mbit라고 가정하십시오 (사무실에서의 업로드 한도 또는 다른 쪽의 다운로드 한도는 중요하지 않습니다). 대략 10MB / sec가 허용됩니다. (10의 div는 합리적으로 보입니다. 모두가 완벽하게 잘 진행되면 약간 더 얻을 수 있다는 것을 알고 있습니다. 10MB / 초 ~~ 600MB / 분 ~~ 36000MB / 시간 ~~ 36GB / 시간 ~~ 300GB는 8 시간 20 분입니다. 밤새 할 수 있습니다. 그것은 또한 많은 가정을합니다. 예를 들어, 업로드 속도가 2mbit 인 경우 (우리는 그러한 속도를 가진 사무실이 있습니다) 50 배나 더 오래 걸립니다 (415 시간 또는 17.3 일).
Hennes

이케! 그렇습니다, 8-10은 합리적이지만, 실제로 많은 가정을하고있었습니다.
Dan

2
@Dan 서버가 작동하고 요청을 처리해야하는 경우 업스트림 대역폭을 포화시키는 것은 좋지 않습니다. 따라서이를 처리하기 위해 전송 속도를 인위적으로 조절해야합니다.
Bob

6

나는 rsync에 갈 것이다! 서버를 오프 사이트 서버에 백업하는 데 사용하고 정상적으로 작동합니다. 일반적으로 몇 MB를 복사해야하지만 며칠 동안 최대 20-30GB까지 걸리며 문제없이 작동했습니다.


0

기가비트 연결을 사용하는 NFS를 통한 rsync는 약 10 시간이 걸렸습니다. HDD의 데이터를 복사하여 서버간에 옮기는 것이 좋습니다. 실제로 디스크의 일대일 사본을 작성해야하는 경우 dd 또는 이와 유사한 것을 사용하여 디스크의 원시 이미지를 작성하십시오. ssh (scp)를 사용하면 엄청난 오버 헤드가 발생합니다. 기가비트 연결에서 경험적으로 테스트되었습니다. rsync는 HA 또는 백업 모드에서 사용되는 두 서버간에 증분 동기화를 수행하는 데 적합합니다. 나는 추측한다.


이 답변의 언어와 스타일을 개선해야합니다.
FSMaxB

Rsync는 복사 중에 파일이 변경 될 수있는 경우 특히 좋습니다. 몇 번만 실행하십시오. 모든 데이터가 처음으로 복사됩니다. 두 번째는 첫 번째 (긴) 사본 동안 변경된 내용 만 해당합니다. 세 번째는 밤에 또는 공유를 읽기 전용으로 수행합니다.
Hennes

will took nearly about 10h. It will be better to copy data on HDD and move them between server.전국에 있다는 점을 제외하면 시간이 더 오래 걸립니다.
Rob

@ FSMaxB : 나중에이 작업을 수행합니다.
Pawel

@Rob : 나는 이것을 읽었다;) 서버는 서로 다른 두 위치에있다. 그래서, 당신은 당신에게 더 좋은 것을 계산해야합니다. 국가 간 여행 (연료 비용 확인 등) 또는 네트워크 연결 사용. 더 유익한 것은 무엇입니까?
Pawel

0

NFS 및 tar / untar를 처음 사용합니다 (이 경우 NFS는 가장 빠른 프로토콜이며, 더 많은 CPU 사용률로 네트워크 대역폭을 절약하기 위해 tar입니다)

tar cf - * | ( cd /target; tar xfp -)

다음 번에는 rsync를 사용하십시오.


충분한 CPU 파워가 있다면 gzip을 루프에 추가하여이를 개선 할 수 있습니다. 그리고 NFS가 없으면 netcat을 사용할 수 있습니다. (심지어 모두 : tar -cf - * | gzip | nc -p 4567nc -l 4567 | gunzip | tar xf -.
헤 네스

감사합니다 Hennes, 그건 내 생각이지만 파이프에 gzip을 잊어 버렸습니다
jet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.