次のコマンドを使用します。
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
終了をゼロ以外にしてください。これは良くありません。バックアップスクリプトが破損しています。 (私は|| 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/