작은 파일 15TB 전송


79

한 서버에서 다른 서버로 데이터를 보관하고 있습니다. 처음에 나는 일을 시작했다 rsync. 5TB의 데이터에 대해서만 파일 목록을 작성하고 1TB의 데이터를 전송하는 데 1 주일이 걸렸습니다.

그런 다음 새 서버에서 가동 중지 시간이 필요하므로 작업을 중단해야했습니다.

우리는 아마도 다시 접근 할 필요가 없기 때문에 그것을 타르 겠다는 것에 동의했습니다. 나는 그것을 500GB 청크로 나누는 것을 생각하고있었습니다. 그 후 나는 tar그것을 통해 복사하려고했습니다 ssh. 나는 사용 tar하고 pigz있었지만 여전히 너무 느립니다.

더 좋은 방법이 있습니까? 두 서버가 모두 Redhat에 있다고 생각합니다. 기존 서버는 Ext4이고 새로운 서버는 XFS입니다.

파일 크기는 몇 KB에서 몇 MB까지이며 5TB에는 2,400 만 JPEG가 있습니다. 그래서 나는 15TB에 대해 약 6 천만에서 8 천만 정도를 추측하고 있습니다.

편집 : 며칠 동안 rsync, nc, tar, mbuffer 및 pigz로 재생 한 후. 병목 현상은 디스크 IO가됩니다. 데이터가 500 개의 SAS 디스크와 약 2 억 5 천만 jpeg에 걸쳐 스트라이핑됨에 따라. 그러나 이제는 앞으로 사용할 수있는 훌륭한 도구에 대해 배웠습니다.



2
한 가지 옵션은 외부 드라이브에 압축 된 tar 파일을 작성하여 새 시스템으로 옮기는 것입니다. 여분의 디스크는 tar 파일을 생성하는 속도를 높이고 (시스템에서 기존 디스크에 15TB를 읽으려고 시도하는 동안 기록하지 않음) 새 서버를 연결하지 않습니다.
Brian

4
더 좋은 방법이 있습니까? 예, Windows Server 2012 R2 DFS 복제 는 약 10 시간 내에이를 준비합니다 . 그리고 변경 사항을 동기화하고 재부팅 후 중단 된 부분을 선택합니다.
TessellatingHeckler

27
@TessellatingHeckler : 보관하기 전에 OP가 Redhat에서 Windows로 마이그레이션되도록 제안하십니까?
Thomas Weller

12
@ThomasWeller 그들은 "더 나은 방법이 있습니까?"라고 물었습니다. 나는 그들이 더 나은 방법을 사용할 것을 권장하지 않습니다. 파이프에서 중단없이 복구 할 수없고, 파일 내용을 확인할 수 없으며, 복사 상태를보고 할 수 없으며, 파일의 일부 복사를 피하기 위해 이전에 복사 된 블록을 사용할 수 없으며, 암시 적이 지 않은 파이프의 명령을 자유롭게 사용할 수 있습니다. 우선 순위가 낮은 복사를 지원하고, 일시 중지 할 수 없으며, ACL 복사에 대한 언급이 없으며, 누군가를 실행하려면 로그인 상태를 유지해야합니다. 그러나 다른 사람들은 관심을 가질 수도 있고 "x는 Linux에서 그렇게한다"고 말할 수도 있습니다.
TessellatingHeckler

답변:


64

tar, pigz(병렬 gzip) 및을 사용하여 매우 좋은 결과를 얻었습니다 nc.

소스 머신 :

tar -cf - -C /path/of/small/files . | pigz | nc -l 9876

대상 기계 :

추출하려면 :

nc source_machine_ip 9876 | pigz -d | tar -xf - -C /put/stuff/here

보관을 유지하려면

nc source_machine_ip 9876 > smallstuff.tar.gz

당신은 전송 속도를보고 싶다면 그냥 pv후 파이프 pigz -d!


3
참고로, 당신은 대체 할 수 pigz와 함께 gzip또는 전부를 제거 할 수 있지만 속도가 현저하게 느려집니다.
h0tw1r3

10
어떻게 이런 일이 영업 이익은 이미 시도한 경우 받아 들여질 수 tarpigz? 이해가 안 돼요
토마스 웰러

5
@ThomasWeller 그가 시도한 곳은 어디 pigz입니까? 이 질문에서 그는 rsync지금까지 시도한 것처럼 보이며 데이터를 분할하고 묶는 데 사용 하는 것을 고려 하고있었습니다 tar. 특히 rsync 에서 -z/ --compress옵션을 사용하지 않은 경우 pigz이론적으로 크게 도움이 될 수 있습니다.
Doktor J

1
@ThomasWeller 그렇습니다. 나는 이미 tar와 pigz를 시도했지만 nc는 시도하지 않았습니다. ssh를 사용했기 때문에 훨씬 많은 오버 헤드가 추가되었습니다.
lbanz

2
@lbanz는 단순히 많은 CPU를 압축에 사용할만큼 tar데이터를 빠르게 생성하지 않음을 의미합니다 pigz. 작은 파일을 많이 읽으려면 동일한 바이트 수의 큰 파일을 읽는 것보다 더 많은 syscall, 더 많은 디스크 탐색 및 더 많은 커널 오버 헤드가 필요하며 기본 수준에서 병목 현상을 일으키는 것 같습니다.
hobbs

21

rsync 솔루션을 고수했습니다. 최신 (3.0.0+) rsync는 증분 파일 목록을 사용하므로 전송하기 전에 전체 목록을 작성할 필요가 없습니다. 따라서 다시 시작하면 문제가 발생할 경우 전체 전송을 다시 수행 할 필요가 없습니다. 최상위 또는 두 번째 레벨 디렉토리마다 전송을 분할하면이를 더욱 최적화 할 수 있습니다. ( 네트워크가 드라이브보다 느린 경우 사용 rsync -a -P하고 추가 --compress합니다.)


이전 서버에서 rsync 2.6.8을 사용하고 있습니다. 공급 업체가 명시한대로 설치 / 업데이트가 허용되지 않는 상자 중 하나이므로 보증이 무효화됩니다. 업데이트하여 더 빠른지 확인할 수 있습니다.
lbanz

18
정적으로 연결된 rsync 바이너리를 찾아서 빌드하고 집에서 실행하십시오. 잘만되면 그것은 보증을 망치지 않을 것입니다.
Fox

어때요 unison? 어떻게 비교 rsync합니까?
Gwyneth Llewelyn

15

VPN을 설정하고 (인터넷 인 경우) 원격 서버에서 일부 형식의 가상 드라이브를 만들고 (ext4로 설정) 원격 서버에 마운트 한 다음 로컬 서버에 마운트합니다 (iSCSI와 같은 블록 수준 프로토콜 사용) )를 사용하고 dd 또는 다른 블록 수준 도구를 사용하여 전송합니다. 그런 다음 자신의 편의에 따라 가상 드라이브의 파일을 실제 (XFS) 드라이브에 복사 할 수 있습니다.

두 가지 이유 :

  1. 주요 성능 범인 인 파일 시스템 오버 헤드가 없음
  2. 추구하지 않고 양쪽에서 순차적 인 읽기 / 쓰기를보고 있습니다.

3
파일 시스템을 우회하는 것이 좋습니다. 읽기 / 쓰기 마운트 된 파일 시스템의 블록 수준을 복사하는 것은 정말 나쁜 생각입니다. 먼저 읽기 전용을 마운트 해제하거나 마운트하십시오.
JB.

15TB 사본도 가지고 있습니다. 새 서버는 최소 30
Arthur Kay

3
서버가 LVM을 사용하는 경우 파일 시스템의 읽기 전용 스냅 샷을 작성하고 대신 복사 할 수 있습니다. 스냅 샷을 읽는 동안 발생하는 파일 시스템의 변경 사항에 대해서만 공간 오버 헤드가 발생합니다.
liori

9

기존 서버가 폐기되고 파일이 몇 분 동안 오프라인 상태 일 수있는 경우 드라이브를 기존 상자에서 꺼내 새 서버에 케이블로 연결하고 마운트하여 (지금 온라인으로) 파일을 복사하는 것이 가장 빠릅니다. 새 서버 기본 디스크에.


2
2TB 드라이브의 약 1PB이므로 너무 큽니다.
lbanz

3

mbuffer를 사용하고 보안 네트워크에있는 경우 암호화 단계를 피할 수 있습니다.


3

(많은 다른 답변이 효과가 있습니다. 다른 답변이 있습니다.)

을 사용하여 파일 목록을 생성하고 find -type f(두 시간 내에 완료해야 함) 작은 청크로 분할 한 다음를 사용하여 각 청크를 전송하십시오 rsync --files-from=....


3

운동화를 고려 했습니까? 이를 통해 모든 것을 동일한 드라이브로 전송 한 다음 해당 드라이브를 물리적으로 옮겨야합니다.

약 한 달 전에 삼성은 16TB 드라이브 (기술적으로 15.36 TB)를 발표했으며 SSD이기도합니다 . 드라이브 16TB

나는이 드라이브가 이것에 대해 할 것이라고 생각합니다. 여전히 모든 파일을 복사해야하지만 네트워크 대기 시간이 없으며 SATA 또는 이와 유사한 빠른 기술을 사용할 수 있으므로 훨씬 빠릅니다.


2

중복 제거시 높은 성공률을 얻을 수있는 기회가 있다면 borgbackup 또는 Attic 과 같은 것을 사용합니다 .

그렇지 않은 경우 netcat + tar + pbzip2 솔루션을 확인하고 하드웨어에 따라 압축 옵션을 조정하십시오. 병목 현상 (CPU? 네트워크? IO?)을 확인하십시오. pbzip2는 모든 CPU에서 훌륭하게 확장되어 더 나은 성능을 제공합니다.


lzma ( xz)는 bzip2보다 빠르게 압축이 풀리고 대부분의 입력에서 잘 작동합니다. 불행히도 xz의 멀티 스레드 옵션은 아직 구현되지 않았습니다.
Peter Cordes

일반적으로 압축 단계는 압축 해제보다 더 많은 마력이 필요하므로 CPU가 제한 요인 인 경우 pbzip2는 전체 성능이 향상됩니다. 압축 해제는 두 시스템이 모두 유사한 경우 프로세스에 영향을 미치지 않습니다.
neutrinus

예, 제 요점은 단일 스트림 멀티 스레드 lzma가 없다는 것이 부끄러운 일이었습니다. 이 유스 케이스의 경우 전체 파일 시스템 데이터 전송 pigz이 문제가 될 수 있습니다. 사용하려는 가장 느린 컴프레서가 되십시오. 또는 심지어 lz4. ( lz4mt단일 스트림 용 멀티 스레드가 있습니다. 매우 효율적으로 스레드되지는 않지만 (새 스레드를 매우 자주 생성하지만 속도가 빨라집니다)
Peter Cordes

2

RedHat Linux를 사용하고 있으므로 적용되지 않지만 다른 옵션으로 사용하십시오.

inode가 문제가되지 않기 때문에 ZFS를 사용하여 수백만 개의 파일을 보유하는 데 큰 성공을 거두었습니다.

이것이 옵션이라면 스냅 샷을 찍고 zfs를 사용하여 증분 업데이트를 보낼 수 있습니다. 이 방법을 사용하여 데이터를 전송하고 보관하는 데 많은 성공을 거두었습니다.

ZFS는 주로 Solaris 파일 시스템이지만 illumos (Sun OpenSolaris의 오픈 소스 포크)에서 찾을 수 있습니다. BSD 및 Linux에서 FFS를 사용하여 ZFS를 사용하는 것도 운이 좋았지 만 시도한 경험이 없습니다.


3
:이 지금 아주 잠시 동안 ZFS의 비 FUSE 기본 리눅스 포트되었습니다 zfsonlinux.org
EEAA

1

rsync대상 시스템 에서 데몬을 시작하십시오 . 이것은 전송 프로세스를 많이 가속화합니다.


-1

tar와 ssh로 다음과 같이 할 수 있습니다 :

tar zcf - <your files> | ssh <destination host> "cat > <your_file>.tar.gz"

또는 개별 파일을 유지하려는 경우 :

tar zcf - <your files> | ssh <destination host> "tar zxf -"


1
하나의 CPU 만 사용하여 압축을 해제하고 재개 할 수있는 방법은 없습니다.
neutrinus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.