Создание резервных копий
Основные параметры утилиты 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 см. раздел Планирование резервного копирования и восстановления данных.
Далее рассмотрим дополнительные параметры для более гибкой настройки резервного копирования:
- Инкрементное резервное копирование, которое позволяет копировать только изменённые файлы. Для этого используется флаг
--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 позволяет симулировать процесс копирования без фактического изменения данных, чтобы увидеть, какие файлы будут обновлены.