Резервне копіювання за допомогою rdiff-backup

Методів резервного копіювання файлів безліч, як, втім. та інструментів для його здійснення. Сьогоднішньою заміткою я хочу звернути вашу увагу на досить популярну утиліту інкрементного копіювання під назвою rdiff-backup.

rdiff-backup — додаток написаний на Python, має велику гнучкість і досить простий у користуванні. Може працювати як локально, і поверх rsync/ssh, надаючи можливість оптимально використовувати канали передачі у разі віддалених бекапів. Серед основних плюшок rdiff-backup можна виділити такі можливості.

У сучасних Linux-дистрибутивах rdiff-backup є у репозиторіях, так що з її встановленням у вас не повинно виникнути проблем. Якщо ж ви використовуєте щось інше, відвідайте головну сторінку проекту, з якої можна завантажити вихідні коди.

Під "локальним" або "віддаленим" тут і далі розуміється одержувач резервної копії. Спершу давайте розглянемо найпростіший спосіб запуску утиліти:

У режимі за замовчуванням rdiff-backup досить мовчазна і не набридає діагностичними повідомленнями доти, доки не зіткнеться з помилкою. Регулювати балакучість утиліти можна за допомогою короткої опції '-v' або її довгого аналога '-verbosity'. Значення опції може набувати значення від 0 до 9 (за умовчанням воно дорівнює 3). Наприклад, рівень 4 перед початком процедури копіювання виведе вам зведення опцій роботи утиліти:

$ rdiff-backup -v 4 /var/log

За допомогою rdiff-backup version 1.2.8

Неможливо до імпорту win32security module. Windows ACLs

не supported by filesystem at /var/log

escape_dos_devices не потребує файлу системи на /var/log

Визначення можливостей для source (read only) file system:

Access control lists On

Розширені атрибути Увімк

Списки керування доступом Windows Вимкнено

Чутливість до регістру ввімкнено

Вимкнути пристрої DOS

Вимкнути кінцеві пробіли

Розгалуження ресурсів у стилі Mac OS X вимкнено

Інформація про Mac OS X Finder вимкнено

Не вдалося імпортувати модуль безпеки win32. Windows ACL

не підтримується файловою системою в log.backup/rdiff-backup-data/rdiff-backup.tmp.0

escape_dos_devices не вимагається файловою системою в log.backup/rdiff-backup-data/rdiff-backup.tmp.0

Виявлені можливості для цільової файлової системи (читання/запису):

Зміна права власності Увімкнено

Жорстке підключення увімкнено

каталоги fsync() увімкнено

Дозволи Directory inc увімкнено

Високорозрядні дозволи ввімкнено

Дозволи символічного посилання вимкнено

Розширені імена файлів увімк

Зарезервовані Windows імена файлів вимкнено

Списки контролю доступу Увімк

Розширені атрибути Увімк

Списки керування доступом Windows Вимкнено

Чутливість до регістру ввімкнено

Вимкнути пристрої DOS

Вимкнути кінцеві пробіли

Розгалуження ресурсів у стилі Mac OS X вимкнено

Інформація про Mac OS X Finder вимкнено

Резервне копіювання: must_escape_dos_devices = 0

Запуск дзеркала /var/log для log.backup

В цей час як дев'ятий рівень буде повідомлятися про кожен крок:

$ rdiff-backup -v 9 /var/log

Вт, 6 березня, 04:50:07 2012 Обробка зміненого файлу wtmp.1

Вт, 6 березня, 04:50:07 2012 р. Запис об’єкта файлу в log.backup/rdiff-backup.tmp.121

Вт, 6 березня, 04:50:07 2012 Копіювання атрибутів з ('wtmp.1',) до log.backup/rdiff-backup.tmp.121

Tue Mar 6 04:50:07 2012 Встановлення часу log.backup/rdiff-backup.tmp.121 до 1330553626

Tue Mar 6 04:50:07 2012 Перейменування log.backup/rdiff-backup.tmp.121 на log.backup/wtmp.1

Вт, 6 березня, 04:50:07 2012 Копіювання атрибутів із ()до log.backup

Tue Mar 6 04:50:07 2012 Налаштування часу з log.backup to 1330980760

Tue Mar 6 04:50:08 2012 Cleaning up

Цей тип копіювання виконати так само просто, як і локальне. Все, що змінюється – це формат вказівки джерела/отримувача. Також на віддаленій системі має бути встановлена ​​rdiff-backup і працюватиме SSH-сервер. Наприклад, наступна команда:

$ rdiff-backup -v 5 /var/log [email protected]::/var/backups/log.host123

  1. встановить з'єднання із сервером my-server.com за допомогою SSH;
  2. запустить на сервері rdiff-backup у режимі --server;
  3. виконає передачу файлів з локальної системи серверу my-server.com у каталог /var/backups/log.host123

$ rdiff-backup -v 5 [email protected]::/var/log /var/backups/logs-my-server.com

Отримання інформації про результати копіювання

Зазвичай багатослівне виведення команд потрібно в період налагодження та написання сценаріїв, не більше. Для щоденного моніторингу результатів роботи утиліти бажано мати лише коротке зведення. Для цього rdiff-backup пропонує окрему опцію '--print-statistics':

$ rdiff-backup --print-statistics /var/log

Warning: Access Control List file not found

StartTime 1331003360.00 (Tue Mar 6 05:09:20 2012)

EndTime 1331003385.71 (Tue Mar 6 05:09:45 2012)

ElapsedTime 25.71 (25.71 seconds)

SourceFileSize 7006201 (6.68 MB)

MirrorFileSize 16991862 (16.2 MB)

NewFileSize 1504824 (1.44 MB)

DeletedFileSize 12116918 (11.6 MB)

ChangedSourceSize 5501377 (5.25 MB)

ChangedMirrorSize 4874944 (4.65 MB)

IncrementFileSize 2136990 (2.04 MB)

TotalDestinationSizeChange -7848671 (-7.49 MB)

Увімкнення виключення файлів

"Не всійогурти однаково корисні» - говорить народне прислів'я. Це стосується і файлів при резервному копіюванні. Часто в копіюваних каталогах трапляються файли, розмір яких дуже великий, а сенсу включати їх в бекап немає. Тут у rdiff-backup (як, втім і у решти утиліт подібного роду) передбачені свої можливості. Використовуючи опцію '--exlude', ви можете виключати окремі файли та каталоги:

$rdiff-backup --exclude /proc/[email protected]::/var/backups

Цю опцію можна використовувати скільки завгодно разів:

$ rdiff-backup --exclude /proc --exclude /mnt --exclude /tmp/[email protected]::/var/backups

Іноді простіше вказати те, що потрібно скопіювати замість того, що НЕ потрібно. Наступна команда скопіює, наприклад, /usr/local/bin, пропустивши при цьому /usr/bin:

$ rdiff-backup --include /usr/local --exclude /usr/[email protected]::/var/backups

Зверніть увагу, що при множинному використанні опцій '--include'/'--exclude' їх пріоритет залежить від порядку появи в команді.

rdiff-backup дозволяє використовувати шаблони подібні до тих, які використовуються в rsync: ' ** ' еквівалентні будь-якому шляху, а ' * ' - будь-якому шляху без завершального сліша. Так, наприклад, наступна команда скопіює /usr/local та /var, але пропустить все інше:

$ rdiff-backup --include /usr/local --include /var --exclude '**' // /backup

Зверніть увагу на лапки. Вони потрібні, оскільки більшість оболонок обробляють зірочки як спецсимволи, перетворюючи їх на маски.

Приклад трохи складніше:

$ rdiff-backup --include '**txt' --exclude /usr/local/games --include /usr/local --exclude /usr --exclude /backup --exclude /proc / /backup

Ця команда скопіює всі файли, імена якихзакінчуються суфіксом 'txt'. Зверніть увагу: будуть скопійовані всі txt-файли також з каталогів, /usr/local і /backup, оскільки перший --include має більш високий пріоритет.

Взагалі, утиліта rdif-backup пропонує досить багатий набір опція для фільтрації файлів, перераховувати який у повному обсязі немає сенсу, оскільки все «вже вкрадено до нас» в man-сторінці програми. Тим, хто ще туди не заглядав, скажу, що ви можете фільтрувати файли на основі регулярних виразів, типі самих файлів (символічно/жорсткі посилання, сокети, пристрої, FIFO тощо), а також на основі файлових списків включень/виключень, причому самі файлові списки можна передавати через stdin.