我在 Debian Squeeze 服务器上运行 BackupPc。它成功备份了我 LAN 上的其他 Debian Squeeze 机器。我已将其设置为备份 Wan 上的另一台 Debian Squeeze 机器,但备份总是失败并显示错误消息:
Aborting backup up after signal PIPE
Got fatal error during xfer (aborted by signal=PIPE)
备份是通过ssh执行的,这个备份客户端的配置是:
$Conf{RsyncArgs} = [
# Do not edit these!
'--numeric-ids',
'--perms',
'--owner',
'--group',
'--devices',
'--links',
'--times',
'--block-size=2048',
'--recursive',
#
# If you are using a patched client rsync that supports the
# --checksum-seed option (see http://backuppc.sourceforge.net),
# then uncomment this to enabled rsync checksum cachcing
#
'--checksum-seed=32761',
#
# Add additional arguments here
#
'-D',
'--one-file-system',
];
$Conf{FullPeriod} = 6.97;
$Conf{IncrPeriod} = 0.49;
$Conf{FullKeepCnt} = 4;
$Conf{IncrKeepCnt} = 93;
$Conf{XferMethod} = 'rsync';
$Conf{RsyncShareName} = '/';
$Conf{BackupFilesExclude} = [
'/cdrom',
'/dev',
'/files/_nobackup',
'/floppy',
'/lost+found',
'/mnt',
'/proc',
'/sys',
'/tmp/ssh-*',
'/var/lib/amavis/amavisd.sock',
'/var/lib/backuppc',
'/var/lib/nagios3/rw/nagios.cmd',
'/var/run/acpid.socket',
'/var/run/clamav/clamd.ctl',
'/var/run/courier/authdaemon/socket',
'/var/run/mysqld/mysqld.sock',
'/var/run/nut/usbhid-ups-apc_backups_cs500',
'/var/run/proftpd.sock',
'/var/run/screen',
'/var/spool/postfix/private/amavis',
'/var/spool/postfix/private/anvil',
'/var/spool/postfix/private/bounce',
'/var/spool/postfix/private/bsmtp',
'/var/spool/postfix/private/defer',
'/var/spool/postfix/private/discard',
'/var/spool/postfix/private/error',
'/var/spool/postfix/private/ifmail',
'/var/spool/postfix/private/lmtp',
'/var/spool/postfix/private/local',
'/var/spool/postfix/private/maildrop',
'/var/spool/postfix/private/odmr',
'/var/spool/postfix/private/proxymap',
'/var/spool/postfix/private/relay',
'/var/spool/postfix/private/retry',
'/var/spool/postfix/private/rewrite',
'/var/spool/postfix/private/scache',
'/var/spool/postfix/private/scalemail-backend',
'/var/spool/postfix/private/smtp',
'/var/spool/postfix/private/tlsmgr',
'/var/spool/postfix/private/trace',
'/var/spool/postfix/private/uucp',
'/var/spool/postfix/private/verify',
'/var/spool/postfix/private/virtual',
'/var/spool/postfix/public/cleanup',
'/var/spool/postfix/public/flush',
'/var/spool/postfix/public/pickup',
'/var/spool/postfix/public/qmgr',
'/var/spool/postfix/public/showq',
'/var/spool/postfix/var/run/saslauthd/mux',
'/var/spool/squid',
];
$Conf{XferLogLevel} = 1;
$Conf{CompressLevel} = 9;
$Conf{PingMaxMsec} = 200;
$Conf{ClientTimeout} = 3600*8; # 6 Hours!!
我尝试了本地 tar 备份来查看文件系统是否存在问题,一切正常。
关于如何调试有什么建议吗?
答案1
我已经调查了 sigpipe 的含义。如所述SIGPIPE - 维基百科,自由的百科全书:
在符合 POSIX 标准的平台上,当某个进程尝试向管道写入数据而另一端没有连接该进程时,会向该进程发送 SIGPIPE 信号。...
所以我怀疑问题出在ssh
断开的传输上。
我在配置中设置了更长的超时时间来ssh
使用选项:-o ServerAliveInterval=300
$Conf{RsyncClientCmd} = '$sshPath -o ServerAliveInterval=300 -q -x -l root $host
$rsyncPath $argList+';
现在备份已成功完成!
答案2
以防万一这对其他人有用,我们在某些备份上同时获得了aborted by signal=PIPE
和Child exited prematurely
(似乎只有增量备份)。调整$Conf(RsyncClientCmd)
对于我们在 Centos 5 上安装的 BackupPc 3.1 不起作用(即将升级),因为它首先中断了连接尝试。我们正在使用rsync
超过ssh
。
由于该机器专用于备份,并且我们担心其他人使用 ssh 访问,因此我们只需在客户端机器(而不是 BackupPc 服务器)上进行设置ClientAliveInterval=300
,/etc/ssh/sshd_conf
但这也可以针对个人登录进行。
答案3
当我使用 BackupPC 运行备份时,我收到此消息,因为RsyncShareName
参数(定义应同步哪些文件夹)不正确:服务器上不存在给定的文件夹。
您可以在设置中检查此参数Xfer
。
答案4
BackupPC 3.X 版本中有一些变化与 rsync 3.2.3 不兼容
看https://github.com/backuppc/backuppc/issues/369
我们遇到了同样的问题,并通过--protocol=28
在主配置(Xfer)中添加RsyncArgs
参数解决了它。
或者,您也可以使用以下命令编辑 config.pl:
$Conf{RsyncArgs} = [
'--numeric-ids',
'--perms',
'--owner',
'--group',
'-D',
'--links',
'--hard-links',
'--times',
'--block-size=2048',
'--recursive',
'--protocol=28'
];
(只有最后一行很重要,您可能希望保持其余部分不变)
然后,如果您有 Ubuntu 客户端,您可能需要使用以下参数进行检查:
$Conf{RsyncArgsExtra} = [
'--open-noatime',
'--no-msgs2stderr'
];
在各自的<name_of_host>.pl
档案上
对于 Debian 10(Buster)服务器,你只需要--noatime
在其特定配置中(RsyncArgsExtra
)