rsync 전송 중에 특수/소켓 파일을 건너뛰는 방법은 무엇입니까?

rsync 전송 중에 특수/소켓 파일을 건너뛰는 방법은 무엇입니까?

다음 명령을 사용하십시오.

rsync --archive --delete --partial --progress --recursive --no-links --no-devices --quiet source target

사용 --no-links하고 --no-devices있습니다.

이와 같은 오류 메시지가 나타납니다.

rsync: mknod "/mnt/shared/backup/var/spool/postfix/dev/log" failed: Operation not permitted (1)

rsync종료를 0이 아닌 것으로 만드십시오 . 이것은 좋지 않습니다. 백업 스크립트가 손상되었습니다. (나는 || true"적법한" 이유로(예: 남은 디스크 공간이 없음) rsync가 실패할 경우 이 오류를 무시하고 싶지 않습니다 .)

이 예에서는 소켓 파일입니다. 나는 이 특정 파일에 관심이 없습니다. rsync에게 이를 무시하거나 건너뛰도록 지시할 수 있나요?

답변1

rsync -a --no-specials --no-devicesrsync에게 이 파일을 건너뛰도록 지시합니다. 여전히 정보 메시지를 인쇄하지만 다른 오류가 발생하지 않으면 0을 반환합니다.

알려진 경로 집합을 전송하지 않으려면 해당 경로를 완전히 제외할 수 있습니다. 또한 -x마운트된 모든 파일 시스템을 건너뛰는 옵션을 전달하고(포함 /dev, 가장 큰 문제를 처리함) 디스크에 여러 파일 시스템이 있는 경우 모든 마운트 지점을 나열합니다(예: rsync -ax / /home /destination).

rsync -ax --exclude='/var/spool/postfix/dev/*' / /mnt/shared/backup

이 중 어느 것도 만족스럽지 않다면,건너뛰려는 파일 나열. 공격자가 특정 파일 이름을 제어하는 ​​경우 백업에서 일부 파일이 손실될 수 있습니다. 예를 들어, 개행 이름이 있는 디렉토리를 생성하고 *그 안에 호출되는 명명된 소켓을 생성하는 경우 출력을 find -type s제외 목록으로 사용하면 제외가 발생합니다 /*. 이러한 문제를 예방하려면 문제가 있는 이름을 제외 목록에서 제외하시기 바랍니다.

{
  cd /path/to/source &&
  find . -name '*[\[?*
]*' -prune -o \
               \( -type b -o -type c -o -type p -o -type s \) -print |
  sed 's/^\.//'
} | rsync -a --exclude-from=- /path/to/source /destination

답변2

어쩌면 당신은 rsync그것을 사용할 수 있습니까 find? 이 같은:

find /your/source/dir -type s 1> /tmp/ignore-list
rsync <your options> --exclude-from=/tmp/ignore-list /your/source/dir/ /your/destination/dir/

관련 정보