두 서버간에 수백만 개의 파일을 복사하는 가장 좋은 방법 있으며 동일한 기가비트 네트워크의 다른 컴퓨터에

하나의 디렉토리에 약 5 백만 개의 작은 (5-30k) 파일이 있으며 동일한 기가비트 네트워크의 다른 컴퓨터에 복사하려고합니다. rsync를 사용해 보았지만 몇 시간 동안 실행 한 후에 크롤링 속도가 느려질 수 있습니다 .rsync가 매번 소스 및 대상 파일을 확인해야한다는 사실 때문에 가정합니까?

두 번째 생각은 scp를 사용하는 것이지만 더 나은 방법이 있는지 알아보기 위해 외부 의견을 얻고 싶었습니다. 감사!



답변

이와 같은 것이 잘 작동합니다.

tar c some/dir | gzip - |  ssh host2 tar xz

기가비트 네트워크에 있으므로 gzip 및 “z”플래그를 생략하여 추출 할 수도 있습니다.


답변

하나의 디렉토리에 5 개의 MILLION 파일이 모두 있다는 사실은 많은 도구를 어지럽게 만들 것입니다. 나는 rsync가 이것을 정상적으로 처리하지 않았다는 사실에 놀라지 않습니다. 그것은 “독특한”상황입니다. 파일을 일종의 디렉토리 구조로 구성하는 방법을 알 수 있다면 rsync와 같은 표준 동기화 도구가 훨씬 반응이 좋을 것입니다.

그러나 실제 조언을 제공하는 것 중 하나는 네트워크를 통하지 않고 실제 서버에서 파일의 복사본을 만들 수 있도록 드라이브를 물리적으로 대상 컴퓨터로 일시적으로 이동하는 것입니다. 그런 다음 드라이브를 뒤로 옮기고 rsync를 사용하여 최신 상태를 유지하십시오.


답변

기가비트 스위치 (신뢰할 수있는 환경에서)를 통해 수백만 개의 파일을 복사하려면 user55286에서 이미 제안한 것처럼 netcat (or nc)및 의 조합을 사용할 수도 있습니다 tar. 이렇게하면 모든 파일이 하나의 큰 파일로 스트리밍됩니다 ( 빠른 파일 복사-Linux! (39GB) 참조 ).

# requires netcat on both servers
nc -l -p 2342 | tar -C /target/dir -xzf -   # destination box
tar -cz /source/dir | nc Target_Box 2342    # source box

답변

디렉토리에 약 백만 개의 파일이 있습니다 (약 4 년 분량의 파일).

그리고 robocopy를 사용하여 파일을 YYYY / MM 디렉토리 (한 달에 약 35-45,000 개의 파일)로 옮겼습니다. robocopy 스크립트를 .bat 파일에 다음과 같이 넣습니다.

ROBOCOPY /NS /NC /NFL /NP /LOG+:H:\BCK_REPORT\ROBO.LOG /MAXAGE:20081101 /MINAGE:20081201 /MOV H:\Cs\out\fix H:\BCK_REPORT\2008\11
ROBOCOPY /NS /NC /NFL /NP /LOG+:H:\BCK_REPORT\ROBO.LOG /MAXAGE:20081201 /MINAGE:20090101 /MOV H:\Cs\out\fix H:\BCK_REPORT\2008\12
ROBOCOPY /NS /NC /NFL /NP /LOG+:H:\BCK_REPORT\ROBO.LOG /MAXAGE:20090101 /MINAGE:20090201 /MOV H:\Cs\out\fix H:\BCK_REPORT\2009\01
ROBOCOPY /NS /NC /NFL /NP /LOG+:H:\BCK_REPORT\ROBO.LOG /MAXAGE:20090201 /MINAGE:20090301 /MOV H:\Cs\out\fix H:\BCK_REPORT\2009\02

간단한 참고 사항 .. /ns /nc /nfl /np추가 정보로 로그 파일이 부풀어 오르는 것을 방지하기 위해
/log+...요약 정보를 로그 파일에 쓰는 것입니다.

/minage and /maxage is to copy files modified with in that date range.

예를 들어 수정 된 파일> = 01 / Nov / 2008 (포함)은 수정 된 파일 <01 / Dec / 2008 (포함하지 않음)

ROBOCOPY /NS /NC /NFL /NP /LOG+:H:\BCK_REPORT\ROBO.LOG /MAXAGE:20081101 /MINAGE:20081201 /MOV H:\Cs\out\fix H:\BCK_REPORT\2008\11

/mov 파일을 이동

그런 다음 소스 디렉토리가 온다

그런 다음 대상 디렉토리가옵니다 (필요에 따라 디렉토리가 즉시 생성됩니다).

1 개월 분량의 전송 (약 35-45,000 개 파일)에 약 40-60 분이 걸렸습니다. 1 년 분량의 전송에는 약 12 ​​시간이 걸리지 않습니다.

Windows Server 2003 사용

모든 내용이 로그 파일에 기록됩니다 … 시작 시간, 종료 시간 및 복사 된 파일 수.

Robocopy는 하루를 구했습니다.


답변

타르 솔루션에 플러스 1을 적용했지만 환경에 따라 다른 아이디어가 있습니다. dd (1) 사용에 대해 생각할 수 있습니다 . 이와 같은 속도 문제는 파일을 열고 닫는 데 많은 머리 움직임이 필요하다는 것입니다.이 작업은 500 만 번 수행됩니다. 이것들이 연속적으로 할당되는 것을 보장 할 수 있습니다. 대신에 그것들을 dd 수 있습니다. 이것은 헤드 모션의 수를 5 배 이상 줄입니다.


답변

나는 현재 가장 빠른 압축 도구로 lz4 를 사용하는 것을 선호합니다 . SSH 옵션 -c arcfour128 은 기본값보다 빠른 암호화 알고리즘을 사용합니다. [1]

따라서 디렉토리 전송은 다음과 같습니다.

tar -c folder | lz4 -c | ssh -carcfour128 somehost 'lz4 -d | tar -x > folder'

데비안 lz4 명령은 lz4c이고 CentOS에서는 lz4입니다.


답변

Robocopy 는 이런 것들에 좋습니다. 네트워크 시간 초과 후 다시 시도하고 파이프 간 간격을 설정하여 파이프를 휩쓸 수도 있습니다.

[편집하다]

이것은 Windows 전용 응용 프로그램입니다.