Перейти до змісту

Рішення для резервного копіювання - rsnapshot

Передумови

  • Знати, як інсталювати додаткові репозиторії та снепшоти з командного рядка
  • Дізнатися про монтування файлових систем, зовнішніх по відношенню до вашої машини (зовнішній диск, віддалена файлова система тощо).
  • Знати, як користуватися редактором (використовуючи vi тут, але ви можете використовувати свій улюблений редактор)
  • Трохи знати сценарії BASH
  • Знати, як змінити crontab для користувача root
  • Знання відкритих і закритих ключів SSH (тільки якщо ви плануєте запускати віддалене резервне копіювання з іншого сервера)

Вступ

rsnapshot — це потужна утиліта резервного копіювання з можливістю встановлення на будь-якій машині на базі Linux. Він може створити резервну копію машини локально, або ви можете створити резервну копію кількох машин, скажімо, серверів, з однієї машини.

rsnapshot використовує rsync і повністю написаний на Perl без бібліотечних залежностей. Жодних незвичайних вимог до встановлення не існує. У випадку Rocky Linux ви можете встановити rnapshot за допомогою репозиторію EPEL. Після першого випуску Rocky Linux 9.0 був час, коли EPEL не містив пакета rsnapshot. Це вже не так, але ці інструкції містять метод встановлення з джерела на випадок, якщо це повториться.

Ця документація стосується лише встановлення rsnapshot у Rocky Linux.

Встановлення rsnapshot

Усі наведені тут команди викликаються з командного рядка на вашому сервері чи робочій станції, якщо не зазначено інше.

Встановлення репозиторію EPEL

Для встановлення rsnapshot нам потрібен репозиторій програмного забезпечення EPEL із Fedora. Щоб встановити репозиторій, просто скористайтеся цією командою:

sudo dnf install epel-release

Тепер репозиторій має бути активним.

Встановіть пакет rsnapshot

Далі встановіть rsnapshot і деякі інші необхідні інструменти, які, ймовірно, вже встановлені:

sudo dnf install rsnapshot openssh-server rsync

Якщо є будь-які відсутні залежності, вони з’являться, і вам просто потрібно буде відповісти на запит, щоб продовжити. Наприклад:

dnf install rsnapshot
Last metadata expiration check: 0:00:16 ago on Mon Feb 22 00:12:45 2021.
Dependencies resolved.
========================================================================================================================================
Package                           Architecture                 Version                              Repository                    Size
========================================================================================================================================
Installing:
rsnapshot                         noarch                       1.4.3-1.el8                          epel                         121 k
Installing dependencies:
perl-Lchown                       x86_64                       1.01-14.el8                          epel                          18 k
rsync                             x86_64                       3.1.3-9.el8                          baseos                       404 k

Transaction Summary
========================================================================================================================================
Install  3 Packages

Total download size: 543 k
Installed size: 1.2 M
Is this ok [y/N]: y

Встановлення rsnapshot з вихідного коду

Встановити rsnapshot з вихідного коду не складно. Однак у нього є недолік: у разі випуску нової версії для оновлення версії знадобиться нова інсталяція з вихідного коду, тоді як метод встановлення EPEL забезпечить вам оновлення за допомогою простого dnf оновлення.

Встановлення засобів розробки та завантаження вихідного коду

Як зазначено, першим кроком є встановлення групи «Інструменти розробки»:

dnf groupinstall 'Development Tools'

Вам також знадобляться кілька інших пакетів:

dnf install wget unzip rsync openssh-server

Далі вам потрібно буде завантажити вихідні файли зі сховища GitHub. Ви можете зробити це кількома способами, але найпростішим у цьому випадку є просто завантажити файл ZIP зі сховища.

  1. Перейдіть на сторінку https://github.com/rsnapshot/rsnapshot
  2. Натисніть зелену кнопку «Code» праворучКод
  3. Клацніть правою кнопкою миші на «Download ZIP» і скопіюйте розташування посиланняZip
  4. Використовуйте wget або curl, щоб завантажити скопійоване посилання. Приклад:
    wget https://github.com/rsnapshot/rsnapshot/archive/refs/heads/master.zip
    
  5. Розархівуйте файл master.zip
    unzip master.zip
    

Побудова Джерела

Тепер, коли у вас є все на нашій машині, наступним кроком є збірка. Коли ви розпакували файл master.zip, ви отримали каталог rsnapshot-master. Вам потрібно буде змінити це для нашої процедури побудови. Зауважте, що наша збірка використовує всі параметри пакета за замовчуванням, тому, якщо ви хочете щось інше, вам потрібно провести невелике дослідження. Крім того, ці дії виконуються безпосередньо зі сторінки Встановлення GitHub:

cd rsnapshot-master

Запустіть сценарій authogen.sh, щоб створити сценарій налаштування:

./autogen.sh

Підказка

Ви можете отримати кілька рядків, які виглядатимуть так:

fatal: not a git repository (or any of the parent directories): .git

Це не смертельно.

Далі вам потрібно запустити configure із набором каталогу конфігурації:

./configure --sysconfdir=/etc

Нарешті, запустіть make install:

sudo make install

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

sudo cp /etc/rsnapshot.conf.default /etc/rsnapshot.conf

Це стосується копіювання файлу конфігурації. У розділі нижче про «Налаштування rsnapshot» описано зміни, необхідні в цьому файлі конфігурації.

Монтування диска або файлової системи для резервного копіювання

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

  1. Підключіть USB-накопичувач.
  2. Введіть dmesg | grep sd, яка покаже диск, який ви бажаєте використовувати. У цьому випадку це sda1.
    Приклад: EXT4-fs (sda1): монтування файлової системи ext2 за допомогою підсистеми ext4.
  3. На жаль (або на щастя, залежно від вашої думки), більшість сучасних настільних операційних систем Linux автоматично монтують диск, якщо можуть. Це означає, що залежно від різних факторів rsnapshot може втратити відстеження диска. Ви хочете, щоб диск «монтувався» або робив його файли доступними в тому самому місці кожного разу.
    Щоб зробити це, візьміть інформацію про диск, виявлену в команді dmesg, і введіть mount | grep sda1, який покаже це: /dev/sda1 на /media/username/8ea89e5e-9291-45c1-961d-99c346a2628a
  4. Введіть sudo umount /dev/sda1, щоб відключити зовнішній диск.
  5. Далі створіть точку підключення для резервної копії: sudo mkdir /mnt/backup
  6. Підключіть диск до папки резервної копії: sudo mount /dev/sda1 /mnt/backup
  7. Введіть mount | grep sda1 знову, і ви побачите це: /dev/sda1 на /mnt/backup type ext2 (rw,relatime)
  8. Далі створіть каталог, який повинен існувати для продовження резервного копіювання на підключеному диску. У цьому прикладі ви використовуєте папку під назвою «storage»: sudo mkdir /mnt/backup/storage

Зауважте, що для однієї машини вам доведеться або повторювати кроки umount і mount кожного разу, коли приєднується диск, або кожного разу, коли система перезавантажується, або автоматизувати ці команди зі сценарієм.

Ми рекомендуємо автоматизацію. Автоматизація - це спосіб системного адміністратора.

Налаштування rsnapshot

Це найважливіший крок. При внесенні змін у файл конфігурації можна зробити помилку. Для конфігурації rsnapshot потрібні вкладки для будь-якого розділення елементів, і попередження про це є у верхній частині файлу конфігурації.

Пробіл спричинить збій усієї конфігурації та вашої резервної копії. Наприклад, у верхній частині файлу конфігурації є розділ для # SNAPSHOT ROOT DIRECTORY #. Якби ви додавали це з нуля, ви б ввели snapshot_root, потім TAB, а потім введіть /whatever_the_path_to_the_snapshot_root_will_be/

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

cp /etc/rsnapshot.conf /etc/rsnapshot.conf.bak

Резервне копіювання базової машини або одного сервера

У цьому випадку rsnapshot запускатиметься локально для резервного копіювання певної машини. У цьому прикладі ми розберемо конфігураційний файл і покажемо вам, що саме вам потрібно змінити.

Щоб відкрити файл /etc/rsnapshot.conf, вам знадобиться використати vi (або відредагувати його у вашому улюбленому редакторі).

Перше, що потрібно змінити, це налаштування snapshot_root. За замовчуванням має таке значення:

snapshot_root /.snapshots/

Вам потрібно змінити це на свою точку монтування, яку ми створили вище, а також додати «сховище».

snapshot_root /mnt/backup/storage/

Ви також хочете вказати, щоб резервне копіювання не запускалося, якщо диск не підключено. Для цього видаліть знак «#» (також називається зауваженням, знаком числа, символом решітки тощо) поруч із no_create_root, який виглядає так:

no_create_root 1

Далі перейдіть до розділу під назвою # EXTERNAL PROGRAM DEPENDENCIES # і видаліть коментар (знову знак «#») із цього рядка:

#cmd_cp /usr/bin/cp

Тепер він читає:

cmd_cp /usr/bin/cp

Хоча вам не потрібен cmd_ssh для цієї конкретної конфігурації, він знадобиться для нашої іншої опції, і не завадить його ввімкнути. Знайдіть рядок, який говорить:

#cmd_ssh /usr/bin/ssh

Видаліть знак "#":

cmd_ssh /usr/bin/ssh

Далі потрібно перейти до розділу під назвою # РІВНІ РЕЗЕРВНОГО КОПІЮВАННЯ / ІНТЕРВАЛИ #

Попередні версії rsnapshot мали години, щодня, щомісяця, щороку, але тепер альфа, бета, гамма, дельта. Це трохи заплутано. Що вам потрібно зробити, це додати зауваження до будь-якого інтервалу, який ви не використовуватимете. У конфігурації дельта вже виділена.

У цьому прикладі ви не збираєтеся запускати жодних інших інкрементів, окрім нічного резервного копіювання. Просто додайте примітку до альфа- і гамма. Після завершення файл конфігурації матиме наступний вигляд:

#retain  alpha   6
retain  beta    7
#retain  gamma   4
#retain delta   3

Перейдіть до рядка logfile, який за умовчанням:

#logfile /var/log/rsnapshot

І видаліть примітку:

logfile /var/log/rsnapshot

Нарешті, перейдіть до розділу ### ТОЧКИ РЕЗЕРВНОГО КОПІЮВАННЯ / СЦЕНАРІЇ ### та додайте будь-які каталоги, які ви хочете додати, у розділ # LOCALHOST, не забудьте використовувати + +табуляція++, а не ++пробіл++ між елементами!

Наразі запишіть свої зміни (SHIFT :wq! для vi) і вийдіть із файлу конфігурації.

Перевірка конфігурації

Ви хочете переконатися, що ви не додали пробіли чи будь-які інші явні помилки до нашого файлу конфігурації під час його редагування. Для цього ви запускаєте rsnapshot для нашої конфігурації за допомогою параметра configtest:

rsnapshot configtest покаже Syntax OK, якщо немає помилок.

Ви маєте виробити звичку запускати configtest для конкретної конфігурації. Причина цього стане більш очевидною, коли ви перейдете до розділу Резервне копіювання кількох машин або кількох серверів.

Щоб запустити configtest для певного файлу конфігурації, запустіть його з параметром -c, щоб визначити конфігурацію:

rsnapshot -c /etc/rsnapshot.conf configtest

Перший запуск резервного копіювання

Коли configtest перевіряє, що все гаразд, настав час виконати резервне копіювання вперше. Ви можете спочатку запустити це в тестовому режимі, щоб побачити, що робитиме сценарій резервного копіювання.

Знову ж таки, щоб зробити це, вам не обов’язково вказувати конфігурацію в цьому випадку, але було б гарною ідеєю увійти в звичку робити це:

rsnapshot -c /etc/rsnapshot.conf -t beta

Котрий поверне щось подібне до цього, показуючи вам, що станеться, коли резервне копіювання фактично запуститься:

echo 1441 > /var/run/rsnapshot.pid
mkdir -m 0755 -p /mnt/backup/storage/beta.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
    /home/ /mnt/backup/storage/beta.0/localhost/
mkdir -m 0755 -p /mnt/backup/storage/beta.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc/ \
    /mnt/backup/storage/beta.0/localhost/
mkdir -m 0755 -p /mnt/backup/storage/beta.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
    /usr/local/ /mnt/backup/storage/beta.0/localhost/
touch /mnt/backup/storage/beta.0/

Коли тест виправдає ваші очікування, запустіть його вручну вперше без тесту:

rsnapshot -c /etc/rsnapshot.conf beta

Коли резервне копіювання завершиться, перейдіть до /mnt/backup і перевірте створену там структуру каталогів. Буде каталог storage/beta.0/localhost, а потім каталоги, які ви вказали для резервного копіювання.

Подальше пояснення

Кожного разу, коли виконується резервне копіювання, воно створюватиме ще один приріст бета-версії, резервні копії тривалістю 0–6 або 7 днів. Найновіша резервна копія завжди буде beta.0, тоді як вчорашня резервна копія завжди буде beta.1.

Здається, що розмір кожної з цих резервних копій займає однаковий (або більший) дисковий простір, але це через те, що rsnapshot використовує жорсткі посилання. Щоб відновити файли з учорашньої резервної копії, просто скопіюйте їх назад зі структури каталогів beta.1.

Кожне резервне копіювання є лише додатковим резервним копіюванням із попереднього запуску, АЛЕ через використання жорстких посилань кожен каталог резервного копіювання містить або файл, або жорстке посилання на файл, незалежно від того, у якому каталозі було створено резервну копію.

Щоб відновити файли, вам не потрібно вирішувати каталог або приріст, з якого їх відновлювати, а лише позначку часу резервної копії, яку ви відновлюєте. Це чудова система, яка займає набагато менше дискового простору, ніж багато інших рішень для резервного копіювання.

Налаштування автоматичного запуску резервного копіювання

Після завершення тестування й упевненості в тому, що все працюватиме без проблем, наступним кроком є налаштування crontab для користувача root для щоденної автоматизації процесу:

sudo crontab -e

Якщо ви не запускали це раніше, виберіть vim.basic як редактор або власне налаштування редактора, коли з’явиться рядок Виберіть редактор.

Ви збираєтеся налаштувати резервне копіювання на автоматичний запуск о 23:00, тому додайте це до crontab:

## Running the backup at 11 PM
00 23 *  *  *  /usr/bin/rsnapshot -c /etc/rsnapshot.conf beta`

Резервне копіювання кількох машин або кількох серверів

Створення резервних копій кількох машин із машини з RAID-масивом або великою ємністю пам’яті, локально або через підключення до Інтернету в іншому місці працює добре.

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

Припущення

Віддалений локальний запуск rsnapshot з машини. Запуск цієї точної конфігурації також можливий дистанційно поза приміщенням.

У цьому випадку ви захочете інсталювати rsnapshot на машині, яка виконує всі резервні копії. Інші припущення:

  • Що сервери, на які ви будете створювати резервні копії, мають правило брандмауера, яке дозволяє віддаленій машині підключитися до нього через SSH
  • Що на кожному сервері, резервну копію якого ви збираєтеся, було встановлено останню версію rsync. Для серверів Rocky Linux запустіть dnf install rsync, щоб оновити версію rsync вашої системи.
  • Що ви підключилися до комп’ютера як користувач root або ви запустили sudo -s, щоб переключитися на користувача root

Відкриті або закриті ключі SSH

Для сервера, який виконуватиме резервне копіювання, вам потрібно створити пару ключів SSH для використання під час резервного копіювання. Для нашого прикладу ви будете створювати ключі RSA.

Якщо у вас уже є згенерований набір ключів, ви можете пропустити цей крок. Ви можете дізнатися, виконавши ls -al .ssh і знайшовши пару ключів id_rsa та id_rsa.pub. Якщо такого немає, скористайтеся наведеним нижче посиланням, щоб налаштувати ключі для вашої машини та серверів, до яких ви хочете отримати доступ:

Пари відкритих закритих ключів SSH

Конфігурація rsnapshot

Файл конфігурації має бути майже таким самим, як той, який ми створили для базової машини або резервного копіювання одного сервера, за винятком того, що вам потрібно змінити деякі параметри.

Корінь snapshot є типовим:

snapshot_root /.snapshots/

Прокоментуйте цей рядок:

no_create_root 1

#no_create_root 1

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

Наразі ви хочете просто змінити файл конфігурації (як показано вище) і зберегти його. Скопіюйте цей файл як шаблон для нашого першого сервера:

cp /etc/rsnapshot.conf /etc/rsnapshot_web.conf

Ви хочете змінити файл конфігурації та створити журнал і файл блокування з іменем машини:

logfile /var/log/rsnapshot_web.log

lockfile /var/run/rsnapshot_web.pid

Далі потрібно змінити файл rsnapshot_web.conf таким чином, щоб він включав каталоги, резервні копії яких потрібно створити. Єдине, що тут інше – це мета.

Ось приклад конфігурації web.ourdomain.com:

### BACKUP POINTS / SCRIPTS ###
backup  root@web.ourourdomain.com:/etc/     web.ourourdomain.com/
backup  root@web.ourourdomain.com:/var/www/     web.ourourdomain.com/
backup  root@web.ourdomain.com:/usr/local/     web.ourdomain.com/
backup  root@web.ourdomain.com:/home/     web.ourdomain.com/
backup  root@web.ourdomain.com:/root/     web.ourdomain.com/

Перевірка конфігурації та запуск початкової резервної копії

Тепер ви можете перевірити конфігурацію, щоб переконатися, що вона синтаксично правильна:

rsnapshot -c /etc/rsnapshot_web.conf configtest

Ви шукаєте повідомлення Syntax OK. Якщо все в порядку, ви можете запустити резервне копіювання вручну:

/usr/bin/rsnapshot -c /etc/rsnapshot_web.conf beta

Якщо припустити, що все працює, ви можете створити файли конфігурації для поштового сервера (rsnapshot_mail.conf) і сервера порталу (rsnapshot_portal.conf), перевірити їх і зробити пробну резервну копію.

Автоматизація резервного копіювання

Автоматизація резервного копіювання для кількох версій машин або серверів дещо відрізняється. Ви хочете створити сценарій bash для виклику резервних копій по порядку. Коли один закінчить, почнеться наступний. Цей сценарій виглядатиме так:

vi /usr/local/sbin/backup_all

Зі змістом:

#!/bin/bash/
# script to run rsnapshot backups in succession
/usr/bin/rsnapshot -c /etc/rsnapshot_web.conf beta
/usr/bin/rsnapshot -c /etc/rsnapshot_mail.conf beta
/usr/bin/rsnapshot -c /etc/rsnapshot_portal.conf beta

Збережіть сценарій у /usr/local/sbin і зробіть його виконуваним:

chmod +x /usr/local/sbin/backup_all

Створіть crontab для root для запуску сценарію резервного копіювання:

crontab -e

І додайте цей рядок:

## Running the backup at 11 PM
00 23 *  *  *  /usr/local/sbin/backup_all

Повідомлення про статус резервного копіювання

Щоб переконатися, що все резервне копіювання виконується згідно з планом, ви можете надіслати файли журналу резервного копіювання на свою електронну пошту. Якщо ви виконуєте резервне копіювання кількох машин за допомогою rsnapshot, кожен файл журналу матиме власну назву, яку ви можете надіслати на свою електронну пошту для перегляду Використання процедури postfix For Server Process Reporting.

Відновлення резервної копії

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

Висновки та інші ресурси

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

rsnapshot є потужним, швидким і економним використанням дискового простору. Ви можете дізнатися більше про rsnapshot, відвідавши rsnapshot.org.

Author: Steven Spencer

Contributors: Ezequiel Bruni, Ganna Zhyrnova