Создание резервных копий
Основные параметры утилиты rsync:
-a(архивный режим): сохраняет структуру каталогов и права доступа.-v(verbose): выводит подробную информацию о процессе копирования.--delete: удаляет файлы в целевом каталоге, если они были удалены в исходном.-z: сжатие файлов при передаче;--progress: отображает прогресс копирования.
Пример команды для создания резервной копии каталога /home на внешний диск:
rsync -av --delete /home/ /mnt/backup/home/
где /mnt/backup/home/ — это целевой каталог, в который будут скопированы данные.
Автоматизация создания резервных копий в ОС осуществляется с использованием systemd. Для автоматического запуска задач резервного копирования используют планировщик systemd timers, который заменяет классический cron.
Для настройки заданий резервного копирования придерживайтесь следующей инструкции:
- Создание unit-файл
/etc/systemd/system/backup.serviceдля выполнения задачи резервного копирования:
sudo nano /etc/systemd/system/backup.service
Содержимое файла должно быть следующим:
[Unit]
Description=Резервное копирование каталога /home
Wants=backup.timer
[Service]
ExecStart=/usr/bin/rsync -a --delete /home/ /mnt/backup/home/
[Install]
WantedBy=multi-user.target
где в строке Wants= прописывается имя таймер файла, который создается на следующем шаге. А в строке WantedBy= указывается уровень загрузки Системы, при котором будет работать данный .service файл.
- Создание файла с расширением .timer и названием
/etc/systemd/system/backup.timerдля запуска сервиса:
sudo nano /etc/systemd/system/backup.timer
Содержимое файла должно быть следующим (для примера рассмотрим задание, в котором копирование будет запускаться ежедневно):
[Unit]
Description=Таймер для запуска резервного копирования
Requires=backup.service
[Timer]
OnCalendar=daily
Persistent=true
Unit=backup.service
[Install]
WantedBy=timers.target
где в строке Requires= указывается имя созданного выше .service файла.и регламентируется то, что таймер запускается только при его наличии. И в строке Unit= также указывается имя созданного файла .service который будет запускаться при срабатывании таймера.
Параметр Persistent=true должен быть включен в содержание файла, т.к. он позволяет выполнять задачу после пропуска, если Система была выключена.
- Запуск и активация таймера:
sudo systemctl start backup.timer
sudo systemctl enable backup.timer
Теперь резервное копирование будет выполняться автоматически согласно заданному расписанию.
Подробно о создании и настройке расписания для файла .timer systemd см. раздел Unit-файлы.
Дополнительные параметры для более гибкой настройки резервного копирования:
- Инкрементное резервное копирование, которое позволяет копировать только изменённые файлы. Для этого используется флаг
--link-dest. Для проведения инкрементного копирования настройте systemd сервис и таймер-файлы следующим образом:
[Service]
ExecStart=/usr/bin/rsync -av --link-dest=/mnt/backup/home/previous /home/ /mnt/backup/home/current/
Файл .timer, например, настройте для ежедневного инкрементного резервного копирования в 1:00:
[Timer]
OnCalendar=*-*-* 01:00:00
Persistent=true
- Ограничение пропускной способности при резервном копировании. Чтобы предотвратить перегрузку сети, можно ограничить скорость передачи данных при проведении резервного копирования. Для этого в файле .service укажите следующие параметры:
[Service]
ExecStart=/usr/bin/rsync -av --bwlimit=5000 /home/ /mnt/backup/home/
где 5000 означает ограничение в 5000 КБ/с (5 МБ/с). Это полезно для резервного копирования в рабочее время, когда важно сохранять пропускную способность сети.
- Задание для копирования сжатых файлов с использованием опции
-z:
[Service]
ExecStart=/usr/bin/rsync -avz /home/ /mnt/backup/home/
Дополнительно должен быть также задан .timer файл для данного задания.
- Настройка уведомления по электронной почте о завершении задания через systemd service:
[Service]
ExecStart=/usr/bin/rsync -av --delete /home/ /mnt/backup/home/
ExecStartPost=/usr/sbin/sendmail admin@example.com < /var/log/backup.log
Дополнительно должен быть также задан .timer файл для данного задания.
- Настройка резервного копирования с условием запуска задания только при подключении внешнего диска:
[Service]
ExecStart=/bin/bash -c 'if mount | grep /mnt/backup; then rsync -av --delete /home/ /mnt/backup/home/; fi'
Дополнительно должен быть также задан .timer файл для данного задания.
- Комплексное задание с ограничением скорости, сжатием и уведомлением по электронной почте:
[Service]
ExecStart=/usr/bin/rsync -avz --bwlimit=5000 --delete /home/ /mnt/backup/home/
ExecStartPost=/usr/sbin/sendmail admin@example.com < /var/log/backup.log
Дополнительно должен быть также задан .timer файл для данного задания.
- Отчёт по результатам выполнения задания. Чтобы сохранить лог выполнения задания в отдельный файл, можно добавить следующую команду:
[Service]
ExecStart=/usr/bin/rsync -av --delete /home/ /mnt/backup/home/
StandardOutput=append:/var/log/backup.log
Логи будут записываться в файл /var/log/backup.log после каждого выполнения задания.
- Для контроля процесса резервного копирования и проверки резервных копий можно проверять логи systemd:
journalctl -u backup.service
Для проверки целостности данных можно использовать флаг --dry-run:
rsync -av --dry-run /home/ /mnt/backup/home/
Флаг --dry-run позволяет симулировать процесс копирования без фактического изменения данных, чтобы увидеть, какие файлы будут обновлены.