Резервное копирование и восстановление ОС Linux
3
11159
28 августа 2020 11:42
28/08/2020
Visitors have accessed this post 11159 times.
Автор — Максим Рязанов
Предисловие
Резервное копирование и восстановление ОС — базовый навык, которым должен обладать любой системный администратор. Поэтому давайте на примере практической задачи разберем, как это сделать в ОС Linux.
Допустим, что у нас есть ОС, все данные которой хранятся в одном разделе. Эту ОС необходимо мигрировать на другой сервер.
Гайд предполагает, что / (корень) — ваш загрузочный, если вы используете разметку диска MBR.
Из доступных средств у нас — только LiveCD/DVD/USB для резервного копирования и развертки системы. Системы резервного копирования отсутствуют.
Пробуем.
Резервное копирование
Начнем мы с резервного копирования.
Шаг 0. Загружаемся с Live системы.
Шаг 1. Монтируем накопитель, на который будет производиться резервное копирование системы (директория монтирования ФС накопителя резервных копий в примере будет /media/backupdisk1, система смонтирована в /mnt).
Шаг 2. Создаем архив с резервной копией.
Команда архивации системы
tar cpJvf /media/backupdisk1/our_backup.xz --selinux --exclude /mnt/dev --exclude /mnt/proc --exclude /mnt/sys --exclude /mnt --exclude /media --exclude /mnt/lost+found --exclude /mnt/tmp /mnt/
Описание опций tar:
- с — create — создать;
- p — сохраняем владельцев файлов и права к файлам;
- J — используем компрессию xz;
- v — verbose, чтобы видеть, что происходит во время архивации;
- f — указываем файл, куда мы хотим сохранить копию/архив;
- — -exclude — исключить из архивации директории и файлы. Из архива исключаются каталоги, структура которых создается при загрузке операционной системы, в связи с чем нет смысла добавлять их в архив.
- — -selinux — сохраняем контексты SElinux, примененные к файлам. Используйте только при наличии в системе SElinux и его поддержки tar (как правило, присутствует в актуальных системах)!
Шаг 3. Демонтируем раздел накопителя, на который архивировали систему.
Восстановление из резервной копии
Шаг 0. Загружаемся с Live системы.
Шаг 1. Неплохо бы для начала развернуть базовую систему на диске для восстанавливаемой ОС.
Или создаем разметку диска и разделы на нем.
Шаг 2. Монтируем накопитель с резервной копией (в нашем примере — /media/backupdisk1, а корень установленной ОС примонтирован в /mnt).
Шаг 3. Распаковываем копию.
Команда разархивации
tar -xvpfJ --selinux /media/backupdisk1/our-backup.xz -C /mnt/
Описание опций tar:
- x — extract, вытащить данные из архива;
- v — verbose, чтобы видеть, что происходит во время разархивации;
- p — сохраняем владельцев файлов и права к файлам;
- f — указываем, из какого файла мы хотим восстановить копию/архив;
- J — указываем при распаковке, что у нас используется компрессия xz;
- -C — create. Восстановить структуру каталогов, воссоздав отсутствующие.
- — -selinux — сохраняем контексты SElinux, примененные к файлам. Использовать только при наличии в системе SElinux и его поддержки tar!
Шаг 4. Если мы выполняем разархивацию не в готовую систему, восстановим директории, которые мы исключили из архивации, а также восстановим правильные права доступа к ним.
mkdir {/mnt/dev,/mnt/proc,/mnt/sys,/mnt/mnt,/mnt/media,/mnt/tmp,/mnt/lost+found}
chmod -R 777 {/mnt/tmp,/mnt/mnt,/mnt/media}
# или
chmod -R 755 {/mnt/mnt,/mnt/media}
chmod -R 777 /mnt/tmp
# конец или
chmod -R 755 /mnt/dev
chmod -R 555 {/mnt/proc,/mnt/sys}
# в случае наличия SElinux в системе укажем созданным директориям их контексты:
chcon -R system_u:object_r:boot_t:s0 /mnt/boot
chcon -R system_u:object_r:device_t:s0 /mnt/dev
chcon -R system_u:object_r:proc_t:s0 /mnt/proc
chcon -R system_u:object_r:sysfs_t:s0 /mnt/sys
chcon -R system_u:object_r:mnt_t:s0 {/mnt/media,/mnt/mnt}
chcon -R system_u:object_r:tmp_t:s0 /mnt/tmp
chcon -R system_u:object_r:lost_found_t:s0 /mnt/lost+found
# или для восстановления контекстов перед загрузкой системы автоматически создайте в корне файл .autorelabel
touch /mnt/.autorelabel # может занять очень много времени при наличии большого количества мелких файлов, но надежно и корректно расставит контексты перед загрузкой системы!
Обратите внимание! Для работы с SElinux при восстановлении ваша live система и утилита tar в ее составе должны поддерживать SElinux.
Восстановление загрузчика для MBR
Обратите внимание на этот пункт, если используете разметку диска MBR и развертку НЕ поверх установленной ранее системы.
Для проверки работоспособности системы и установки загрузчика необходимо выполнить следующие операции:
Шаг 0. Монтируем уже рабочие служебные каталоги из live системы в восстановленную.
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt # CHangeROOT - меняем корневой каталог. Теперь корнем будет корень восстановленной системы
Вызов bind mount присоединяет (частично) только одну файловую систему, а не возможные дополнительные монтирования в директории внутри нее. Вся файловая иерархия, включая дополнительные монтирования внутри монтируемой ФС, остается на своем месте.
Далее проверим, на каком диске у нас система:
root@rpulse ~ # lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 253:0 0 25G 0 disk
└─vda1 253:1 0 25G 0 part /
root@rpulse ~ #
Наш диск — vda.
Установим туда загрузчик, потом сконфигурируем:
grub-install /dev/vda # установка
# далее все зависит от того, какой версии grub у вас
# не используйте следующие две команды поочередно, проверьте доступность первой!
update-grub # один из вариантов конфигурации
grub-mkconfig -o /boot/grub/grub.cfg # другой
Далее поправим наш fstab. Выполним команду blkid для идентификации UUID разделов. И после правим fstab.
root@rpulse ~ /dev/vda1: UUID="0ae7ab5c-e4e2-4641-87ad-d02b494b6553" TYPE="ext4"
# потом указываем их в fstab
root@rpulse ~ nano /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Jan 5 21:10:34 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=0ae7ab5c-e4e2-4641-87ad-d02b494b6553 / ext4 defaults 1 1
/swapfile swap swap sw 0 0
Или мы можем использовать вместо UUID — лейблы (labels). Помните, что в отличие от UUID, labels могут быть не уникальны.
root@rpulse ~ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 253:0 0 25G 0 disk
└─vda1 253:1 0 25G 0 part /
root@rpulse ~ nano /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Jan 5 21:10:34 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/vda1 / ext4 defaults 1 1
/swapfile swap swap sw 0 0
Теперь демонтируем разделы из live.
# выходим из chroot
root@rpulse ~ exit # или CTRL+d
# демонтируем разделы из live
root@rpulse ~ umount /mnt/{dev,proc,sys}
А потом и раздел разархивированной системы и носителя с бэкапом.
Восстановление загрузчика UEFI
Обратите внимание на этот пункт, если используете разметку диска GPT и UEFI loader.
В данном примере будет использоваться конфигурация systemd-boot.
Монтируем esp в /mnt/boot.
Поправим esp/loader/entries/$(osconfigname).conf.
Вместо $(osconfigname) подставьте имя вашего конфига, указанного в esp/loader/loader.conf.
Файл esp/loader/entries/$(osconfigname).conf
root@rpulse ~ blkid
/dev/vda1: UUID="0ae7ab5c-e4e2-4641-87ad-d02b494b6553" TYPE="ext4"
/dev/vda2: UUID="14420948-2cea-4de7-b042-40f67c618660" TYPE="vfat"
root@rpulse ~ nano esp/loader/entries/$(osconfigname).conf
esp/loader/entries/arch.conf
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 rw
Заключение
Если вы повторили путь, описанный в статье, полностью — ура, теперь вы умеете делать резервное копирование и восстановливать ОС Linux. Если у вас возникли вопросы на каком-либо этапе, задавайте их в комментариях к статье, обязательно подскажем.
От редакции
Если вам интересно посещать бесплатные онлайн-мероприятия по DevOps, Kubernetes, Docker, GitlabCI и др. и задавать вопросы в режиме реального времени, подключайтесь к каналу DevOps by REBRAIN.
*Анонсы мероприятий каждую неделю
Практикумы для специалистов по инфраструктуре и разработчиков — https://rebrainme.com.
Наш Youtube-канал — https://www.youtube.com/channel/UC6uIx64IFKMVmj12gKtSgBQ.
Агентство Fevlake, проектируем и поддерживаем IT-инфраструктуры с 2012 года — https://fevlake.com.