X

CentOS 7: Настройка BackupPC

В свете того, что случайно удалил одну важную папку, решил сделать бэкап фоток которые собираются уже не один год. Т.к. в моей домашней сети, есть сервачок, было решено делать бэкап на нем. Выбор программы для бэкапа пал BackupPC. Мануалов по установке в интернете море, да и сама установка довольно проста. Однако, все равно я столкнулся с рядом особенностей о которых и пойдет речь..

Установка в CentOS 7 простая:

# yum install backuppc

В зависимостях Apache и Perl. После установки, нужно сгенерить пользователя:

# htpasswd -c /etc/BackupPC/apache.users yourusername

и добавить доступ вашему ip в конфигурацию апача:

# nano /etc/httpd/conf.d/BackupPC.conf

и разрешаем доступ из локальной сетки:

<RequireAny>
  ...
  Require ip 192.168
  ...
</RequireAny>

Перезапускаем Apache:

# service httpd restart

При необходимости так же стартуем BackupPC и добавляем его в автозагрузку:

# service backuppc start
# chkconfig backuppc on

Теперь открываем в браузере: http://server.loc/backuppc , где server.loc = адрес вашего сервака

вот тут я получил такую ошибку:

Error: Unable to connect to BackupPC server

This CGI script (/backuppc) is unable to connect to the BackupPC server on localhost port -1.
The error was: unix connect: No such file or directory.
Perhaps the BackupPC server is not running or there is a configuration error. Please report this to your Sys Admin.

Лично я вообще не понял по этому сообщению в чем проблема, однако я посмотрел логи:

cat /var/log/BackupPC/LOG

и увидел следующее:

2016-03-02 16:47:23 unix bind() failed: No such file or directory

Не особо так же понял в чем проблема, но гугл подсказал, что нужно создать папку и назначить ей владельца:

mkdir /var/run/BackupPC
chown backuppc:backuppc /var/run/BackupPC

дальше надо перезапустить сервис:

# service backuppc restart

Заходим опять в панельку: http://server.loc/backuppc , теперь ошибок нет.

Тут, есть важное замечание. Если на данном этапе у Вас все заработало, попробуйте перезагрузить ПК. Разумеется, если есть такая возможность. В моем случае, созданная папка
/var/run/BackupPC автоматом удалилась. Я не особо знаком с архитектурой сервисов, но похоже, все папки /var/run/* должны создаваться в момент запуска сервиса автоматически. Я решил этот вопрос правкой init скрипта. Для этого, открыл: /etc/init.d/backuppc , и добавил в раздел start создание папки:

...
start() {
...
    if [[ ! -e "/var/run/BackupPC" ]]; then
        mkdir /var/run/BackupPC && chown backuppc:backuppc /var/run/BackupPC
    fi
...

Если в Вашей версии такой проблемы нет, то и делать этого не нужно.

Так, ошибок нет, но нет и опций для управления:

Опции управления

Для того, чтобы это поменять, надо указать пользователей которым они доступны, для этого открываем файл:

# nano /etc/BackupPC/config.pl

и указываем пользователя, которого мы создавали через htpasswd для входа в админку:

$Conf{CgiAdminUsers}     = 'username';

сохраняемся и перезапускаем сервис:

# service backuppc restart

Теперь у нас появилось побольше возможностей:

BackupPC дополнительные возможности

Дальше как только я переключился на вкладку "Edit Config>Server" я получил такие ошибки:

Error: No save due to errors
Error: Bzip2Path must be a valid executable path

Случилось это потому, что у меня не установлен bzip2, устанавливаем:

#yum install bzip2

Соответственно, если у Вас не установленно что-то, что указано на этой вкладке, устанавливаете сами:

BackupPC зависимости

Например, на моем скриншоте отсутствует PingPath, поэтому его нужно тут прописать, ищем где он в системе и добавляем, в моем случае это:

/bin/ping

Предварительная настройка сделанна, теперь делаем дополнительные. Т.к. в моем случае, бэкап системе надо ходить на другой ПК, то нужно выбрать способ которым она будет это делать. В моем случае, это будет Rsync через SSH, поэтому описывать буду именно его. Про другие способы просто погуглите и найдете много описаний с картинками, например тут описано как бэкапить шары Windows.

Т.к. при обычном коннекте по SSH, надо вводить пароль - такой способ авторизации нам не подходит. Поэтому мы воспользуемся авторизацией "по ключу" (см. п.7 Use Public/Private Keys for Authentication). Чтобы не путаться в названиях, уточню: клиент = бэкап сервер, там где установлен backuppc (буду называть БЭКАП СЕРВЕР) ; сервер = это комп с источником для бэкапа (буду называть КОМП).

Прежде всего, надо включить bash для пользователя backuppc, делаем это так:

# usermod -s /bin/bash backuppc

теперь входим под пользователем backuppc:

# su - backuppc

далее генерируем ssh ключи:

# ssh-keygen -t rsa

** На запрос passphrase, нажимаем просто Enter,

Дальше нужно скопировать public key на КОМП. Тут можно поступить разными способами, я предпочел на КОМПе создать пользователя backuppc, и импортировать ключ именно ему. Таким образом, при необходимости будет возможность ограничить ему доступ только к нужным данным. Разумеется в зависимости от ситуации это могут быть и другие пользователи: www-data или даже root. Тут уж решайте сами.

Итак идем на КОМП и создаем пользователя и задаем ему пароль:

# sudo useradd -m -s /bin/bash backuppc && sudo passwd backuppc

Теперь возвращаемся на БЭКАП СЕРВЕР и копируем созданный ранее публичный ключ:

# ssh-copy-id backuppc@192.168.101.138

** тут 192.168.101.138 = адрес КОМПа в локальной сети

На запрос о соединении вводим yes и вводим пароль, который мы указали для пользователя backuppc созданного на КОМПе (строчкой выше), должен получиться примерно такой диалог:

-bash-4.2$ ssh-copy-id backuppc@192.168.101.138
The authenticity of host '192.168.101.138 (192.168.101.138)' can't be established.
ECDSA key fingerprint is d0:b2:d8:b1:8b:01:30:e6:f0:1a:56:41:60:f6:fe:04.
Are you sure you want to continue connecting (yes/no)? yes
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

backuppc@192.168.101.138's password: 
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'backuppc@192.168.101.138'"
and check to make sure that only the key(s) you wanted were added.

Теперь как и написано, проверяем соединение, должны авторизоваться, после чего просто выходим:

-bash-4.2$ ssh 'backuppc@192.168.101.138'
Welcome to Ubuntu 15.10 (GNU/Linux 4.2.0-27-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

backuppc@Vitto-PC:~$ exit
logout
Connection to 192.168.101.138 closed.

Отлично, теперь соединение по ключу настроенно. Здесь на БЭКАП СЕРВЕРЕ, можно поменять консоль на nologin, чтобы запретить логин в эту учетку:

# usermod -s /sbin/nologin backuppc

мне она пока нужна, поэтому я не стал её отключать.

Теперь, настраиваем сам backuppc, идем в браузер и добавляем новый хост:

Добавляем новый хост

Тут в качестве адреса, можно указать ip или имя компа, а так же пользователя. Мы тут указываем имя КОМПа, или его ip, если ip постоянный.

После того, как добавили хост выбираем его в выпадающем списке и настраиваем уже параметры бэкапа. Если Вы настраивали работу от пользователя root, то для теста достаточно указать тестовую папку:

Тестовая конфигурация

Мне же, т.к. я использую другого пользователя (backuppc), нужно его указать в параметрах RsyncClientCmd и RsyncClientRestoreCmd:

Изменение пользователя BackupPC

Теперь можно запускать, переходим в раздел Home и нажимаем [Start Full Backup]:

Запуск генерации бэкапа

После этих действий, должны появиться бэкапы:

Бэкапы сгенерировались

Если же, по какой-то причине, чуда не произошло, посетите раздел LOGS, там всего скорее будут ошибки исходя из которых нужно будет либо подправить конфигурацию, либо понять что пошло не так.

В качестве небольшого дополнения, расскажу что делать, если у Вас, как у меня, диск для хранения всякого разного находится в другом месте. Например у меня это Raid 1, смонтированный в /mnt/md0. Для того, чтобы перенести место хранения файлов BackupPC, просто создаем папку:

# mkdir /mnt/md0/Backups

теперь копируем в неё оригинальную папку BackupPC:

# cp /var/lib/BackupPC /mnt/md0/Backups/

после того как папку скопированна, переименовываем её (можно сразу удалять, но лучше перестраховаться):

# mv /var/lib/BackupPC /var/lib/BackupPC.tmp

Теперь меняем настройку TopDir в настройках BackupPC и создаем симлинк на новое место:

# ln -s /mnt/md0/Backups/BackupPC /var/lib/BackupPC

проверяем, если все работает, можно удалять /var/lib/BackupPC.tmp . Симлинк нужно создавать т.к. туда (/var/lib/BackupPC) указывает домашняя директория пользователя backuppc, при желании это можно исправить и полностью избавиться от этой директории, но я не стал этого делать.

На сегодня это всё. Хотел написать небольшую заметку, но получилась целая статья.

--[часто возникающие вопросы, ошибки и их причины]--

  • Got fatal error during xfer (Unable to read 4 bytes). Backup aborted (Unable to read 4 bytes)
    Не может подконнектиться к серверу. Войдите под выбранным пользователем, и проверьте что происходит коннект по ssh ключу, без запроса пароля. Так же проверьте, чтобы был установлен корректный пользователь в шаблонах RsyncClientCmd и RsyncClientRestoreCmd, которые находятся на вкладку Xfer, конфигурации хоста.
  • Error: {Any}Path must be a valid executable path
    Не найден путь к программе. Проверьте настройку путей к программам.
  • Что будет, если во время бэкапа отключить комп, с которого происходит бэкап?
    Ничего страшного не будет. То что успело скопироваться будет помечено как Partial backup. В следующий раз будет сделан инкрементный бэкап, либо продолжит делаться полный бэкап в случае использования rsync. Подробнее поведение описанно тут: Backup basics > Partial backup:

    When a full backup fails or is canceled, and some files have already been backed up, BackupPC keeps a partial backup containing just the files that were backed up successfully. The partial backup is removed when the next successful backup completes, or if another full backup fails resulting in a newer partial backup. A failed full backup that has not backed up any files, or any failed incremental backup, is removed; no partial backup is saved in these cases.
    The partial backup may be browsed or used to restore files just like a successful full or incremental backup.
    With the rsync transfer method the partial backup is used to resume the next full backup, avoiding the need to retransfer the file data already in the partial backup.

Категории: Linux