使用以下命令。
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/