Знову про резервне копіювання

  • 2018-01-20
  • (автор: yurb)

Раніше я вже писав про резервне копіювання в Лінуксі з допомогою obnam. З того часу розробка цієї програми припинилася, і мені потрібно було знайти альтернативу. Я зупинився на borg-backup. Але спершу:

Ви могли подумати -- нащо все ускладнювати, я буду просто вручну копіювати файли на флешку. І це цілком прийнятне рішення.

Але якщо ваших файлів трохи більше, ніж 2-3? Копіювати кожного разу все? Чи тільки те, що ви змінили? А якщо ви випадково щось забудете? Чи випадково вилучите щось не те з резервних копій? А що робити з попередніми версіями файлів? Перейменовувати й зберігати? Чи перезаписувати? Якщо зберігати, то скільки минулих копій? І коли їх вилучати?

А якщо ви також хочете стискати дані перед копіюванням для економії місця, і шифрувати, щоб випадкові люди не мали до них доступу?

Програми для резервного копіювання дають вам можливість один раз налаштувати резервне копіювання, і потім лише натискати "одну кнопку" і ні про що не хвилюватися.

І найважливіше: при створенні нової копії даних, попередні версії даних не скасовуються, а зберігаються, і у вас є можливість повернутися до них при потребі. Часом буває так, що ми випадково щось вилучили, але помітили це тільки через пів року. Якби в нас була тільки копія останньої версії даних, ми не могли б цього відновити. Маючи доступ до давніших версій даних, ми можемо відшукати вилучені пів року тому дані в минулих копіях.

При тому, дані зберігаються таким чином, що якщо між двома версіями даних є тільки 5% відмінностей, для їхнього зберігання потрібно тільки на 5% більше місця, ніж для зберігання одної копії даних. Тобто для зберігання 30 версій даних не потрібно в 30 разів більше місця, а тільки на стільки більше, наскільки кожна з версій відрізняється від иншої.

Знайомтесь: borg-backup

borg-backup має ті ж принади, які мене привабили в obnam, а саме:

  • Простота користування. Коли мені потрібно створити нову резервну копію, я просто запускаю borg create й нічим не переймаюся. Немає ніяких "повних" і "відносних" (incremental) резервних копій. Кожна нова копія є повноцінним "зрізом" ваших даних на певний момент часу, і не залежить від попередніх;
  • При тому, всі дані дедупліковані, і зберігаються тільки раз. Тобто якщо якісь дані вже є в якомусь з минулих зрізів, вони "зараховуються" в поточний також, і не копіюються повторно, навіть якщо ви перейменували чи перемістили частину цих даних;
  • Резервні копії можна під'єднувати як віртуальну файлову систему (fuse) й переглядати/відновлювати з допомогою будь-якого файлового менеджера.

Використання borg трохи нагадує git -- на самому початку ви створюєте сховище (borg init), а далі просто створюєте нові "зрізи" даних (borg create).

Приємною відмінністю від obnam є швидкодія: створення нової резервної копії мого ~ 200-ґіґабайтного архіву файлів триває близько 5 хвилин (з obnam це тривало втричі довше). Проте це залежить від обраних налаштувань.

Створення сховища

Припустімо, ви плануєте зберігати резервні копії на зовнішньому вінчестері, який під'єднується в теці /run/media/user/BACKUP/. Щоб створити там сховище, потрібно запустити:

borg init --encryption=repokey /run/media/user/BACKUP/

У цьому випадку ми створили нове сховище, яке буде також шифрувати дані паролем, про який програма вас спитає. Якщо ви не хочете шифрувати сховище, наприклад, якщо ваш зовнішній вінчестер і так шифрований, можна замінити відповідний прапорець на --encryption=none. Вимкнути чи ввімкнути шифрування після створення сховища вже неможливо.

Створення копій

Для цього існує команда borg create, яка має такий синтаксис:

borg create [параметри] /шлях/до/сховища/::назва_зрізу ~/Ваші_файли ~/ще_файли

Кожен зріз має назву. Це дає можливість, наприклад, відрізняти зрізи, зроблені з різних комп'ютерів, чи використовувати різну частоту копіювання для різних файлів. У назві можна використовувати шаблони, як то {now} (замінює на поточну дату й час) чи {host} (назву комп'ютера). На практиці це виглядає так:

borg create --progress --stats -v /run/media/user/BACKUP/::{now} ~/Документи

Параметри --progress --stats -v спонукать borg видавати більше інформації про хід і результат створення копії. Список всіх копій можна переглянути з допомогою команди borg list:

[user@localhost ~] borg list /run/media/user/BACKUP/
2018-01-06T19:13:39         Sat, 2018-01-06 19:13:40 [c514c0fd15ba1b1d5d685395c75d3a3a761b86de7b6edefd8f4316981a64ded8]
2018-01-14T12:33:58         Sun, 2018-01-14 12:33:59 [32eb553a34b70717d289ec19901a8b50fda8b078292eb07bebc8b728dda77cd6]

borg не має глобального файлу налаштування, тому ви можете зберегти вашу команду з параметрами і шляхами, наприклад, у файл ~/.bashrc:

alias backup="borg create --progress --stats -v \
         /run/media/user/BACKUP::{now} \
         ~/Документи \
         ~/Світлини"

Після чого ви зможете запускати створення нової резервної копії командою backup. "З коробки" borg використовує досить слабке стиснення даних, яке дає високу швидкодію. Якщо вам потрібно аргесивніше стискати дані коштом довшого часу створення копій, можна вибрати потужніший алгоритм і вищу якість стиснення, наприклад lzma: --compression=lzma.

Вилучення старих копій

Дуже важливо мати не тільки копію останнього зрізу ваших даних, але й можливість повернутися в часі назад й відновити якийсь із давніших зрізів. Проте зберігати абсолютно всі старі копії даних також не завжди потрібно. Тому borg дає можливість автоматично вилучати окремі старі копії зі сховища, залишаючи инші. Наприклад, ви можете сказати: я хочу зберігати одну копію для кожного місяця протягом останнього року, і одну копію для кожного тижня протягом останнього місяця, а всі инші вилучити зі сховища. Це виглядало б таким чином:

borg prune --list --keep-monthly 12 --keep-weekly 5 /run/media/user/BACKUP

В цьому випадку команда вилучить всі копії, окрім 12-ти останніх щомісячних і 5-ти останніх щотижневих. Перед запуском prune додавайте прапорець --dry-run, щоб пересвідчитися, що команда не вилучить нічого окрім того, що ви задумали.

Відновлення файлів

Найпростіше відновлювати файли з резервних копій з допомогою команди:

borg mount /run/media/user/BACKUP ~/відновлення

Вона "підключить" віртуальну файлову систему з всіма резервними копіями (не тільки останньою) в каталог, який ви скажете (він має бути порожнім, і якщо його не існує, його треба створити). Тоді ви можете витягувати звідти дані будь-яким файловим менеджером, легко перестрибуючи туди-сюди в часі між копіями різної давности. Після відновлення, віртуальну файлову систему треба відключити:

borg umount ~/відновлення

Инші функції

borg підтримує створення сховищ на віддалених серверах через ssh. Створення резервних копій із віддалених серверів можна робити з допомогою sshfs та подібних знарядь. Крім того, у вас є можливість зберігати в одному сховищі різні резервні копії - приміром, копіювати ваші документи щотижня, а світлини тільки раз на пів року. Детальний опис можливостей borg можна знайти в довідці.