編集する:

編集する:

これは以下に関連する可能性があります。これ(フォルダは除外せず、その内容のみを除外します。)提供された回答を完全に理解したかどうかはわかりません。

次のような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 フィルタ規則は、/「転送ルートに基づいてルートの先頭で次のパターンを探します」を意味します。

リーダーがない場合、/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/*

ベストアンサー1

おすすめ記事