Rsync에서 오류가 발생했지만 파일은 괜찮은 것 같습니다.

Rsync에서 오류가 발생했지만 파일은 괜찮은 것 같습니다.

저는 200TB의 대용량 전송을 위해 rsync를 사용하고 있습니다. 인터넷에서 찾은 쉘 스크립트를 사용하여 일부 프로세스를 생성했지만 관련 rsync 명령 자체는 다음과 같습니다.

        rsync --recursive \
              --whole-file \
              --inplace \
              --sparse \
              --no-compress \
              --max-alloc=8GiB \
              --size-only \
              --human-readable \
              --info=progress2 \
              --log-file="$rsync_file_basename.log" \
              --log-file-format="%o=%-7'''b | total=%-7'''l [%i] => %f%L" \
           "/mnt/disk${disk_id}/$share_name/$share_subdir/" \
           "$target_path" \
        >> "$rsync_file_basename.out"

전송은 잘 되고 있는데, 로그를 보면 간헐적으로 발생하는 오류 2가지가 보입니다.

주로 다음과 같습니다:

rsync: [수신기] '/mnt/remotes/TS140_stuff/pictures/family_1/IMG345.jpg'에서 ftruncate가 실패했습니다. 리소스를 일시적으로 사용할 수 없습니다(11)

그러나 다음 중 일부도 포함됩니다.

rsync: [수신기] '/mnt/remotes/TS140_stuff/shows/ep1.mp4'에 쓰기 실패: 리소스를 일시적으로 사용할 수 없음(11) rsync 오류: Receiver.c(380)의 파일 IO(코드 11)에서 오류가 발생했습니다. [수신기 =3.2.7] rsync: [sender] 쓰기 오류: 끊어진 파이프(32) rsync 오류: io.c(1700)의 파일 IO(코드 11) 오류 [sender=3.2.7]

이제 대상 디렉터리는 데이터가 많은 SMB 마운트이므로 비슷한 일이 발생할 것으로 예상했습니다.

그런데 이렇게 쓰는 이유는 대상에 있는 파일을 볼 수 있고 괜찮아 보이기 때문입니다. rsync에는 명령 사용법에 따라 일종의 재시도 논리가 있습니까?

답변1

rsync실제 재시도는 없습니다. 그러나 루프로 래핑하는 것을 막을 수 있는 방법은 없습니다.

#!/bin/sh
k=1 ss=1
while [ "$k" -le 5 ] 
do
    echo "Attempt $k" >&2
    rsync -rt ... &&
        ss=0 &&
        break
    sleep 60
    k=$((k+1))
done

if [ "$ss" -ne 0 ]
then
    echo "ERROR: rsync repeatedly failed" >&2
    exit 1
fi

--times( ) 플래그를 사용해야 합니다 -t. 그렇지 않으면 이 루프는 소진될 때까지 반복됩니다 $k. 당신이 선택한 로고의 실제 목적을 이해하고 있나요? 그것들은 이상한 것들이므로 대부분을 제거하는 것이 좋습니다.

rsync -rtS
    --info=progress2 \
    --log-file="$rsync_file_basename.log" \
    --log-file-format="%o=%-7'''b | total=%-7'''l [%i] => %f%L" \
    "/mnt/disk$disk_id/$share_name/$share_subdir/" \
    "$target_path"

마지막으로 SMB 공유를 제공하는 서버에 직접 액세스할 수 있는 경우 rsync이를 네트워크 모드에서 사용하면 재시도 속도가 (적어도) 크게 향상됩니다.

rsync -rtSz local_path/ remote_host:remote_path 

관련 정보