Резервне копіювання за допомогою 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
- встановить з'єднання із сервером my-server.com за допомогою SSH;
- запустить на сервері rdiff-backup у режимі --server;
- виконає передачу файлів з локальної системи серверу 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.