Visitors have accessed this post 697 times.

Резервное копирование и восстановление ОС Linux

3
0
697
28 августа 2020 11:42
Автор: Rebrain Me
Linux

Visitors have accessed this post 697 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.

Комментарии (3)
Введено символов из возможных
Не отвечать

Вам также может понравится

Утилита для удаленного обслуживания систем на базе ОС NixOS — nixops
array(1) { [0]=> object(WP_Term)#11166 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(28) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(28) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Автор - Юрий Изоркин

Сегодня давайте познакомимся с утилитой nixops для удаленного обслуживания систем на базе ОС NixOS. Также она поддерживает развертывание систем на VirtualBox VM, Amazon EC2, Google Compute Engine, Microsoft Azure, Hetzner physical machines, Digital Ocean, Libvirtd (Qemu), Datadog resources. Подробнее об этих возможностях...

1
2
18 декабря 2020
Как я выбирал оболочку командной строки
array(1) { [0]=> object(WP_Term)#11166 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(28) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(28) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Автор - Юрий Власов

Оболочка командной строки используется для любых манипуляций с сервером. Настраивать сервера можно по-разному. Важно, чтобы это было комфортно для администратора, а вот главное, чтобы это было эффективно по затратам и времени, и сил. Командная строка может быть красочной, стрелочками разных цветов показывать путь к текущей...

4
0
2 октября 2020
30 инструментов мониторинга системы Linux, которые должен знать каждый сисадмин
array(1) { [0]=> object(WP_Term)#11167 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(28) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(28) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Ищете способы, как контролировать производительность сервера Linux? В большинстве дистрибутивов Linux уже встроены разные инструменты мониторинга. Используя их, можно посмотреть метрики с информацией о системных процессах. Эти инструменты можно использовать для поиска возможных причин возникновения проблем с производительностью. Команды, которые...

0
0
28 мая 2020