Создание резервных копий

Основные параметры утилиты rsync:

  • -a (архивный режим): сохраняет структуру каталогов и права доступа.
  • -v (verbose): выводит подробную информацию о процессе копирования.
  • --delete: удаляет файлы в целевом каталоге, если они были удалены в исходном.
  • -z: сжатие файлов при передаче;
  • --progress: отображает прогресс копирования.

Пример команды для создания резервной копии каталога /home на внешний диск:

rsync -av --delete /home/ /mnt/backup/home/

где /mnt/backup/home/ — это целевой каталог, в который будут скопированы данные.

Автоматизация создания резервных копий в ОС осуществляется с использованием systemd. Для автоматического запуска задач резервного копирования используют планировщик systemd timers, который заменяет классический cron.

Для настройки заданий резервного копирования придерживайтесь следующей инструкции:

  1. Создание 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 файл.

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

  1. Запуск и активация таймера:
sudo systemctl start backup.timer
sudo systemctl enable backup.timer

Теперь резервное копирование будет выполняться автоматически согласно заданному расписанию.

Подробно о создании и настройке расписания для файла .timer systemd см. раздел Unit-файлы.

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

  1. Инкрементное резервное копирование, которое позволяет копировать только изменённые файлы. Для этого используется флаг --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
  1. Ограничение пропускной способности при резервном копировании. Чтобы предотвратить перегрузку сети, можно ограничить скорость передачи данных при проведении резервного копирования. Для этого в файле .service укажите следующие параметры:
[Service]
ExecStart=/usr/bin/rsync -av --bwlimit=5000 /home/ /mnt/backup/home/

где 5000 означает ограничение в 5000 КБ/с (5 МБ/с). Это полезно для резервного копирования в рабочее время, когда важно сохранять пропускную способность сети.

  1. Задание для копирования сжатых файлов с использованием опции -z:
[Service]
ExecStart=/usr/bin/rsync -avz /home/ /mnt/backup/home/

Дополнительно должен быть также задан .timer файл для данного задания.

  1. Настройка уведомления по электронной почте о завершении задания через 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 файл для данного задания.

  1. Настройка резервного копирования с условием запуска задания только при подключении внешнего диска:
[Service]
ExecStart=/bin/bash -c 'if mount | grep /mnt/backup; then rsync -av --delete /home/ /mnt/backup/home/; fi'

Дополнительно должен быть также задан .timer файл для данного задания.

  1. Комплексное задание с ограничением скорости, сжатием и уведомлением по электронной почте:
[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 файл для данного задания.

  1. Отчёт по результатам выполнения задания. Чтобы сохранить лог выполнения задания в отдельный файл, можно добавить следующую команду:
[Service]
ExecStart=/usr/bin/rsync -av --delete /home/ /mnt/backup/home/
StandardOutput=append:/var/log/backup.log

Логи будут записываться в файл /var/log/backup.log после каждого выполнения задания.

  1. Для контроля процесса резервного копирования и проверки резервных копий можно проверять логи systemd:
journalctl -u backup.service

Для проверки целостности данных можно использовать флаг --dry-run:

rsync -av --dry-run /home/ /mnt/backup/home/

Флаг --dry-run позволяет симулировать процесс копирования без фактического изменения данных, чтобы увидеть, какие файлы будут обновлены.