adr*_*nos 6 backup special-characters rsync devices
使用以下命令。
rsync --archive --delete --partial --progress --recursive --no-links --no-devices --quiet source target
Run Code Online (Sandbox Code Playgroud)
使用--no-links
和--no-devices
已经。
获取诸如此类的错误消息。
rsync: mknod "/mnt/shared/backup/var/spool/postfix/dev/log" failed: Operation not permitted (1)
Run Code Online (Sandbox Code Playgroud)
使rsync
退出非零。这不好。破坏了我的备份脚本。(我不想使用忽略此错误|| true
,以防 rsync 因“合法”原因(例如没有剩余磁盘空间)而失败。)
在这个例子中,它是一个套接字文件。我不在乎这种特殊文件。我可以让 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
Run Code Online (Sandbox Code Playgroud)
如果这些都不令人满意,请列出要跳过的文件。请注意,如果某些文件名受到攻击者的控制,它们可能会导致某些文件从备份中被遗漏。例如,如果他们创建一个名为换行符的目录并创建一个*
在其中调用的命名套接字,那么使用 的输出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
Run Code Online (Sandbox Code Playgroud)