Резервные копии - это как страховка: они не нужны каждый день, но когда случается беда, например, случайное удаление файла, сбой диска или атака программы-вымогателя, этого достаточно, чтобы всё разрушить, если вы не готовы. Вот тут-то и приходит на помощь грамотное планирование резервного копирования.
В этом руководстве я покажу вам, как запланировать инкрементное резервное копирование с помощью rsync и cron.
Допустим, у вас есть несколько важных файлов, хранящихся в /home/username/documents/
, и вы хотите создать их резервную копию в /backup
. Мы напишем простой сценарий командной оболочки, который использует rsync
для копирования изменённых файлов в каталог резервных копий. Затем мы будем использовать cron
для запуска этого сценария каждый день в 3 часа ночи.
Создание сценария Bash
Создайте сценарий в /usr/local/bin/
или каталоге домашних пользователей.
|
|
Вставьте следующие строки кода:
|
|
Основные функции сценария
Этот скрипт сообщает rsync
о необходимости синхронизации файлов из исходного каталога с целевым.
Флаг -a
указывает на то, что скрипт должен работать в режиме архивации, сохраняя разрешения и метаданные.
-v
делает вывод подробным (чтобы мы могли записывать происходящее), а --delete
удаляет файлы из резервной копии, если они больше не существуют в исходном файле. Весь вывод записывается в файл журнала в /var/log/rsync-backup-$(date +%F).log
так, чтобы мы могли позже проверить, не пошло ли что-то не так.
Выполнение резервного копирования
Сделайте сценарий исполняемым:
|
|
Чтобы инициировать резервное копирование:
|
|
После завершения работы скрипта перейдите в каталог с резервными копиями и убедитесь, что файлы скопированы правильно:
|
|
Теперь проверьте файл журнала, чтобы убедиться, что скрипт выполнился без ошибок и зафиксировал время резервного копирования:
|
|
Автоматизация с помощью Cron
Расписания cron
хранятся в файле с именем crontab. Типичная запись crontab начинается с пяти значений (или звездочек), за которыми следует команда. Значения сообщают cron
, когда выполнять команду, а звездочка означает «все».
|
|
Чтобы отредактировать crontab, выполните:
|
|
И добавьте строку:
|
|
Это запланирует cron
для запуска команды в 3:00, каждый день любого месяца.
Убедитесь, что сценарий имеет исполняемые разрешения.
Ежедневные резервные копии
Если вы хотите пойти дальше и делать ежедневные резервные копии данных (а не просто хранить одну резервную папку), вы можете использовать опцию --link-dest
в rsync
, которая позволяет создавать резервные копии с жёсткими ссылками, по сути, создавая новые папки, которые выглядят как полные резервные копии, но используют место только для изменённых файлов.
В первый день создайте начальное полное резервное копирование:
|
|
На следующий день используйте папку за предыдущий день в качестве ссылки для создания инкрементного резервного копирования:
|
|
Файлы, которые не изменились, будут связаны жёсткими ссылками, что сэкономит место. Вы даже можете менять местами эти папки с помощью простого скрипта, который переименовывает старые и каждый день создаёт новый снимок.
Вот базовый сценарий ротации на 7 дней:
|
|
Вы можете запланировать выполнение этого скрипта с помощью cron, как и базового скрипта резервного копирования. Например, чтобы запускать его каждый день в 3 часа ночи:
|
|
Если вы хотите создать резервную копию своих данных на другом компьютере (например, на сервере резервного копирования), вы можете использовать rsync через SSH, но убедитесь, что ключи SSH настроены для входа без пароля, а затем выполните что-то вроде этого:
|
|
Данная процедура называется «push», так как она «толкает» каталог из локальной системы на удаленную.
Вы можете добавить приведенную выше команду в свой скрипт или создать отдельный скрипт только для удаленного резервного копирования.
Завершение
Вы успешно настроили автоматизированное резервное копирование с помощью сценария Bash на Linux с использованием rsync
и cron
. Автоматизация сценариев Bash позволяет выполнять общие задачи системного администрирования, такие как резервное копирование. Чтобы упростить управление системой, создайте несколько сценариев Bash и заданий cron
, указав необходимые команды для каждого.
Вы можете поделиться статьей со своими друзьями в социальных сетях, которым может быть интересна эта статья или просто оставить комментарий ниже. Спасибо.