About Backup | GNU/Linux
RTO (Recovery Time Objective) — допустимое время восстановления после сбоя.
RPO (Recovery Point Objective) — допустимый уровень потери данных.
- Насколько свежими будут данные после восстановления.
Существует 3-2-1 стратегия для организации бекапов:
-
3 копии данных — оригинал и два бекапа;
-
2 разных типа носителей (например, локально и в облаке);
-
1 копия вне основной инфраструктуры (например, в облаке).
Подготовка раздела
Перед тем как сделать бекап текущего состояния системы, нужно позаботиться о том, что есть отдельный раздел на диске.
- Рекомендуется создавать разделы сразу при начальной установке системы.
- Если же требуется создать раздел уже после установки системы, нужно помнить, что при сужении раздела потребуется загрузиться с LiveUSB, чтобы раздел не был смонтирован на момент манипуляций.
- После создания раздела, он становится доступен в директории /dev: например, /dev/sdb.
Если раздел /dev/sdb ещё не отформатирован, следует создать файловую систему (ext4) на этом разделе:
sudo mkfs.ext4 /dev/sdb
Затем нужно смонтировать раздел в каталог /mnt текущего раздела, чтобы хранить снимки:
sudo mkdir /mnt/backup
sudo mount /dev/sdb /mnt/backup
df -h — проверить, что раздел смонтирован правильно.
Чтобы раздел оставался смонтированный после перезагрузки системы, нужно прописать его в конфигурацию /etc/fstab:
vim /etc/fstab
Добавить строку в конце файла:
/dev/sdb /mnt/backup ext4 defaults 0 0
rsync
rsync — это удобный инструмент для копирования и синхронизации данных, который хорошо подходит для создания резервных копий системных файлов.
Он будет копировать только измененные файлы, что делает процесс бэкапа эффективным.
sudo rsync -aPv --exclude={"/mnt/","/proc/","/sys/","/dev/","/run/","/tmp/","/var/*"} / /mnt/backup/
-a (или --archive) — основной параметр, который включает в себя несколько параметров:
- -r — рекурсивное копирование директорий (копирует папки и их содержимое).
- -l — копирует символические ссылки как ссылки.
- -p — сохраняет права доступа (permissions).
- -t — сохраняет временные метки файлов (timestamps).
- -g — сохраняет группу файлов.
- -o — сохраняет владельца файлов.
- -D — сохраняет устройства (в основном полезно для копирования с устройств, но может быть полезно для других случаев).
--exclude — параметр исключает каталоги, которые не нужно копировать (например, виртуальные файловые системы или временные каталоги).
-v — осуществляет подробный вывод.
--delete — удаляет файлы, которые не совпадают с целевой директорией
В случае аварии в системе, нужно будет переустановить систему.
Затем смонтировать раздел, где хранятся бекапы.
Чтобы восстановить файлы после аварии достаточно обратно скопировать их в корень системного раздела:
sudo rsync -aAXPv /mnt/backup/ /
sudo reboot
Авария
Чтобы протестировать восстановление системы из бэкап хранилища, рекомендуется развернуть виртуальную машину с целевой операционной системой.
Простейший способ имитировать аварию это переименовать файл init, чтобы система не запустилась:
sudo mv /sbin/init /sbin/init.bak
sudo reboot
Теперь нужно загрузиться с установочного диска с образом системы.
- Перед этим изменить порядок boot в виртуальной машине, чтобы загрузка пошла с привода.
- В оптический диск виртуальной машины нужно добавить установочный образ.
После загрузки установочного диска, нужно войти в тестовый режим или войти в консоль системы из диска.
- Например, на серверных системах загрузчик может сразу начать установку и не будет предложено войти в тестовый режим без установки.
- В таких случаях, нужно нажать ESC или одну из F — обычно это F1.
Когда откроется консоль системы загрузочного диска, нужно смонтировать два раздела:
- Системный, который поврежден.
- Бекап раздел, с рабочей копией системы.
lsblk — посмотреть названия разделов.
- Допустим, это будут sda и sdb.
mkdir /mnt/recovery — создать папку для монтирования системного раздела.
mkdir /mnt/backup — создать папку для монтирования бекап раздела.
rsync -avP --delete /mnt/backup /mnt/recovery — скопировать все рабочие копии поверх поврежденных.
- Если знать конкретную проблему, можно скопировать только нужную директорию
- Параметр --delete удаляет файлы которых нет в бекапе.
- Иначе новые файлы останутся, они могут быть причиной сбоя.
Далее нужно перезагрузить машину и удалить оптический привод.
- Теперь система должна грузиться нормально.