rsync를 완료하는 데 필요한 시간이나 노력을 추정하시겠습니까?

rsync를 완료하는 데 필요한 시간이나 노력을 추정하시겠습니까?

많은 수의 파일과 여러 수준의 디렉터리가 있는 디렉터리에서 실행할 때 rsync수행된 작업량이나 시간을 추정할 수 있습니까?

  • 진행률 옵션은 소스 디렉터리 아래의 모든 파일과 디렉터리가 아닌 단일 파일 전송 진행률만 표시합니다.

  • 제가 추측하는 한 가지 방법은 지금까지 전송한 디렉토리를 보고 소스와 비교하는 것입니다.

    rsync파일과 디렉터리를 전송하는 순서를 알면 많은 도움이 될 것입니다.

    내 생각엔 이것이 아마도 관련이 있을 것 같아rsync다중 스레드각 스레드는 무엇을 합니까?

    어떤 순서를 선택하는지 잘 모르겠고 빵 우선순위에 대한 이전 추측이 잘못된 것 같아서 줄을 그었습니다.

답변1

rsync -arv /source desc --info=progress2

rsync가 작업을 완료할 때까지 예상 시간을 제공합니다.

2,863,290,944 64%  5.71MB/s  0:04:12

0:04:12 남은 시간입니다

CentOS 7/8에서 테스트됨

답변2

rsync파일당 한 줄을 인쇄 -i한 다음 pv -l줄 수(실제로는 파일 수)를 기준으로 진행 상황을 보고하는 데 사용할 수 있습니다 .

다음이 필요합니다 pv(파이프라인 뷰어):http://www.ivarch.com/programs/pv.shtml

rsync -ai sourcedir/ targetdir/ | pv -l -s filecount > logfile

파일 수를 얻으려면 다음 명령을 사용하십시오.

find sourcedir | wc -l

참고: 이 명령은 복사된 파일 수에 따라 진행률 정보를 표시합니다. 이 방법은 작은 파일이 많은 경우에 가장 효과적입니다. 매우 큰 파일이 몇 개만 있으면 그다지 재미가 없을 것입니다.


기존 복제본을 업데이트(또는 비교)하는 동안 진행 상황을 보려면 다음을 수행하세요.

(추가 정보:디렉터리를 비교하지만 파일 내용은 비교하지 않음)

rsync -aii --delete sourcedir/ targetdir/ | pv -l -s filecount > logfile

두 번째는 -irsync가 파일이 동일하더라도 각 파일에 대해 한 줄을 인쇄하도록 합니다.

비교에 추가합니다 -n(실제로 아무것도 복사하거나 삭제하지 않음).

--delete필요에 따라 생략하세요.

이 명령은 실시간으로 다양한 파일을 화면에 인쇄합니다.

rsync -aii --delete sourcedir/ targetdir/ | pv -l -s filecount | 
    tee logfile | grep -v "^\."

위 명령은 작은 파일이 많을 때 가장 잘 작동합니다. 대용량 파일이 거의 없는 경우 해결 방법은 다음과 같습니다.

Rsync에는 진행 보고서가 내장되어 있습니다. 또는 rsync -P매뉴얼 페이지를 참조하십시오 --progress. --info=progress2나는 아직 이것을 테스트하지 않았습니다. 또한 이러한 옵션은 ...와 잘 작동하지 않거나 pv적어도 그 방법을 찾지 못했습니다.

크기에 따라 진행 상황을 확인하는 또 다른 대략적인 해결 방법은 다음과 같습니다.

  • 복제를 사용하기 전에 대상 파티션의 여유 공간을 기록해 두십시오 df -h.
  • 사용 소스 디렉토리의 크기를 확인하십시오 du -sh.
  • 대상에 사용 watch df -h하고 크기가 커지는 것을 지켜보십시오.

분명히 이것은 업데이트나 비교가 아닌 복사할 때만 작동합니다.

답변3

그래서 나는 이것이 오래되었다는 것을 알고 있지만 내가 사용하는 방법은 파일 수를 모니터링하는 것보다 훨씬 낫습니다. 아래는 파일 크기를 기준으로 모니터링하는 스크립트입니다.

대상 서버에서는 다음과 같이 실행할 수 있습니다.

# rsync-monitor.sh <folder> <expected final size of folder> <seconds between measuring start/stop size>
rsync-monitor /folder 516835 300

그러면 /folder516835MB에 도달할 것으로 예상되며 300초마다 다음과 같이 인쇄됩니다.

[Sun 21 Mar 2021 03:53:25 PM UTC] Starting              | Sleeping 300s...
[Sun 21 Mar 2021 03:58:25 PM UTC] 11900MB of 516835MB   | ~13MB/s       | 10h 15m 0s remaining  | Sleeping 300s...
[Sun 21 Mar 2021 04:03:27 PM UTC] 16497MB of 516835MB   | ~15MB/s       | 9h 0m 0s remaining    | Sleeping 300s...
[Sun 21 Mar 2021 04:08:29 PM UTC] 20974MB of 516835MB   | ~14MB/s       | 9h 10m 0s remaining   | Sleeping 300s...
[Sun 21 Mar 2021 04:13:31 PM UTC] 25600MB of 516835MB   | ~15MB/s       | 8h 50m 0s remaining   | Sleeping 300s...

스크립트는 다음과 같습니다.

#!/usr/bin/env bash

# The folder
FOLDER=$1

# The expected size of folder
MEGS=$2

# How many seconds to refresh
SLEEP=$3

SECONDSLEFT=1
START=$(du -sm $FOLDER |awk '{print $1}')
echo -e "[$(date)] Starting\t\t| Sleeping ${SLEEP}s..."
while (( $SECONDSLEFT > 0 )); do
        sleep $SLEEP
        END=$(du -sm $FOLDER |awk '{print $1}')
        DOWNLOADED=$(( $END-$START ))
        MEGSPERSECOND=$(( $DOWNLOADED/$SLEEP ))
        SECONDSLEFT=$(( ($MEGS-$END)/$DOWNLOADED*$SLEEP ))
        HOURS=$(( $SECONDSLEFT/60/60 ))
        MINUTES=$(( ($SECONDSLEFT-$HOURS*60*60)/60 ))
        SECONDS=$(( $SECONDSLEFT-$HOURS*60*60-$MINUTES*60 ))
        echo -e "[$(date)] ${END}MB of ${MEGS}MB\t| ~${MEGSPERSECOND}MB/s\t| ${HOURS}h ${MINUTES}m ${SECONDS}s remaining\t| Sleeping ${SLEEP}s..."
        START=$END
done
echo -e "[$(date)] Finished"

답변4

예상 시간을 알고 싶다면 $time rsync */temp를 사용하면 됩니다. rsync 전에 파일의 전체 크기를 확인해야 합니다. 네트워크를 통해 rsync하는 경우 rsync 속도는 네트워크에 따라 다릅니다. $ ls -ltr을 사용하여 백업된 디렉터리를 확인할 수 있습니다.

관련 정보