Резервное копирование и восстановление ОС Linux
Visitors have accessed this post 4462 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 chmod -R 777 # или chmod -R 755 chmod -R 777 /mnt/tmp # конец или chmod -R 755 /mnt/dev chmod -R 555 # в случае наличия 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 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 ~ #
Установим туда загрузчик, потом сконфигурируем:
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/
А потом и раздел разархивированной системы и носителя с бэкапом.
Восстановление загрузчика UEFI
Обратите внимание на этот пункт, если используете разметку диска GPT и UEFI loader.
В данном примере будет использоваться конфигурация systemd-boot.
Вместо $(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.
*Анонсы мероприятий каждую неделю