Рішення для резервного копіювання - 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 зі сховища.
- Перейдіть на сторінку https://github.com/rsnapshot/rsnapshot
- Натисніть зелену кнопку «Code» праворуч
- Клацніть правою кнопкою миші на «Download ZIP» і скопіюйте розташування посилання
- Використовуйте
wget
абоcurl
, щоб завантажити скопійоване посилання. Приклад:wget https://github.com/rsnapshot/rsnapshot/archive/refs/heads/master.zip
- Розархівуйте файл
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-накопичувач, який використовується для резервного копіювання вашої системи. Цей конкретний крок необхідний, лише якщо ви створюєте резервну копію однієї машини або сервера, як показано в нашому першому прикладі.
- Підключіть USB-накопичувач.
- Введіть
dmesg | grep sd
, яка покаже диск, який ви бажаєте використовувати. У цьому випадку це sda1.
Приклад:EXT4-fs (sda1): монтування файлової системи ext2 за допомогою підсистеми ext4
. - На жаль (або на щастя, залежно від вашої думки), більшість сучасних настільних операційних систем Linux автоматично монтують диск, якщо можуть. Це означає, що залежно від різних факторів rsnapshot може втратити відстеження диска. Ви хочете, щоб диск «монтувався» або робив його файли доступними в тому самому місці кожного разу.
Щоб зробити це, візьміть інформацію про диск, виявлену в командіdmesg
, і введітьmount | grep sda1
, який покаже це:/dev/sda1 на /media/username/8ea89e5e-9291-45c1-961d-99c346a2628a
- Введіть
sudo umount /dev/sda1
, щоб відключити зовнішній диск. - Далі створіть точку підключення для резервної копії:
sudo mkdir /mnt/backup
- Підключіть диск до папки резервної копії:
sudo mount /dev/sda1 /mnt/backup
- Введіть
mount | grep sda1
знову, і ви побачите це:/dev/sda1 на /mnt/backup type ext2 (rw,relatime)
- Далі створіть каталог, який повинен існувати для продовження резервного копіювання на підключеному диску. У цьому прикладі ви використовуєте папку під назвою «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