次のコマンドを使用します。
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
をゼロ以外で終了させます。これは悪いです。バックアップスクリプトが壊れます。 (ディスク領域が残っていないなどの「正当な」理由でrsyncが失敗した場合に備えて、|| true
を使用してこのエラーを無視したくありません。)
この例では、それはソケットファイルです。この種の特別なファイルは気にしません。 rsyncにそれらを無視/スキップさせることはできますか?
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
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/