Существует много инструментов для выполнения архивации данных на линуксе. Сегодня хочу рассмотреть программу duplicity, с помощью которой можно выполнить полный бэкап linux сервера. Она проста в использовании, но при этом очень удобна и функциональна.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Введение
Обычно я использую для бэкапов rsync. Это гибкое и удобное средство, но в некоторых случаях им неудобно пользоваться. У него есть как плюсы, так и минусы. Как я использую и настраиваю rsync для бэкапа, я рассказал в отдельной статье. Если вы хотите получить компактный бэкап всей системы, или хранить на удаленном сервере бэкап с множеством файлов и директорий, вам придется как-то упаковывать файлы в архивы и передавать их. Кучу мелких файлов в сыром виде передавать медленно и неудобно.
Я часто использую для хранения бэкапов Yandex.Disk. Готовый кейс по настройке бэкапа сайта на яндекс.диск я уже приводил ранее. Диск монтируется по webdav и работает достаточно медленно. Передавать кучу мелких файлов по нему не удобно. Я решил посмотреть, что есть еще из средств бэкапа. Параллельно хотел рассмотреть вопрос удобного бэкапа всего сервера.
Нашел любопытную программу duplicity. Раньше слышал о ней, но руки не доходили проверить самому. Теперь дошли, перейдем к настройке полного бэкапа сервера.
Установка duplicity на Centos
С установкой все просто:
# yum install -y duplicity
Ставится из репозитория epel. Если у вас не ставится, проверьте, подключены ли репозитории.
Выполняем полный бэкап linux сервера
Чтобы полностью забэкапить сервер, необходимо использовать duplicity со следующими параметрами:
duplicity full --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/tmp --exclude=/var/spool --exclude=/var/cache --exclude=/var/tmp --exclude=/swap / file:///mnt/yadisk --no-encryption
full | Указывает, что мы делаем полный бэкап, можно делать и инкрементный. |
--exclude | Параметр задает списки исключений, сверьте со своим сервером и добавьте необходимые для исключения папки. |
/ | Источник бэкапа. В данном случае корень диска. |
file:///mnt/yadisk | Локальный путь к папке /mnt/yadisk, куда делаем бэкап. У меня в эту папку смонтирован яндекс.диск. |
--no-encryption | Параметр указывает на то, что шифрование не используется. |
После выполнения бэкапа получите следующую информацию:
После полного бэкапа, можно выполнять инкрементный бэкап. Для этого в приведенной выше команды, вместо параметра full нужно использовать incremental.
Восстановление из бэкапа
Для того, чтобы извлечь содержимое бэкапа в папку /restore, воспользуемся командой:
duplicity --no-encryption --file-to-restore / file:///mnt/yadisk /restore
Если вам нужно восстановить какой-то отдельный файл или папку, укажите эту папку или файл следующим образом:
duplicity --no-encryption --file-to-restore var/log file:///mnt/yadisk /restore/var/log duplicity --no-encryption --file-to-restore var/log/messages file:///mnt/yadisk /restore/var/log/messages
Во время восстановления каталога, папки создавать вручную не надо. Если восстанавливаете файл, то полный путь к конечной директории должен существовать.
Проверка и удаление бэкапов duplicity
Приведу еще несколько полезных команд для проверки бэкапов.
Посмотреть информацию о бэкапах в заданном каталоге:
duplicity collection-status --no-encryption file:///mnt/yadisk
Проверить содержимое бэкапа и сравнить с оригиналом:
duplicity verify --no-encryption file:///mnt/yadisk /
В данном случае не очень информативный вывод будет, так как будут отражены все файлы из исключенных директорий, а их очень много.
Посмотреть список файлов в архиве:
duplicity list-current-files --no-encryption file:///mnt/yadisk/duplicity
Необходимым функционалом является очистка старых бэкапов. Для того, чтобы удалить все бэкапы старше одного месяца, нужно воспользоваться командой:
duplicity --no-encryption remove-older-than 1M file:///mnt/yadisk
Чтобы удалить все бэкапы, кроме последнего, подойдет команда:
duplicity --no-encryption remove-all-but-n-full 1 --force file:///mnt/yadisk
На этом все, основные моменты я рассказал. Для бэкапа сервера или отдельных папок этого достаточно.
Заключение
Я рассмотрел малую часть функционала дуплисити. Большим ее плюсом является поддержка всевозможных удаленных хранилищ для бэкапа: ftp, ssh, различные облачные хранилища и другое. Хорошим преимуществом так же является возможность шифровать свои бэкапы. Мне пока нет надобности все это использовать, поэтому я рассмотрел только свой частный случай.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Помогите сделать бекап 1 файла закопеечку
mr.alex.qp@gmail.com
Добрый день.
После запуска команды
duplicity incremental --no-encryption --exclude=/run --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/tmp --exclude=/var/spool --exclude=/var/cache --exclude=/var/tmp --exclude=/swap.img / file:///srv/duplicity/
Получаю ответ :
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Fri Jul 9 10:48:08 2021 - значит информация прочитана.
При проверки командой :
duplicity collection-status --no-encryption file:///srv/duplicity/
Получаю ответ:
Last full backup date: Fri Jul 9 10:48:08 2021
Collection Status
-----------------
Connecting with backend: BackendWrapper
Archive dir: /root/.cache/duplicity/2312b6d2484a344768421dae3e6dc18b
Found 0 secondary backup chains.
Found primary backup chain with matching signature chain:
-------------------------
Chain start time: Fri Jul 9 10:48:08 2021
Chain end time: Fri Jul 9 14:15:17 2021
Number of contained backup sets: 2
Total number of contained volumes: 152
Type of backup set: Time: Num volumes:
Full Fri Jul 9 10:48:08 2021 54
Incremental Fri Jul 9 14:15:17 2021 98
-------------------------
No orphaned or incomplete backup sets found.
Меня одно смущает что Incremental Fri Jul 9 14:15:17 2021 Num volumes: 98
число файлов в Incremental постоянно увеличивается оно уже больше почти в половину от файлов Full.
Можете уточнить по какой причине так происходит?
Num volumes: у Full + Incremental должны быть разные ?
Добрый день.
Сделал все по инструкции, но получаю ошибку
Command line error: Expected 2 args, got 3
Поиск в гугле решения не дал
Что можно предпринять ?
Спасибо
Ярослав, проверьте команду, есть или ошибка или что-то лишнее.
А что делать если при бекапе duplicity не хочет копировать некоторые папки
В итоге в логах: Errors 372
например: Error [Errno 22] Invalid argument getting delta for /var/lib/lxcfs/cgroup/pids/user.slice/user-1000.slice/tasks
Константин, проверьте права папки и есть там что-то.
Может папка или файлы там (locked )
Константин, добрый день.
Я нашёл у себя в чем проблема.
Надо выполнить команду :
sudo umount /var/lib/lxcfs и тогда файлы будут копировать, если у вас есть работающие контейнеры лучше остановить их.
при извлечении получаю ошибку duplicity: error: Bad time string "'file://****"
это блин что такое, нигде найти не могу
При помощи дупликати можно ли будет бекапить целиком сервер с почтой (postfix + dovecot + mysql) или придется еще что то дополнительно добавлять. И какими средствами вы сами бэкапите почтовый сервер. И если не сложно, сколько ориентировочно понадобится для организации двух недельного бэкапа если почтовый сервер вместе с почтой пользоватлей максимум будет весить 150 гигов.
Если почта в формате maildir, я ее бэкаплю с помощью rsync с сохранением ежедневных изменений. Подробнее об этом написал в отдельной статье - https://serveradmin.ru/rsync-nastroyka-bekapa-na-centos-debian-ubuntu/
Размер инкрементного бэкапа будет зависеть от объема ежедневной переписки. Но обычно она не очень большая. Если вся почта пользователей весит 150 гигов, то вряд ли там в день больше 500 мегов набегает.