BackupPc не работает с SIGPIPE

Я запускаю BackupPc на сервере Debian Squeeze. Он успешно создает резервные копии других машин Debian Squeeze в моей локальной сети. Я настроил его для резервного копирования другой машины Debian Squeeze в Wan, но резервное копирование всегда завершается с сообщением об ошибке:

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, чтобы увидеть, есть ли какая-то проблема с файловой системой, и все прошло нормально.

Любые предложения о том, как отлаживать?

5 ответов

Решение

Я изучил значение sigpipe. Как описано в SIGPIPE - Wikipedia, свободной энциклопедии:

На POSIX-совместимых платформах SIGPIPE - это сигнал, отправляемый процессу, когда он пытается выполнить запись в канал без процесса, подключенного к другому концу....

Поэтому я подозревал, что проблема была с ssh транспорт, который отключается.

Я установил более длительное время ожидания ssh используя варианты -o ServerAliveInterval=300в конфиге:

$Conf{RsyncClientCmd} = '$sshPath -o ServerAliveInterval=300 -q -x -l root $host
 $rsyncPath $argList+';

Теперь резервное копирование успешно завершено!

На всякий случай, если это полезно для других, мы получали оба aborted by signal=PIPE а также Child exited prematurely на некоторых резервных копиях (казалось бы, только инкрементные резервные копии). Регулировка $Conf(RsyncClientCmd) не работала для нашей установки BackupPc 3.1 на Centos 5 (скоро будет обновлена), так как она прервала попытку подключения в первую очередь. Мы используем rsync над ssh,

Поскольку машина была предназначена для резервного копирования, и мы были обеспокоены тем, что другие используют ssh-доступ, мы просто установили ClientAliveInterval=300 в /etc/ssh/sshd_conf на клиентских машинах (не на сервере BackupPc), но это можно было сделать для отдельного входа в систему.

Я получил это сообщение при запуске резервного копирования с BackupPC только потому, что RsyncShareName Параметр (который определяет, какие папки следует синхронизировать) был неверным: данная папка не существовала на сервере.

Вы можете проверить по этому параметру в Xfer Настройки.

У меня возникла та же проблема, и я наконец понял это. Когда вы определяете специфичные для хоста каталоги для резервного копирования для хоста, а один из этих каталогов не существует, rsync завершится с ошибкой, например:

Got fatal error during xfer (aborted by signal=PIPE)

После удаления каталога все работает отлично без каких-либо дополнительных прав на rsync.

Надеюсь, мой опыт поможет вам, ребята.

В 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)

Другие вопросы по тегам