Thank you for reading this post, don't forget to subscribe!
Допустим, что у нас есть ОС, все данные которой хранятся в одном разделе. Эту ОС необходимо мигрировать на другой сервер.
Гайд предполагает, что / (корень) — ваш загрузочный, если вы используете разметку диска MBR.
Из доступных средств у нас — только LiveCD/DVD/USB для резервного копирования и развертки системы. Системы резервного копирования отсутствуют.
Резервное копирование
Начнем мы с резервного копирования.
Шаг 0. Загружаемся с Live системы.
Шаг 1. Монтируем накопитель, на который будет производиться резервное копирование системы (директория монтирования ФС накопителя резервных копий в примере будет /media/backupdisk1, система смонтирована в /mnt).
Шаг 2. Создаем архив с резервной копией.
Команда архивации системы
Описание опций tar:
- с — create — создать;
- p — сохраняем владельцев файлов и права к файлам;
- J — используем компрессию xz;
- v — verbose, чтобы видеть, что происходит во время архивации;
- f — указываем файл, куда мы хотим сохранить копию/архив;
- — -exclude — исключить из архивации директории и файлы. Из архива исключаются каталоги, структура которых создается при загрузке операционной системы, в связи с чем нет смысла добавлять их в архив.
- — -selinux — сохраняем контексты SElinux, примененные к файлам. Используйте только при наличии в системе SElinux и его поддержки tar (как правило, присутствует в актуальных системах)!
Шаг 3. Демонтируем раздел накопителя, на который архивировали систему.
Восстановление из резервной копии
Шаг 0. Загружаемся с Live системы.
Шаг 1. Неплохо бы для начала развернуть базовую систему на диске для восстанавливаемой ОС.
Или создаем разметку диска и разделы на нем.
Шаг 2. Монтируем накопитель с резервной копией (в нашем примере — /media/backupdisk1, а корень установленной ОС примонтирован в /mnt).
Шаг 3. Распаковываем копию.
Команда разархивации
Описание опций tar:
- x — extract, вытащить данные из архива;
- v — verbose, чтобы видеть, что происходит во время разархивации;
- p — сохраняем владельцев файлов и права к файлам;
- f — указываем, из какого файла мы хотим восстановить копию/архив;
- J — указываем при распаковке, что у нас используется компрессия xz;
- -C — create. Восстановить структуру каталогов, воссоздав отсутствующие.
- — -selinux — сохраняем контексты SElinux, примененные к файлам. Использовать только при наличии в системе SElinux и его поддержки tar!
Шаг 4. Если мы выполняем разархивацию не в готовую систему, восстановим директории, которые мы исключили из архивации, а также восстановим правильные права доступа к ним
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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 системы в восстановленную.
1 2 3 4 |
mount --bind /dev /mnt/dev mount --bind /proc /mnt/proc mount --bind /sys /mnt/sys chroot /mnt # CHangeROOT - меняем корневой каталог. Теперь корнем будет корень восстановленной системы |
Вызов bind mount присоединяет (частично) только одну файловую систему, а не возможные дополнительные монтирования в директории внутри нее. Вся файловая иерархия, включая дополнительные монтирования внутри монтируемой ФС, остается на своем месте.
Далее проверим, на каком диске у нас система:
1 2 3 4 5 6 |
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.
Установим туда загрузчик, потом сконфигурируем:
1 2 3 4 5 |
grub-install /dev/vda # установка # далее все зависит от того, какой версии grub у вас # не используйте следующие две команды поочередно, проверьте доступность первой! update-grub # один из вариантов конфигурации grub-mkconfig -o /boot/grub/grub.cfg # другой |
Далее поправим наш fstab. Выполним команду blkid для идентификации UUID разделов. И после правим fstab.
1 2 3 4 5 6 7 8 9 10 11 12 |
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 могут быть не уникальны.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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.
1 2 3 4 |
# выходим из 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
1 2 3 4 5 6 7 8 9 |
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 |