파일 전송 속도를 높이기위한 역 다중화 한 번에 네 번하면 링크가 최대가됩니다. 가능한

한 컴퓨터에서 다른 컴퓨터로 많은 양의 데이터를 보냈습니다. rsync (또는 다른 방법)로 보내면 320kb / sec로 일정하게 유지됩니다. 한 번에 두세 번의 이체를 시작하면 각각 320으로 가고 한 번에 네 번하면 링크가 최대가됩니다.

가능한 빨리 데이터를 보낼 수 있어야하므로 파일 전송과 역 다중화를 수행 할 수있는 도구가 필요합니다. 일반적인 솔루션이 필요하므로 소스 컴퓨터에서 split을 실행하고 다른 쪽에서 함께 catting하는 것은 실용적이지 않습니다. 자동화 된 방식으로 작동하려면 이것이 필요합니다.

이를 수행하는 도구가 있습니까, 아니면 직접 만들어야합니까? 발신자는 CentOS이고 수신자는 FreeBSD입니다.



답변

모든 것이 합쳐 짐에 따라 원격 미러 명령의 ‘성배’를 제시합니다. lftp제안에 대한 davr 감사합니다 .

lftp -c "mirror --use-pget-n=10 --verbose sftp://username:password@server.com/directory"

위의 내용은 원격 디렉토리를 재귀 적으로 미러링하여 전송 될 때 각 파일을 10 개의 스레드로 나눕니다!


답변

작동 할 수있는 몇 가지 도구가 있습니다.

  • LFTP -FTP, HTTP 및 SFTP를 지원합니다. 단일 파일을 다운로드하기 위해 다중 연결 사용을 지원합니다. remoteServer에서 localServer로 파일을 전송하려는 경우 localServer에 LFTP를 설치하고 다음을 실행하십시오.

    lftp -e 'pget -n 4 sftp://userName@remoteServer.com/some/dir/file.ext'

    ‘-n 4’는 병렬로 사용할 연결 수입니다.

  • 그런 다음 많은 ‘다운로드 가속기’도구가 있지만 일반적으로 원격 서버에서 설정하지 않아도되는 HTTP 또는 FTP 만 지원합니다. 일부 예는 Axel , aria2ProZilla


답변

파일 용량이 적고 큰 경우 lftp -e 'mirror --parallel=2 --use-pget-n=10 <remote_dir> <local_dir>' <ftp_server>: 각 파일을 10 개 세그먼트로 분할하여 총 20 개의 ftp 연결로 2 개의 파일을 다운로드합니다 <ftp_server>.

작은 파일이 많은 경우 다음을 사용하십시오 lftp -e 'mirror --parallel=100 <remote_dir> <local_dir>' <ftp_server>. 세그먼트 화하지 않고 병렬로 100 개의 파일을 다운로드합니다. 총 100 개의 연결이 열립니다. 이것은 서버에서 사용 가능한 클라이언트를 숨기거나 일부 서버에서 차단 될 수 있습니다.

--continue작업을 다시 시작하는 데 사용할 수 있습니다 🙂 및 -R다운로드 대신 업로드 옵션 (인수 순서를로 변경 <local_dir> <remote_dir>).


답변

연결 당 320KB / s 제한을 일으키는 원인에 따라이 문제를 피하기 위해 TCP 설정을 조정할 수 있습니다. 내 생각 에 ISP가 명시 적으로 연결 당 속도를 제한하는 것은 아닙니다 . 조절에 대한 두 가지 범인이 있습니다.

  1. 두 시스템 간의 일부 링크가 포화되어 패킷을 삭제합니다.
  2. 대역폭 지연 제품 이 너무 커서 TCP 창이 포화 상태 입니다.

첫 번째 경우 각 TCP 연결은 표준 TCP 혼잡 제어에서 효과적으로 동일하게 경쟁합니다. 혼잡 제어 알고리즘을 변경하거나 백 오프 양을 줄임으로써이를 개선 할 수도 있습니다.

두 번째 경우에는 패킷 손실에 의해 제한되지 않습니다. 연결을 추가하면 전체 창 크기를 확장 할 수 있습니다. 창 크기를 수동으로 늘릴 수 있으면 문제가 해결됩니다. 연결 대기 시간이 충분히 높은 경우 TCP 창 크기 조정 이 필요할 수 있습니다 .

왕복 “핑”시간에 총 연결 속도를 곱하여 대략적으로 필요한 창의 크기를 알 수 있습니다. 1280KB / s는 왕복 밀리 초당 1280 (1024는 11024 = 1K의 경우 1311) 바이트가 필요합니다. 64K 버퍼는 약 50ms의 대기 시간으로 최대치가 될 것입니다. 이는 상당히 일반적인 현상입니다. 그런 다음 16K 버퍼는 약 320KB / s로 포화됩니다.


답변

데이터는 어떻게 구성되어 있습니까? 큰 파일 몇 개? 몇 개의 큰 디렉토리? 디렉토리 트리의 특정 브랜치에서 여러 rsync 인스턴스를 생성 할 수 있습니다.

그것은 모두 소스 데이터의 구조에 달려 있습니다. 파일을 슬라이스, 다이 싱 및 재 조립할 수있는 수많은 유닉스 도구가 있습니다.


답변

암호가없는 ssh 로그인을 설정할 수 있으면 4 개의 파일 (-L)을 처리 할 때마다 4 개의 동시 scp 연결 (-n)이 열립니다.

찾기 . 타입 f | xargs -L 4 -n 4 /tmp/scp.sh user @ host : path

파일 /tmp/scp.sh :

#!/bin/bash

#Display the help page
function showHelp()
{
    echo "Usage: $0 <destination> <file1 [file2 ... ]>"
}

#No arguments?
if [ -z "$1" ] || [ -z "$2" ]; then
    showHelp
    exit 1
fi

#Display help?
if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
    showHelp
    exit 0
fi

#Programs and options
SCP='scp'
SCP_OPTS='-B'
DESTINATION="$1";shift;

#Check other parameters
if [ -z "$DESTINATION" ]; then
    showHelp
    exit 1
fi

echo "$@"

#Run scp in the background with the remaining parameters.
$SCP $SCP_OPTS $@ $DESTINATION &


답변

inode의 모든 파일을 정렬하고 (find / mydir -type f -print | xargs ls -i | sort -n) ssh를 통해 cpio와 같이 전송하십시오. 이렇게하면 디스크가 최대가되고 병목 현상이 발생하는 네트워크가 만들어집니다. 그보다 빠르면 네트워크를 통과 할 때 가기가 어렵습니다.