Резервное копирование файлов RSYNC

Текст: 

Иногда приходится отрываться от привычного Enterprise в сторону малого бизнеса и засучив рукава пилить нечто на коленке. Но ничего - это тоже нужное.

Попытаемся по-быстренькому написать файловый бекап на Linux. Пардон, написать систему резервного копирования (СРК) на файловом уровне, с возможностью создания полных и дифференциальных копий.

Использовать будем известную утилиту RSYNC, она бесплатна и включена во все Linux-дистрибутивы.

Система будет состоять из двух скриптов: full_rsync и diff_rsync

Используются следующие переменные:

source_dir - исходный каталог, для которого необходимо создавать резервные копии

backup_dir - каталог в котором будут храниться резервные копии в виде .tar.gz

backup_full_dir - неархивированная копия source_dir, она понадобиться нам для получения дифференциальных копий

backup_diff_dir - собственно дифференциальная копия, разница между текущим состоянием source_dir и backup_full_dir

Имя копии состоит из признака FULL_ или DIFF, даты, времени создания и уникального GUID например:

FULL_20201004_030001_b858e5d9-9c55-4e69-aa64-876b6d1abd27

DIFF_20201005_030001_b858e5d9-9c55-4e69-aa64-876b6d1abd27

Для FULL_ каждый раз генерируется новый GUID, а для DIFF_ берется GUID соответствующей FULL_ копии. Таким образом, можно отследить цепочку FULL - DIFF.

Алгоритм работы full_rsync:

1. Скрипт удаляет каталоги по маске FULL_* найденные в backup_dir

2. Создает в backup_dir новый каталог по правилам именования -> backup_full_dir

3. Копирует с помощью RSYNC в backup_full_dir содержимое source_dir (с подкаталогами)

4. Создает FULL_~.tar.gz из содержимого backup_full_dir (каталог с полной копией при этом не удаляется)

Алгоритм работы diff_rsync:

1. Скрипт ищет в backup_dir каталоги по маске FULL_* если таковые имеются - выбирает последний в переменную backup_full_dir, если ни одного не найдено завершает работу.

2. Создает в backup_dir новый DIFF_ каталог поправилам именования -> backup_diff_dir

3. Копирует RSYNC в backup_diff_dir разницу между source_dir и backup_full_dir

4. Создает DIFF_~.tar.gz из содержимого backup_diff_dir (каталог с дифференциальной копии после этого удаляется)

Объединим работу обоих скриптов через планировщик. Создадим, например, задание №1 стартующее каждое воскресенье скрипт full_rsync. И задание №2 стартующее diff_rsync каждые ПН, ВТ, СР, ЧТ, ПТ, СБ. В результате получим создание полной копии в ВС и создание дифференциальных копий в остальные дни. Заметим, что каждая следующая дифференциальная копия представляет собой разницу между текущим состоянием source_dir и полной копией (а не с последней дифференциальной).

После отработки full_rsync в первое воскресенье у нас будет полная копия в виде каталога и она же в виде .tar.gz:

FULL_20201001_030001_b858e5d9-9c55-4e69-aa64-876b6d1abd27

FULL_20201004_030001_b858e5d9-9c55-4e69-aa64-876b6d1abd27.tar.gz

После отработки diff_rsync в ПН, ВТ, СР, ЧТ, ПТ, СБ создадутся дифференциальные копии на основе FULL_20201001_030001_b858e5d9-9c55-4e69-aa64-876b6d1abd27:

DIFF_20201005_030001_b858e5d9-9c55-4e69-aa64-876b6d1abd27.tar.gz

DIFF_20201006_030001_b858e5d9-9c55-4e69-aa64-876b6d1abd27.tar.gz

DIFF_20201007_030001_b858e5d9-9c55-4e69-aa64-876b6d1abd27.tar.gz

DIFF_20201008_030001_b858e5d9-9c55-4e69-aa64-876b6d1abd27.tar.gz

DIFF_20201009_030001_b858e5d9-9c55-4e69-aa64-876b6d1abd27.tar.gz

DIFF_20201010_030001_b858e5d9-9c55-4e69-aa64-876b6d1abd27.tar.gz

Запуск full_rsync в следующее ВС удалит каталог FULL_20201001_030001_b858e5d9-9c55-4e69-aa64-876b6d1abd27 и создаст новый FULL_ - начнется новая цепочка копий.

Эта самодельная СРК может стать достаточно гибким инструментом. Например, можно выделить единый сервер резервного копирования и подключаться с него RSYNC к удаленным машинам, создавая для каждой отдельный каталог. Можно написать несложный скрипт по удалению устаревших копий.

P.S. Не забудьте поменять переменные source_dir и backup_dir в разделе #INIT обоих скриптов )

Добавить комментарий.

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
CAPTCHA на основе изображений
Введите символы, которые показаны на картинке.