我有一台 VPS 生产服务器,用于为客户开发 Web 应用。我的开发服务器上运行着一个 rsync cron 作业,每天备份整个生产服务器。
#!/bin/sh
RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
KEY=/root/backup-rsync-key
RUSER=root
RHOST=xxx.xxx.xxx.xxx
LPATH=/home/backup
RPATH=/
$RSYNC -avz -e "$SSH -i $KEY" $RUSER@$RHOST:$RPATH $LPATH
它工作正常,但出现以下类型的错误:
...
rsync: read errors mapping "/sys/module/yenta_socket/parameters/disable_clkrun": No data available (61)
ERROR: sys/module/yenta_socket/parameters/isa_probe failed verification -- update discarded.
rsync: read errors mapping "/sys/module/yenta_socket/parameters/isa_probe": No data available (61)
ERROR: sys/module/yenta_socket/parameters/pwr_irqs_off failed verification -- update discarded.
rsync: read errors mapping "/sys/module/yenta_socket/parameters/pwr_irqs_off": No data available (61)
ERROR: sys/power/state failed verification -- update discarded.
rsync: read errors mapping "/sys/power/state": No data available (61)
rsync error: some files could not be transferred (code 23) at main.c(1298) [generator=2.6.8]
(这只是错误的片段)
除了无法备份的内容之外,我怎样才能备份所有内容?
谢谢
答案1
您必须排除不必要的文件。
好的开始是 -x
-x, --one-file-system don't cross filesystem boundaries
(来自 man rsync(1))。这会排除您未明确指定的文件系统。请记住,然后您必须列出要包含的所有挂载点。mount
为您提供列表。
另一个有用的选项是--exclude
:
--exclude=PATTERN exclude files matching PATTERN
--exclude-from=FILE read exclude patterns from FILE
你的命令将会是这样的
rsync -avzx --exclude=/tmp --exclude=/var/cache -e "$SSH -i $KEY" $RUSER@$RHOST:$RPATH $LPATH
答案2
您可以使用 --exclude 选项排除特定文件,例如“--exclude=/sys”。此外,您还可以使用 --exclude-from 选项排除特定文件中列出的文件。
答案3
查看--exclude-from
命令行选项,它允许您定义一个文件,其中包含 rsync 应排除的文件和目录的列表。