이는 다음과 관련이 있을 수 있습니다.이것(폴더는 제외하지 않고 해당 내용만 제외합니다.) 제공된 답변을 완전히 이해했는지 잘 모르겠습니다.
다음과 같은Arch Wiki는 전체 시스템 백업을 위해 rsync를 사용합니다., 다음 백업 스크립트를 사용했습니다.
#!/bin/bash
rsync -aAXHs --info=progress2 --numeric-ids --delete --exclude={"/swapfile","/dev/*","/proc/*","/sys/*","/tmp/*","/run/*",
"/mnt/*","/media/*","/lost+found","/home/*/.cache/mozilla/*","/home/*/.thumbnails/*"} -e ssh / [email protected]:/path/to/my/backup/folder/
/
만일의 경우를 대비해 NAS에 있는 백업 폴더의 경로는 로 시작하고 끝납니다 .
이 코드는 backup.service systemd 서비스에 의해 실행됩니다.
[Unit]
Description="Full system backup service on the NAS"
[Service]
ExecStart=/usr/local/bin/backup.sh
이는 활성화된 backup.timer에 의해 트리거됩니다.
[Unit]
Description="Backs up the full system"
[Timer]
OnBootSec=3min
OnUnitActiveSec=24h
Unit=backup.service
[Install]
WantedBy=multi-user.target
NAS(QNAP NAS)에 대한 SSH 연결은 다음을 통해 이루어집니다.개인/공개 SSH 키, 비밀번호 없음.
이제 내가 sudo journalctl -u backup.service -b
얻을 때 :
Aug 17 17:21:08 Solgaleo systemd[1]: Started "Full system backup service on the NAS".
Aug 17 17:23:21 Solgaleo backup.sh[14481]: [6.3K blob data]
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/uinput, ACL_TYPE_ACCESS): Operation not s>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/dri/card0, ACL_TYPE_ACCESS): Operation no>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/controlC0, ACL_TYPE_ACCESS): Operatio>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/controlC1, ACL_TYPE_ACCESS): Operatio>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/hwC0D0, ACL_TYPE_ACCESS): Operation n>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/hwC1D0, ACL_TYPE_ACCESS): Operation n>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/pcmC0D10p, ACL_TYPE_ACCESS): Operatio>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/pcmC0D11p, ACL_TYPE_ACCESS): Operatio>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/pcmC0D12p, ACL_TYPE_ACCESS): Operatio>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/pcmC0D3p, ACL_TYPE_ACCESS): Operation>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/pcmC0D7p, ACL_TYPE_ACCESS): Operation>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/pcmC0D8p, ACL_TYPE_ACCESS): Operation>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/pcmC0D9p, ACL_TYPE_ACCESS): Operation>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/pcmC1D0c, ACL_TYPE_ACCESS): Operation>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/pcmC1D0p, ACL_TYPE_ACCESS): Operation>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/pcmC1D1p, ACL_TYPE_ACCESS): Operation>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/pcmC1D2c, ACL_TYPE_ACCESS): Operation>
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/seq, ACL_TYPE_ACCESS): Operation not >
Aug 17 17:23:21 Solgaleo backup.sh[14481]: rsync: set_acl: sys_acl_set_file(dev/snd/timer, ACL_TYPE_ACCESS): Operation no>
Aug 17 17:23:22 Solgaleo backup.sh[14481]: [47.9K blob data]
Aug 17 17:23:22 Solgaleo backup.sh[14481]: [48.0K blob data]
Aug 17 17:23:22 Solgaleo backup.sh[14481]: [48.0K blob data]
Aug 17 17:23:22 Solgaleo backup.sh[14481]: [48.0K blob data]
Aug 17 17:23:22 Solgaleo backup.sh[14481]: [48.0K blob data]
[...]
Aug 17 17:24:13 Solgaleo backup.sh[14481]: file has vanished: "/home/ben/.cache/mozilla/firefox/p4vxyaiw.default-release/>
[...]
이는 적어도 /dev
과 /home/*/.cache/mozilla/*
는 다음을 의미합니다.아니요들어오지 못하게 하다.../swapfile
예물론 백업도 원하지 않습니다.
내가 뭐 잘못 했어요?
편집하다:
이전에 나는 내 문제에 대한 해결책으로 이 답변을 게시했습니다.
답을 줬어여기. 하지만 그것은 @MC68020이 댓글을 달고 읽은 후에야 가능합니다.이것rsync가 제외를 이상하게 관리하는 방법을 이해합니다.
rsync의 까다로운 점은 무언가를 제외하려고 할 때 상대 경로를 사용해야 한다는 것입니다. 왜냐하면 제외 항목과 일치시키려고 할 때 일치하는 경로의 첫 번째 부분을 사용하지 않기 때문입니다. 이상합니다.
예를 들어 /data/web/을 백업해서 다른 서버로 보내려는 경우 rsync -a /data/web/ user@server:/backups/data/web/ 같은 명령을 사용하면 됩니다. .하지만 /data/web/cache/ 폴더 동기화를 건너뛰고 싶습니다. rsync는 동기화하는 각 항목에 대한 제외 목록을 확인할 때 원래 rsync 명령이 /data/web/ 폴더를 기반으로 했기 때문에 /data/web/cache/를 확인하지 않습니다. 목록에 대해 "cache/"만 확인합니다. 따라서 전체 경로가 아닌 "캐시"를 목록에 넣어야 합니다.
/
따라서 제 특별한 경우에는 각 경로의 시작 부분에 있는 모든 경로를 삭제하면 됩니다. 그러면 경로가 절대 경로가 아니라 상대적 경로가 됩니다 /
. 최종 결과는 다음과 같습니다.
#!/bin/bash
rsync -aAXHs --info=progress2 --numeric-ids --delete --exclude={"swapfile","dev/*","proc/*","sys/*","tmp/*","run/*","mnt/*
","media/*","lost+found","home/*/.cache/mozilla/*","home/*/.thumbnails/*","home/*/.local/share/Trash/*"} -e ssh / [email protected]:/path/to/my/backup/folder/
그러나 이틀렸다.
선행 rsync 필터 규칙은 /
"전송 루트를 기준으로 경로 시작 부분에서 다음 패턴을 찾습니다"를 의미합니다.
Leader가 없으면 /
rsync는 경로의 어느 위치에서나 패턴과 일치합니다.
예를 들어 --exclude=tmp/*
선행이 없으면 /
제외되지만 /tmp/*
또한 제외됩니다 /var/tmp/*
. 이는 제가 원하는 작업이 아닙니다.
Rsync 매뉴얼 페이지는 다음과 같이 말합니다.
어떤 이름을 필터링해야 하는지 확인하는 가장 쉬운 방법은 --verbose를 사용할 때 출력을 보고 이름 앞에 /를 넣는 것입니다(이름을 파일).
그러나 이렇게 하면 나에게는 효과가 없습니다.
$ sudo rsync -av / tmp/ --dry-run --exclude={"/proc/*", "/run/*", "/dev/*"}|more
rsync: [sender] change_dir "/home/ben/tmp" failed: No such file or directory (2)
rsync: [sender] link_stat "/run/*," failed: No such file or directory (2)
sending incremental file list
created directory /dev/*}
./
bin -> usr/bin
lib -> usr/lib
lib64 -> usr/lib
sbin -> usr/bin
swapfile
boot/
boot/initramfs-linux-fallback.img
boot/initramfs-linux.img
boot/intel-ucode.img
boot/modelist.efi
boot/refind_linux.conf
boot/vmlinuz-linux
dev/
dev/autofs
dev/btrfs-control
dev/console
dev/core -> /proc/kcore
dev/cpu_dma_latency
dev/cuse
[...]
그래서 매뉴얼을 따랐습니다(-verbose를 사용하여 출력을 보고 /
이름 앞에 추가했지만 여전히 제외되지는 않습니다 /dev/*
. 예를 들어...