Альт 8СП/Раздел восстановления
ОС Альт 8 СП, в числе прочего, обеспечивает следующие возможности:
- создание на жёстком диске специального раздела для сохранения и восстановления настроек ОС;
- сохранение текущих настроек в раздел восстановления на жёстком диске, при этом допускается создание множества точек восстановления;
- восстановление настроек из спасательного раздела, в том числе, с полным сохранением пользовательских файлов;
- на уровне дистрибутива поддерживается автоматизация задач по сохранению и восстановлению настроек ОС.
Подключение к сети, доступ к интернет, скачивание файлов не требуется, все операции выполняются в обычной консоли.
Коротко
При установке ОС необходимо использовать ручную, а не автоматическую разметку диска, предусмотреть выделение на жёстком диске места для создания специального спасательного раздела. После установки ОС раздел восстановления готовится всего несколькими командами пользователем root, и все указанные выше возможности становятся доступными. Чтобы не набирать последовательность однотипных команд для каждой решаемой задачи, можно подготовить отдельный скрипт, адаптировав его под свои нужды. Далее будут приведены примеры работы с разделом восстановления.
Применимость ниже описанных примеров
- Образ дистрибутива: alt-sp8-workstation-20201202-x86_64.iso, MD5: 19e544457da85bd1c95b54b097b409f5, КС: 5712fc4a (Legacy/CMS & UEFI)
- Образ дистрибутива: alt-sp8-workstation-20201202-i586.iso, MD5:2e1c18f05a93613b1dd2a204d36183a4, КС: c1e658fe (только Legacy/CSM)
Определение режима загрузки ОС
В зависимости от того, как выглядит первый экран с загрузочным меню установщика, вы находитесь либо в режиме Legacy/CSM (загрузчик isolinux, рис. 1a), либо в режиме UEFI (загрузчик refind, рис. 1b).
Приводимая далее инструкция, в целом, не зависит от режима загрузки, однако пример лучше сразу выбирать для себя более подходящий.
Режим загрузки Legacy/CSM
1. Устанавливаем ОС по своему усмотрению и согласно документации. На шаге 4 необходимо выбрать ручную разметку (рис. 2).
В данном примере диск разбивается по следующей схеме: 1-й раздел -- swap, 2-й раздел -- корневой, 3-й раздел -- /home. Оставшееся на диске место резервируем для спасательного раздела, отключив галку "Создать том" (рис. 3a).
2. После установки системы открываем терминал и получаем права root (su-).
3. Смотрим все блочные устройства, чтобы понять, какой раздел был зарезервирован для спасательных целей:
# lsblk -f NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT sda ├─sda1 swap cda4de4a-71b0-4972-a4c8-cd569951f454 [SWAP] ├─sda2 ext4 e9039de5-7f83-4836-98a6-259e6b4b2359 6,9G 47% / ├─sda3 ext4 c060ec4c-1565-42dd-93f9-a44e58e1e6de 9,2G 0% /home ├─sda4 └─sda5 sr0 iso9660 ALT 8 SP Workstation 2020-12-02-14-49-51-00 0 100% /media/ALTLinux # fdisk -l /dev/sda ... Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип /dev/sda1 2048 1048575 1046528 511M 82 Linux своп / Solaris /dev/sda2 * 1048576 31766527 30717952 14,7G 83 Linux /dev/sda3 31766528 52735999 20969472 10G 83 Linux /dev/sda4 52736000 62910463 10174464 4,9G 5 Расширенный /dev/sda5 52738048 62910463 10172416 4,9G 83 Linux
Из этого примера понятно, что нас интересует последний раздел на диске: /dev/sda5.
4. Подготовим этот раздел несколькими командами:
# mkfs.ext4 -j -L RECOVERY /dev/sda5 # mkdir /tmp/recovery # mount -L RECOVERY /tmp/recovery # mkdir -m700 /tmp/recovery/backup
5. Вставим установочный диск с Альт 8 СП. По умолчанию его содержимое доступно в точке монтирования /media/ALTLinux. Скопируем с него три файла на созданный раздел (ядро, образ initrd и файл второй стадии загрузки):
# cp -Lf /media/ALTLinux/EFI/BOOT/vmlinuz /tmp/recovery/backup/ # cp -Lf /media/ALTLinux/EFI/BOOT/full.cz /tmp/recovery/backup/ # cp -Lf /media/ALTLinux/rescue /tmp/recovery/
6. Смотрим, что получилось, как называется целевой диск и какие порядковые номера используются для разделов:
# lsblk -f NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT sda ├─sda1 swap cda4de4a-71b0-4972-a4c8-cd569951f454 [SWAP] ├─sda2 ext4 e9039de5-7f83-4836-98a6-259e6b4b2359 6,9G 47% / ├─sda3 ext4 c060ec4c-1565-42dd-93f9-a44e58e1e6de 9,2G 0% /home ├─sda4 └─sda5 ext4 RECOVERY b36db3ba-6e81-460a-af7a-61c070ae12f1 4,4G 0% /tmp/recovery sr0 iso9660 ALT 8 SP Workstation 2020-12-02-14-49-51-00 0 100% /media/ALTLinux
7. В соответствии с полученной информацией создаём "карту устройств" на спасательном разделе:
# cat >/tmp/recovery/backup/map.conf <<EOF target=/dev/sda swap=1 root=2 home=3 EOF
Здесь target -- название целевого диска, а остальное -- порядковые номера разделов, если таковые используются в схеме разметки диска.
8. Создаём три файла: full-backup, full-restore и 15_grub командами в консоли, см. приложения 1, 2 и 3.
9. Выполняем ещё несколько команд и перезагружаемся:
# ln -snf full-restore /tmp/recovery/sys-restore # chmod +x /tmp/recovery/full-restore # chmod +x /tmp/recovery/full-backup # chmod +x /etc/grub.d/15_rescue # update-grub # umount /tmp/recovery # reboot
10. В результате первый экран с загрузочным меню будет выглядеть как на рис. 4a.
Теперь можно пользоваться разделом восстановления, см. детали в описании Консоли восстановления.
Режим загрузки UEFI
1. Устанавливаем ОС по своему усмотрению и согласно документации. На шаге 4 необходимо выбрать ручную разметку (рис. 2).
В данном примере диск разбивается по следующей схеме: 1-й раздел -- EFI System (FAT32), 2-й раздел -- swap, 3-й раздел -- корневой, 4-й раздел -- /home. Оставшееся на диске место резервируем для спасательного раздела, отключив галку "Создать том" (рис. 3b).
2. После установки системы открываем терминал и получаем права root (su-).
3. Смотрим все блочные устройства, чтобы понять, какой раздел был зарезервирован для спасательных целей:
# lsblk -f NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT sda ├─sda1 vfat E9AA-7350 97,5M 4% /boot/efi ├─sda2 swap 03911215-d8f7-48a5-bbd2-11e01ec11299 [SWAP] ├─sda3 ext4 6f4000ff-29ee-43d2-808a-1b9f2b818d96 6,9G 47% / ├─sda4 ext4 1564f924-df3e-44b6-b805-550dc4231f00 9G 0% /home └─sda5 sr0 iso9660 ALT 8 SP Workstation 2020-12-02-14-49-51-00 0 100% /media/ALTLinux # fdisk -l /dev/sda ... Устр-во начало Конец Секторы Размер Тип /dev/sda1 2048 212991 210944 103M EFI /dev/sda2 212992 1261567 1048576 512M Файловая система Linux /dev/sda3 1261568 31981567 30720000 14,7G Файловая система Linux /dev/sda4 31981568 52461567 20480000 9,8G Файловая система Linux /dev/sda5 52461568 62910463 10448896 5G Файловая система Linux
Из этого примера понятно, что нас интересует последний раздел на диске: /dev/sda5.
4. Подготовим этот раздел несколькими командами:
# mkfs.ext4 -j -L RECOVERY /dev/sda5 # mkdir /tmp/recovery # mount -L RECOVERY /tmp/recovery # mkdir -m700 /tmp/recovery/backup
5. Вставим установочный диск с Альт 8 СП. По умолчанию его содержимое доступно в точке монтирования /media/ALTLinux. Скопируем с него три файла на созданный раздел (ядро, образ initrd и файл второй стадии загрузки):
# cp -Lf /media/ALTLinux/EFI/BOOT/vmlinuz /tmp/recovery/backup/ # cp -Lf /media/ALTLinux/EFI/BOOT/full.cz /tmp/recovery/backup/ # cp -Lf /media/ALTLinux/rescue /tmp/recovery/
6. Смотрим, что получилось, как называется целевой диск и какие порядковые номера используются для разделов:
# lsblk -f NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT sda ├─sda1 vfat E9AA-7350 97,5M 4% /boot/efi ├─sda2 swap 03911215-d8f7-48a5-bbd2-11e01ec11299 [SWAP] ├─sda3 ext4 6f4000ff-29ee-43d2-808a-1b9f2b818d96 6,9G 47% / ├─sda4 ext4 1564f924-df3e-44b6-b805-550dc4231f00 9G 0% /home └─sda5 ext4 RECOVERY 43cf8808-32d5-4229-914f-6ebe28c5a6e7 4,6G 0% /tmp/recovery sr0 iso9660 ALT 8 SP Workstation 2020-12-02-14-49-51-00 0 100% /media/ALTLinux
7. В соответствии с полученной информацией создаём "карту устройств" на спасательном разделе:
# cat >/tmp/recovery/backup/map.conf <<EOF target=/dev/sda swap=2 root=3 home=4 EOF
Здесь target -- название целевого диска, а остальное -- порядковые номера разделов, если таковые используются в схеме разметки диска. Обратите внимание, что раздел EFI здесь не указан. В процессе работы наших скриптов он будет определён автоматически.
8. Создаём три файла: full-backup, full-restore и 15_grub командами в консоли, см. приложения 1, 2 и 3.
9. Выполняем ещё несколько команд и перезагружаемся:
# ln -snf full-restore /tmp/recovery/sys-restore # chmod +x /tmp/recovery/full-restore # chmod +x /tmp/recovery/full-backup # chmod +x /etc/grub.d/15_rescue # update-grub # umount /tmp/recovery # reboot
10. В результате первый экран с загрузочным меню будет выглядеть как на рис. 4b.
Теперь можно пользоваться разделом восстановления, см. детали в описании Консоли восстановления.
Использование Консоли восстановления
Данная консоль позволяет выполнять различные спасательные работы: сохранять и восстанавливать разделы, устанавливать загрузчик, итд. Подробнее про ALT Rescue можно почитать в соответствующем описании. В загрузочный образ rescue зашиты многие полезные команды, такие как partclone (для всех известных файловых систем), system-backup, sfdisk, partprobe, итд. Более подробно с этими командами можно ознакомиться на этой странице. В приложениях ниже можно увидеть примеры автоматизации с использованием некоторых из перечисленных команд.
Создание точки восстановления системы
1. Перезагружаем компьютер.
2. В загрузочном меню выбираем пункт "Создать резервную копию" (рис. 4a, 4b).
3. Процесс создания точки восстановления может занять длительное время, но происходящее отражается на экране (рис. 5).
4. По окончании процесса будет показан размер созданной резервной копии и мы окажемся в Консоли восстановления. Здесь можно видеть, что бэкап назван по текущей дате и символьная ссылка LAST указывает на последний бэкап (рис. 6).
Симлинк LAST позволяет управлять вопросом, из какого бэкапа будут производиться процедуры восстановления системы. Чтобы указать другой бэкап достаточно дать в консоли команду: ln -snf <BACKUP-DATE> /image/backup/LAST, предварительно перемонтировав диск на запись: mount -o remount,rw /image.
5. Даём команду reboot либо просто перезагружаем компьютер через Ctrl-Alt-Del.
Раздел восстановления в установленной системе
1. Пользователь root может вручную смонтировать раздел, например, такими командами:
# mkdir /tmp/recovery # mount -L RECOVERY /tmp/recovery
При этом содержимое каталога /backup на этом разделе со всеми бэкапами будет доступно только пользователю root. Поскольку запись в /etc/fstab для данного раздела не предусмотрена, он не будет автоматически монтироваться при загрузке компьютера.
2. В среде обычного пользователя раздел восстановления недоступен, для доступа к нему требуется авторизация (рис. 7).
Восстановление всех разделов
1. Перезагружаем компьютер.
2. В загрузочном меню выбираем пункт "Восстановить все разделы" (рис. 4a, 4b).
3. Дожидаемся окончания процесса восстановления всей системы и раздела данных пользователей.
По окончании процесса компьютер перезагрузится. Следует иметь ввиду, что в данном режиме также восстанавливаются исходная разметка диска, области начальной загрузки и раздел /home.
Восстановление системных разделов
1. Перезагружаем компьютер.
2. В загрузочном меню выбираем пункт "Восстановить только систему" (рис. 4a, 4b).
3. Дожидаемся окончания процесса восстановления.
По окончании процесса компьютер перезагрузится. Следует иметь ввиду, что в данном режиме не восстанавливаются исходная разметка диска, области начальной загрузки и раздел /home. Можно внести изменения в скрипт full-restore, чтобы изменить это поведение под свои нужды.
А если компьютер вообще не загружается?
Если жёсткий диск физически не испорчен, но разрушены структуры данных на системных дисках, возможность загрузить систему со спасательного раздела и восстановить работоспособность компьютера всё ещё имеется, нужно только воспользоваться установочным диском Альт 8 СП.
1. Перезагружаем компьютер с установочного CD/DVD/флэшки.
2. В режиме загрузки Legacy/CSM:
2.1. Выбираем третий пункт "Восстановление системы", но ничего не нажимаем.
2.2. Дописываем руками следующие параметры загрузки: automatic=method:disk,label:RECOVERY autorun=method:disk,run:sys-restore и нажимаем ENTER (рис i1).
2.3. По окончании загрузки в ALT Rescue переключаемся на первый терминал (Alt-F1), чтобы видеть происходящее (необязательно).
3. В режиме загрузки UEFI:
3.1. Выбираем второй пункт "Boot ALT Linux Rescue" в верхнем ряду и нажимаем клавишу F2 (рис. e1).
3.2. Выбираем первый пункт "Boot using default options" повторным нажатием клавиши F2 (рис. e2).
3.3. Дописываем руками следующие параметры загрузки: automatic=method:disk,label:RECOVERY autorun=method:disk,run:sys-restore vga=normal nomodeset nosplash и нажимаем ENTER (рис e3).
4. После восстановления системы компьютер будет перезагружен. Если процедура восстановления не помогла, повторяем операцию с использованием опции full-restore вместо sys-restore. Если при этом необходимо сохранить данные, придётся сначала внести изменения в файл /backup/map.conf на разделе RECOVERY, закомментировав строку home=...
А если спасательный раздел не был создан изначально?
Можно обойтись и без выделенного раздела, а использовать для тех же целей раздел /home. Тогда приведённые выше инструкции следует адаптировать и придётся отказаться от режима восстановления всех разделов, т.к. данные на /home уже нельзя будет трогать ни при каких условиях.
А можно использовать другой физический диск для спасательного раздела?
Можно, это даже более рекомендуемый способ, т.к. если жёсткий диск с установленной ОС, данными и бэкапами физически испортится, восстановить систему будет не с чего. Рекомендуется всегда держать загрузочную систему с бэкапами на отдельном USB-HDD или USB-флэшке, поскольку такая эксплуатация ещё и эффективнее для жёстких дисков -- магнитной головке не приходится постоянно скакать из стороны в сторону.
Приложение 1: создание скрипта сохранения системы
Далее приведена всего одна команда, создающая скрипт. Постарайтесь не ошибиться при наборе:
# cat >/tmp/recovery/full-backup <<EOF #!/bin/sh -efu . /mnt/autorun/backup/map.conf uefi=1 ppart= name="\$(date +%F)" backup="/mnt/autorun/backup/\$name" devnode() { if [ -n "\$ppart" ]; then echo "\${target}p\$1" else echo "\${target}\$1" fi } backup() { "partclone.\$1" -N -c -s "\$(devnode \$2)" | pigz -9qnc >"\$3.pc.gz" } if [ -b "\${target}p1" ]; then ppart=1 elif [ ! -b "\${target}1" ]; then exit 1 fi mount -o remount,rw /mnt/autorun rm -rf -- "\$backup" mkdir -p -m700 -- "\$backup" cd "\$backup"/ umask 0077 [ -d /sys/firmware/efi ] || uefi= [ -n "\${root-}" ] && [ -b "\$(devnode \$root)" ] || exit 1 [ -n "\${swap-}" ] && [ -b "\$(devnode \$swap)" ] || swap= [ -n "\${home-}" ] && [ -b "\$(devnode \$home)" ] || home= sfdisk -d "\$target" >sfdisk.txt dd if="\$target" bs=512 count=100 |pigz -9qnc >vbr.gz [ -z "\$swap" ] || blkid -c /dev/null -o value \\ -s UUID -- "\$(devnode \$swap)" >swap.uuid [ -z "\$uefi" ] || backup fat32 \$uefi uefi [ -z "\$home" ] || backup ext4 \$home home [ -z "\$root" ] || backup ext4 \$root root clear cd .. echo "Backup created:" du -sh -- "\$name" ln -snf -- "\$name" LAST cd / && mount -o remount,ro /mnt/autorun exec /bin/sh -c "umount /mnt/autorun && rmdir /mnt/autorun" EOF
Приложение 2: создание скрипта восстановления системы
Далее приведена всего одна команда, создающая скрипт. Постарайтесь не ошибиться при наборе:
# cat >/tmp/recovery/full-restore <<EOF #!/bin/sh -efu . /mnt/autorun/backup/map.conf uefi=1 ppart= backup="\$(readlink -fv /mnt/autorun/backup/LAST)" devnode() { if [ -n "\$ppart" ]; then echo "\${target}p\$1" else echo "\${target}\$1" fi } restore() { [ ! -s "\$1.pc.gz" ] || unpigz -qnc <"\$1.pc.gz" | "partclone.\$2" -N -r -s - -o "\$(devnode \$3)" } if [ -b "\${target}p1" ]; then ppart=1 elif [ ! -b "\${target}1" ]; then exit 1 fi cd "\$backup"/ [ -d /sys/firmware/efi ] || uefi= [ -n "\${root-}" ] && [ -b "\$(devnode \$root)" ] || exit 1 [ -n "\${swap-}" ] && [ -b "\$(devnode \$swap)" ] || swap= [ -n "\${home-}" ] && [ -b "\$(devnode \$home)" ] || home= if [ "\${0##*/}" != "full-restore" ]; then home= else unpigz -qnc <vbr.gz | dd of="\$target" bs=512 oflag=direct sync; partprobe "\$target" 2>/dev/null ||: fi if [ -n "\$swap" ]; then wipefs -a -- "\$(devnode \$swap)" mkswap -U "\$(head -n1 swap.uuid)" -- "\$(devnode \$swap)" fi [ -z "\$uefi" ] || restore uefi fat32 \$uefi [ -z "\$root" ] || restore root ext4 \$root [ -z "\$home" ] || restore home ext4 \$home clear cd / echo "System restored!" exec /bin/sh -c "umount /mnt/autorun && /sbin/reboot" EOF
Приложение 3: создание скрипта расширения загрузочного меню
Далее приведена всего одна команда, создающая скрипт. Постарайтесь не ошибиться при наборе:
# cat >/etc/grub.d/15_rescue <<EOF #!/bin/sh -e prefix="/usr" exec_prefix="/usr" datarootdir="/usr/share" . "\$pkgdatadir/grub-mkconfig_lib" export TEXTDOMAIN=grub export TEXTDOMAINDIR="\$datarootdir/locale" CLASS="--class gnu-linux --class gnu --class os --unrestricted" [ -n "\$boot_device_id" ] || boot_device_id="\$(grub_get_device_id "\$GRUB_DEVICE")" rescue_entry() { echo "menuentry '\$1' \$CLASS \\\$menuentry_id_option 'gnulinux-alt8sp-\$boot_device_id' {" echo " load_video" echo " insmod gzio" echo " insmod part_msdos" echo " insmod part_gpt" echo " insmod ext2" echo " search --no-floppy --set=root -l 'RECOVERY'" echo " linux /backup/vmlinuz initrd=/backup/full.cz quiet ramdisk_size=301045 automatic=method:disk,label:RECOVERY stagename=rescue vga=normal nomodeset nosplash autorun=method:disk,run:\$2" echo " initrd /backup/full.cz" echo "}" } rescue_entry "Консоль восстановления" rescue rescue_entry "Создать резервную копию" full-backup rescue_entry "Восстановить все разделы" full-restore rescue_entry "Восстановить только систему" sys-restore EOF
Можно предусмотреть собственный уровень подменю для подобных задач, можно адаптировать под них конкретный список пунктов меню. В данном примере добавляется четыре пункта на первом уровне меню GRUB (четыре последние строки). Единственный вопрос к этому скрипту, действительно требующий комментария: откуда берётся значение "301045"? Это размер файла второй стадии загрузки (/media/ALTLinux/rescue) в килобайтах плюс один, которое можно посчитать либо найти в этом файле: /media/ALTLinux/EFI/BOOT/refind.conf или в этом: /media/ALTLinux/syslinux/isolinux.cfg.
Приложение 4: архив с примерами скриптов
Чтобы не ошибиться в наборе можно заранее скачать архив с примерами скриптов, адаптировать эти скрипты под свои нужды, записать на чистую флэшку и использовать в дальнейшем на развёртываемых компьютерах предприятия для автоматизации задач, связанных с разделом восстановления системы.
Enjoy! ;-)