BackupPC
BackupPC - система резервного копирования, ориентированная на диски.
Возможности BackupPC:
- Не требует установленного клиента.
- Дедупликация данных. Идентичные файлы в нескольких резервных копиях одного и того же или разных ПК сохраняются только один раз, что приводит к существенной экономии дискового пространства и дискового ввода-вывода.
- Интеллектуальная схема пулинга, минимизирующая дисковые ресурсы и ввод/вывод. Идентичные файлы во множестве резервных копий на одном и том же или разных PC сохраняются только единожды, что приводит к экономии дискового пространства и уменьшению количества операций записи. Это также называется "дедупликация данных".
- Опция сжатия обеспечивает дополнительное уменьшение размера резервной копии. Нагрузка на процессор при этом низка, так как сжатию подвергаются только новые файлы (которых ещё нет в пуле).
- Мощный http/cgi интерфейс позволяет администраторам просматривать логи, конфигурацию, текущий статус, а пользователям - начинать и отменять резервное копирование, просматривать и восстанавливать файлы из резервных копий.
- Не нужно никаких клиентских программ. Для Windows применяется протокол SMB. А для Linux или Unix можно использовать rsync или tar (через ssh/rsh/nfs).
- Гибкие опции восстановления. Как одиночные файлы, так и Zip и Tar архивы выбранных файлов и каталогов могут быть восстановлены непосредственно в CGI интерфейсе.
- BackupPC поддерживает мобильные устройства, где имеется непостоянное подключение к сети и динамическая адресация (DHCP).
- Гибкие параметры конфигурации позволяют параллельное выполнение нескольких задач резервного копирования.
Рекомендую для резервирования связку AutoMySQLBackup и BackupPC.
Хостинг для развёртывания BackupPC
Программа BackupPC не требовательная к ресурсами, значит в первую очередь нужны большие диски и устойчивый интернет. Для себя выбрал нескольких хостинг провайдеров (список регулярное обновляется ибо все в жизни меняется), на 2023:
- Friendhosting с очень дешевой ценой, себе взял Storage HDD на 500 Gb (CPU: Xeon 2 core RAM: 2 Gb IPv4: 1 pcs. IPv6: 1 pcs.) в Болгарии, можно взять такой же в Нидерландах, но по чуть более дорогой цене.
Установка BackupPC на сервер
Руководство обновлено для Ubuntu 22 BackupPC 4.4
apt install backuppc
Автоматически будет создан пароль для пользователя 'backuppc'. Чтобы изменить пароль, запустите команду
htpasswd /etc/backuppc/htpasswd backuppc
. Изменим расположение директории для бекапов (по умолчанию /var/lib/backuppc). config.pl - основной конфигурационный файл:
# nano /etc/backuppc/config.pl $Conf{TopDir} = '/home/keephdd/backuppc'; $Conf{PingMaxMsec} = 200; $Conf{PingPath} = '/bin/ping'; $Conf{Ping6Path} = '/bin/ping6'; # mkdir -p /home/keephdd/backuppc/pc # mkdir -p /home/keephdd/backuppc/cpool # chown -R backuppc:backuppc /home/keephdd/backuppc # systemctl restart backuppc
Дальнейшие настройки для Apache производятся через Web интерфейс по адресу http://backuppc_server_ip/backuppc, а для Nginx http://your_domain/
Настройка BackupPC на Apache
Здесь все просто - в комплекте находится готовый конфигурационный файл под вебсервер Apache, который устанавливается при установке BackupPC (/etc/backuppc/apache.conf).
Alias /backuppc /usr/share/backuppc/cgi-bin/ <Directory /usr/share/backuppc/cgi-bin/> AllowOverride None # Uncomment the line below to ensure that nobody can sniff important # info from network traffic during editing of the BackupPC config or # when browsing/restoring backups. # Requires that you have your webserver set up for SSL (https) access. #SSLRequireSSL Options ExecCGI FollowSymlinks AddHandler cgi-script .cgi DirectoryIndex index.cgi AuthUserFile /etc/backuppc/htpasswd AuthType basic AuthName "BackupPC admin" <RequireAll> # Comment out this line once you have setup HTTPS and uncommented SSLRequireSSL Require local # This line ensures that only authenticated users may access your backups Require valid-user </RequireAll> </Directory>
Настройка BackupPC на Nginx
Если не установлен пакет Perl, установите
apt install perl
Установим поддержку CGI (scgi) в Nginx
apt install fcgiwrap systemctl enable fcgiwrap systemctl start fcgiwrap
Создаем файл конфигурации backuppc для Nginx
/etc/nginx/sites-available/backuppc.conf
server { listen <your_server_port>; server_name <your_server_name>; root /usr/share/backuppc; index cgi-bin/index.cgi; access_log /var/log/nginx/backuppc.access.log; error_log /var/log/nginx/backuppc.error.log; location / { location /backuppc { alias /usr/share/backuppc; } auth_basic "Backup"; auth_basic_user_file /etc/backuppc/htpasswd; location ~ \.cgi$ { include fastcgi_params; fastcgi_pass unix:/run/fcgiwrap.socket; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_USER $remote_user; fastcgi_param SCRIPT_FILENAME /usr/share/backuppc/cgi-bin/index.cgi; } } }
Подключаем его и перегружаем Nginx:
ln -s /etc/nginx/sites-available/backuppc.conf /etc/nginx/sites-enabled nginx -s reload
Бэкап локальных директорий сервера BackupPC
Возможные ошибки бекапа локальных директорий на сервере BackupPC:
- Backup failed on localhost (Tar exited with error 512 () status)
- Got fatal error during xfer (sudo: no tty present and no askpass program specified)
Бэкап локальных директорий по умолчанию не работает, не хватает прав для копирования некоторых файлов. Через веб-интерфейс изменяем параметр TarClientCmd или в файле /etc/backuppc/localhost.pl меняем строку
$Conf{TarClientCmd} = '/usr/bin/env LC_ALL=C $tarPath -c -v -f - -C $shareName --totals'
Заменяем на
$Conf{TarClientCmd} = '/usr/bin/sudo /usr/bin/env LC_ALL=C $tarPath -c -v -f - -C $shareName --totals'
Настраиваем sudo:
# visudo backuppc ALL=NOPASSWD: /bin/tar, /usr/bin/rsync, /usr/bin/env
пришлось разрешить /usr/bin/env иначе возникает ошибка Got fatal error during xfer (sudo: no tty present and no askpass program specified)
Настройка расписания (Schedule) резервного копирования
Расписание резервного копирования (Backup Schedule) по умолчанию:
- Полная резервная копия каждые 7 дней, хранить только самую новую копию.
- Инкрементное резервное копирование каждый день, храните шесть самых последних резервных копий.
Если вы хотите изменить интервал, нажмите на вкладку «Schedule» на верхней панели. Не забудьте нажать «Save», если вы вносите какие-либо изменения.
Полные резервные копии имеют значение "6,97" в «FullPeriod», а инкрементные резервные копии имеют значение "0,97" в поле «IncrPeriod». Это значения, соответствующие 7 и 1 дню соответственно, поскольку они также учитывают время для завершения резервного копирования.
Вы можете изменить количество резервных копий, которые поддерживает система. Вы также можете указать время, когда резервное копирование не должно выполняться, настроив «blackouts», когда резервное копирование не может начаться.
В этом руководстве мы будем придерживаться значений по умолчанию.
- Параметр FullKeepCnt задает количество полных бэкапов (по умолчанию 1)
- Параметр FullAgeMax какое количество дней хранить бэкапы
- Полная резервная копия:
FullPeriod — минимальное время в днях между полными бекапами FullKeepCnt — сколько полных бекапов необходимо хранить FullKeepCntMin — минимальное количество хранимых полных бекапов FullAgeMax — максимальный возраст хранимого полного бекапа
- Инкрементальная резервная копия:
IncrPeriod — минимальное время в днях между инкрементальными бекапами IncrKeepCnt — сколько инкрементальных бекапов необходимо хранить IncrKeepCntMin — минимальное количество хранимых инкрементальных бекапов IncrAgeMax — максимальный возраст хранимого инкрементального бекапа IncrLevels — уровень инкрементального бекапа IncrFill — использовать в системе хард-линки, что бы инкрементальный бекап выглядел полным.
Резервное копирование BackupPC по SSH
Для использования протокола SSH для резервного копирования данных с клиентского компьютера, следует создать ключи доступа.
Сервер
- Создаем ключи на сервере с установленным BackupPC
# su - backuppc $ mkdir .ssh $ cd .ssh $ ssh-keygen -t rsa -C remuserbak@backuppc
на все вопросы просто жмем клавишу Enter
$ chmod 600 id_rsa $ ls -l -rw------- 1 backuppc backuppc 1675 Фев 12 14:59 id_rsa -rw-r--r-- 1 backuppc backuppc 401 Фев 12 14:59 id_rsa.pub
С приватным ключом id_rsa программа BackupPC будет подключаться к клиентским компьютерам. На клиентские компьютер должен быть перенесён публичный ключ, сделаем это при помощи утилиты SSH-copy-id, она автоматически создаст файл authorized_keys с нашим ключем в директории .ssh. Например:
ssh-copy-id -i id_rsa.pub remuserbak@<IP клиента>
Клиент Ubuntu, FreeBSD
Алгоритм настройки довольно прост и поддается автоматизации, например при помощи Ansible:
- Создать пользователя remuserbak.
- Предоставить необходимые права в системе для созданного пользователя.
- Добавить ему открытый ключ (созданный на сервере).
- Разрешить вход по ключу на сервере SSH.
Создаем пользователя от имени которого будет производиться копирование данных и задаем ему сложный пароль. Пароль нам понадобится один раз для копирования ssh ключа.
adduser remuserbak usermod -aG sudo remuserbak
Даем права на запуск sudo без пароля пользователю remuserbak. В самый конец файла добавляем строчку
> visudo remuserbak ALL=NOPASSWD: /bin/tar, /usr/bin/rsync, /usr/bin/env
Переносим публичный ключ, сделаем это при помощи утилиты SSH-copy-id. Для этого на сервере, где установлен сервер BackupPC, от имени пользователя, от которого запускается демон backuppc, запускаем утилиту ssh-copy-id
su - backuppc ssh-copy-id -i .ssh/id_rsa.pub remuserbak@xxx.xxx.xxx.xxx
Для того чтобы проверить, что все работает и добавления информацию о хосте в файл "known_hosts", подключитесь к клиентскому компьютеру используя команду
ssh 'remuserbak@xxx.xxx.xxx.xxx'
Если хостов много, для автоматизации добавления информации в файл "known_hosts", можно сделать так:
nano /var/lib/backuppc/.ssh/config Host * StrictHostKeyChecking no
Или добавить в настройки подключения BackupPC следующие опции:
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
Дальнейшая настройка происходит через веб-интерфейс:
- Страница Edit Hosts добавляем адрес клиента и имя пользователя, от которого будет совершаться копирование данных, в нашем примере это пользователь remuserbak. Маленький лайфхак: по умолчанию вы можете добавить или IP или полное доменное имя резервируемого сервера, но можно сделать красиво. На скриншоте, я добавил сервер для резервирования с именем nice-domain-name и если теперь прописать для него ip в файле /etc/hosts - все будет работать. Иногда это очень удобно.
- В настройках клиента, на странице Xfer Settings указываем XferMethod = rsync, в параметре RsyncShareName задаем директории для копирования
- Меняем пользователя root на remuserbak в поле RsyncSshArgs. И добавляем в RsyncClientPath запуск программы rsync под sudo. Эти изменения можно задать как глобально для всего сервера BackupPC, так и индивидуально для каждого клиента.
Всё!
Для более старых версии BackupPC пункт 3 меняется по другому. Нужно заменить пользователя root на remuserbak в строках RsyncClientCmd и RsyncClientRestoreCmd:
$Conf{RsyncClientCmd} = '$sshPath -q -x -l remuserbak $host /usr/bin/sudo $rsyncPath $argList+'; $Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l remuserbak $host /usr/bin/sudo $rsyncPath $argList+';
Резервное копирование BackupPC по FTP
Зачастую хостеры представляющие услуга виртуального хостинга блокирует подключение по SSH. Но резервировать надо и нам остаётся использовать только протокол FTP.
В версии BackupPC 4 и выше появилась встроенная возможность использовать клиента FTP для резервирования.
Но я предпочитаю монтировать удаленный FTP сервер при помощи curlftpfs и далее rsynx делать бэкап локально. Из опыта так надежнее и проще.
- Устанавливаем под вашу ОС, как описано в статье Монтирование удалённой папки (FTP, SSH) в Linux
FAQ. How to purge backups for a host?
Если нужно удалить полностью резервные файлы для хоста. Вам может понадобиться очистка пула. Его размер вы можете посмотреть в логе системы после перезапуска BackupPC.
Очистить пулл BackupPC:
su - backuppc $ /usr/share/backuppc/bin/BackupPC_nightly 0 255 BackupPC_stats 0 = pool,0,0,0,0,0,0,0,0,0,0, ...
FAQ. BackupPC: ping too slow
BackupPC: ping too slow. При возникновении этой ошибки бекап не производится. Для устранения нужно изменить параметр до 200 $Conf{PingMaxMsec} = 200;
FAQ. BackupPC: "no ping response" for localhost
После инсталляции BackupPC на Ubuntu, столкнулся тем что не архивируется localhost (то есть сервер на котором установлен непосредственно демон backuppc). В логе backuppc для localhost пишет ошибку no ping response.
Для устранения ошибки нужно прописать путь к утилите ping проверки целостности и качества локальной сети и Интернета в директиве $Conf{Ping6Path} в файле /etc/backuppc/config.pl.
$Conf{PingPath} = '/bin/ping'; # inserted '/bin/ping6' for default '': $Conf{Ping6Path} = '/bin/ping6';
Не забываем перезапустить сервис
systemctl restart backuppc
Заключение
BackupPC — это мощный и удобный способ автоматического резервного копирования файлов с нескольких серверов в центральное хранилище. Резервные копии необходимы для любой производственной среды. Не менее важно убедиться, что операции восстановления файлов работают правильно.
Существует множество инструментов резервного копирования для Linux и Unix-подобных операционных систем. Выберите решение, которое наилучшим образом соответствует вашим потребностям. BackupPC — отличный инструмент, который должен хорошо работать во многих ОС.
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!
7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах