다음 명령을 사용하십시오.
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-devices
rsync에게 이 파일을 건너뛰도록 지시합니다. 여전히 정보 메시지를 인쇄하지만 다른 오류가 발생하지 않으면 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/