Работа с архивами rdiff-backup






В предыдущей статье мы рассмотрели основные моменты использования утилиты rdiff-backup для резервного копирования данных. Сегодня предлагаю познакомиться с возможностями, который утилита предлагает для восстановления данных из резервных копий, а также получения информации о них.



Поиск файлов

Прежде, чем вы приступите к восстановлению данных, вы, как правило, знаете имена нужных файлов или хотя бы их части. rdiff-backup в своих архивах хранит файлы, не изменяя их имён, поэтому для того, чтобы определить наличие/отсутствие файла в архиве, вы можете использовать традиционные UNIX-утилиты, например find. Например:

Обзор инкрементов

Поскольку rdiff-backup выполняет инкрементное копирование, при регулярном архивировании часто изменявшиеся в прошлом файлы будут иметь несколько версий. Чтобы получить информацию об имеющихся в архиве инкрементах файлов/каталогов, воспользуйтесь ключом --list-increments:

Как видим на примере, каталог /media/backups/var/log имеет две предыдущие версии версии (2 increments) и одну текущую (current mirror).

Форматы времени

Прежде, чем рассматривать дальнейшие функции rdiff-backup, необходимо понимать, как утилита понимает штампы времени. Здесь всё достаточно просто. Определять время в rdiff-backup можно следующими способами:

  • при помощи слова «now», которое является синонимом текущего времени;
  • используя целое число, определяющее время в формате UNIX time;
  • при помощи строки в формате, предложенном в W3 Date and Time Formats, например «2012-01-25T07:00:00+02:00»;
  • используя временные интервалы и суффиксы  s, m, h, D, W, M и Y, соответствующие секундам, минутам, часам, дням, неделям, месяцам и годам. В этом случае значение времени вычисляется путём вычитания указанного интервала из текущего времени. Также, вы можете комбинировать интервалы, например: «1h25m» или «5W3D». Только не забывайте, что при использовании этого формата rdiff-backup «думает», что в любом месяце ровно 30 дней, а в любом году ровно 365 дней;
  • при помощи даты в формате YYYY/MM/DD, YYYY-MM-DD, MM/DD/YYYY, или MM-DD-YYYY определяющей  полночь указанной даты относительно текущего часового пояса;
  • используя целое число с суффиксом «B», которое определяет количество «сессий назад» rdiff-backup. Например, «0B» означает время создания последнего архива, а «5B» означает 5й по счёту архив относительно последнего.

Получение списка изменявшихся файлов

Часто бывает необходимо получить список файлов, которые модифицировались за определённый промежуток времени. Например, следующая команда выведет список файлов, которые менялись за последние два дня:

Получение списка файлов на определённый момент времени

Следующая команда выводит список всех файлов в архиве, которые в нём содержались 3 версии назад, включая также файлы, которые были удалены в последующих версиях:

Сравнение архива и текущего состояния файлов

Следующая команда выведет все файлы, которые были изменены в каталоге /etc с момента его последней архивации в каталог /media/backups/etc:

То же самое, но с указанием версии архива:

Получение статистической информации об архиве

После завершения сессий архивации rdiff-backup создаёт в каталоге архива специальный файл rdiff-backup-data/session_statistics*, содержащий разнообразную статистическую информацию о результатах сессии. Утилита предлагает специальную опцию --calculate-average, при помощи которой вы можете получить общее представление об архиве, например:

Восстановление данных их архива

Поскольку rdiff-backup хранит файлы «как есть», то в случае нечаянного удаления нужного каталога/файла вы можете просто скопировать его обратно из архива обычной командой cp:

В более сложных ситуациях вам уже понадобится утилита rdiff-backup. Следующая команда выполняет восстановление данных из из последней версии архива, расположенного на удалённой системе:

Или то же самое, с короткой версией опции:

Естественно, если вам нужна версия архива постарше, вам необходимо это указать:

или

Если же вам нужно восстановить отдельный файл, то укажите нужную версию из каталога increments:

Удаление старых версий

При всей своей экономичности, утилита rdiff-backup не может бесконечно долго хранить инкрементные версии архивов хотя бы потому, что место на диске не бесконечно. Да и, как правило, иногда нет особого смысла хранить все изменения за последние 20 лет. На этот случай у rdiff-backup имеется специальная опция --remove-older-than, которая указывает программе вычищать устаревшие данные, которые старше определённого времени. Например, мне вполне достаточно хранить изменения за последний месяц:

Кому-то может показаться удобным хранить данные лишь последних N сессий: