Восстановление загрузочной записи: различия между версиями

Материал из ALT Linux Wiki
(→‎Восстановление основного загрузчика: некоторая корректировка текста)
Строка 32: Строка 32:


==Восстановление основного загрузчика==
==Восстановление основного загрузчика==
Основной загрузчик, чаще всего, бывает повреждён на компьютерах с несколькими операционными системами, если он расположен в MBR. Это связано с тем, что некоторые ОС переписывают содержимое MBR при установке, что делает невозможным загрузку других ОС. Следует понимать, что возврат старого загрузчика, в свою очередь, может сделать недоступной установку той самой "другой ОС".
Основной загрузчик, чаще всего, бывает повреждён на компьютерах с несколькими операционными системами, если он расположен в MBR. Это связано с тем, что некоторые ОС переписывают содержимое MBR при установке, что делает невозможным загрузку других ОС. Следует понимать, что возврат старого загрузчика, в свою очередь, может сделать недоступной установку той самой "другой ОС". Другой способ повредить загрузчик - передвинуть разделы. Например, lilo грузит ядро и initrd, ориентируясь на абсолютное расположение файлов на носителе.


Процесс состоит из двух этапов. Первый - это сбор дерева файловой системы в произвольной точке монтирования и выполнение команды chroot в эту точку. В результате этой операции получается рабочая, ранее недоступная, система. Надо заметить, что восстановление загрузчика - не единственное применение chroot. Второй этап - собственно работы по переустановке (с возможным переконфигурированием) нужного загрузчика, выполняемые во временно реанимированной, посредством chroot, системе.  
Процесс состоит из двух этапов. Первый - это сбор дерева файловой системы в произвольной точке монтирования и выполнение команды chroot в эту точку. В результате этой операции получается рабочая, ранее недоступная, система. Надо заметить, что восстановление загрузчика - не единственное применение chroot. Второй этап - собственно работы по переустановке (с возможным переконфигурированием) нужного загрузчика, выполняемые во временно реанимированной, посредством chroot, системе.  
===Подготовка===
===Подготовка chroot===
Загрузитесь с установочного диска ALT Linux в режиме "Rescue". После загрузки мы получаем терминал в [[режим root|режиме root]].
Загрузитесь с установочного диска ALT Linux в режиме "Rescue". После загрузки мы получаем терминал в [[режим root|режиме root]].


Строка 41: Строка 41:
Воспользуйтесь утилитой [[mount-system]], нахотящейся, как и [[fixmbr]], в rescue-образе. Как и [[fixmbr]], она запускается без параметров. В случае успешного выполнения, достаточно будет выполнить chroot в указанную точку монтирования (в [[Rescue|ALT Linux Rescue]], на текущий момент, это '''/mnt/system1'''). В противном случае, потребуется сделать то же самое в ручном режиме.
Воспользуйтесь утилитой [[mount-system]], нахотящейся, как и [[fixmbr]], в rescue-образе. Как и [[fixmbr]], она запускается без параметров. В случае успешного выполнения, достаточно будет выполнить chroot в указанную точку монтирования (в [[Rescue|ALT Linux Rescue]], на текущий момент, это '''/mnt/system1'''). В противном случае, потребуется сделать то же самое в ручном режиме.


<pre>
chroot /mnt/system1
</pre>
====В ручном режиме====
====В ручном режиме====
Восстановление старой записи в случае использования [[дистрибутивы ALT Linux|дистрибутивов ALT Linux]] состоит из следующих этапов:
Ручная подготовка chroot состоит из следующих этапов:


* Уточнение информации о том, на каком [[устройство|устройстве]] находится [[корневой раздел]]. Для этого можно воспользоваться утилитой [[fdisk]] (или своей памятью, или заранее заготовленными записями). Если будет обнаружено несколько [[раздел]]ов c Linux, возможно придётся проверять их подряд. Для определённости, будем считать, что корневой раздел находится на [[sdaX|/dev/sda5]]
* Уточняем информацию о том, на каком устройстве находится корневой раздел. Для этого можно воспользоваться утилитой [[fdisk]] (или своей памятью, или заранее заготовленными записями). Если будет обнаружено несколько разделов c Linux, возможно придётся проверять их подряд. Для определённости, будем считать, что корневой раздел находится на {{path|/dev/sda5}}
* [[Монтирование|Монтируем]] корневой раздел с жёсткого диска к файловой системе RescueCD:
* Монтируем корневой раздел с жёсткого диска к файловой системе RescueCD:
<source lang="bash">mount /dev/sda5 /mnt</source>
<source lang="bash">mount /dev/sda5 /mnt</source>
* Если есть отдельный раздел с {{path|/boot}}, монтируем его в точку {{path|/mnt/boot}}
* Если есть отдельный раздел с {{path|/boot}}, монтируем его в точку {{path|/mnt/boot}}
<source lang="bash">mount /dev/sda1 /mnt/boot</source>
<source lang="bash">mount /dev/sda1 /mnt/boot</source>
<!-- :(а также раздел с [[boot|/boot]] монтируем в точку /mnt/boot, если он на отдельном разделе). -->
* Убеждаемся, что смонтировали действительно тот раздел
* Убеждаемся, что смонтировали действительно тот раздел
<source lang="bash">ls /mnt/</source> и т.п.)
<source lang="bash">ls /mnt/</source>
* Монтируем [[виртуальные ФС]] для использования их при работе с жёстким диском:
Если остальные разделы не нужны (для lilo корневого раздела и /boot достаточно, к примеру), продолжаем, если нужны, повторяем для остальных разделов.
* Монтируем виртуальные ФС (потребуются для утилит, работающих с жёстким диском и т.п.):
<source lang="bash">
<source lang="bash">
mount --bind /proc /mnt/proc
mount --bind /proc /mnt/proc
mount --bind /dev /mnt/dev
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount --bind /sys /mnt/sys
</source>
</source>
* «[[Чрут]]имся» в систему на жёстком диске:
* Выполняем chroot в собранную ФС:
<source lang="bash">chroot /mnt</source>
<source lang="bash">chroot /mnt</source>


===Восстановление===
===Восстановление===
===='''lilo'''====
===='''lilo'''====
 
Восстановление lilo, как правило, сводится к запуску lilo без параметров. Иногда требуется предварительная правка файла {{path|/etc/lilo.conf}}
* Восстанавливаем загрузчик, предварительно подкорректировав, если это необходимо, файл {{path|/etc/lilo.conf}}
<source lang="bash">
<source lang="bash">
cd /sbin
/sbin/lilo</source>
./lilo</source>
====[[grub]]====
====[[grub]]====
После того, как вы провели подготовительные действия и сделали сhroot, необходимо выполнить
После того, как вы провели подготовительные действия и сделали сhroot, необходимо выполнить
Строка 73: Строка 74:
grub-install /dev/sda # заменить /dev/sda на то устройство, куда хочется установить GRUB
grub-install /dev/sda # заменить /dev/sda на то устройство, куда хочется установить GRUB
grub-mkconfig -o /boot/grub/grub.cfg</source>
grub-mkconfig -o /boot/grub/grub.cfg</source>
Загрузчик [[grub]] обладает очень широкими возможностями. Вероятно, не лишним будет [[grub|почитать про него]] предварительно.


==Замечания==
==Замечания==

Версия от 14:29, 7 декабря 2014

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Немного теории

DOS Partition Table

Загрузчик ОС может находиться как в MBR, так и в BR раздела. Если загрузчик находится в BR раздела, этот раздел должен быть помечен, как активный, а в MBR должен находиться стандартный загрузчик, который находит активный раздел, и запускает следующий загрузчик оттуда.

GPT

надо описать отличия от DOS PT и, возможно, упомянуть отличия BIOS от UEFI.

Рекомендуемые средства

Действия, описанные в раздеде "Восстановление загрузки при повреждении MBR", можно сделать из любой ОС любыми, имеющимися там, средствами. Для действий, описанных в разделе "Подготовка к восстановлению основного загрузчика" и далее, требуется любой LiveCD с Linix, соответствующий по архитектуре установленной на восстанавливаемой системе (но x86_64 может быть применён для x32). Во многих образах ALT Linux присутствует возможность загрузиться в режиме восстановления (rescue). Как правило, в этих образах присутствуют две полезные утилиты - fixmbr и mount-system. Кроме того, существует специальный LiveCD ALT Linux Rescue.

Восстановление загрузки при повреждении MBR

Если основной загрузчик располагался в BR и не не был повреждён, а чем-то оказался повреждён только MBR, и/или сбиты настройки активного раздела, исправить это можно с помощью fixmbr или lilo. Если же у Вас повреждён основной загрузчик, можно переходить сразу к пункту "Восстановление основного загрузчика".

с помощью fixmbr

Можно попробовать воспользоваться утилитой fixmbr из rescue-режима:

fixmbr 

без параметров. В большинстве случаев этого достаточно — программа найдёт первый раздел, содержащий загрузчик, активирует его, и восстановит MBR.

с помощью lilo

Можно, так же, воспользоваться lilo. Это не только загрузчик, но и утилита для манипулирования с MBR и активными разделами. Допустим, мы знаем, что у нас загрузчик (не обязательно Lilo) находится на разделе 2.
Восстановливаем стандартный загрузчик в MBR:

lilo -M /dev/sda mbr

Убираем все метки активных разделов (если единственная метка переехала, или если меток стало больше одной):

lilo -A /dev/sda 0

Делаем активным раздел 2:

lilo -A /dev/sda 2

Восстановление основного загрузчика

Основной загрузчик, чаще всего, бывает повреждён на компьютерах с несколькими операционными системами, если он расположен в MBR. Это связано с тем, что некоторые ОС переписывают содержимое MBR при установке, что делает невозможным загрузку других ОС. Следует понимать, что возврат старого загрузчика, в свою очередь, может сделать недоступной установку той самой "другой ОС". Другой способ повредить загрузчик - передвинуть разделы. Например, lilo грузит ядро и initrd, ориентируясь на абсолютное расположение файлов на носителе.

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

Подготовка chroot

Загрузитесь с установочного диска ALT Linux в режиме "Rescue". После загрузки мы получаем терминал в режиме root.

В автоматическом режиме

Воспользуйтесь утилитой mount-system, нахотящейся, как и fixmbr, в rescue-образе. Как и fixmbr, она запускается без параметров. В случае успешного выполнения, достаточно будет выполнить chroot в указанную точку монтирования (в ALT Linux Rescue, на текущий момент, это /mnt/system1). В противном случае, потребуется сделать то же самое в ручном режиме.

chroot /mnt/system1

В ручном режиме

Ручная подготовка chroot состоит из следующих этапов:

  • Уточняем информацию о том, на каком устройстве находится корневой раздел. Для этого можно воспользоваться утилитой fdisk (или своей памятью, или заранее заготовленными записями). Если будет обнаружено несколько разделов c Linux, возможно придётся проверять их подряд. Для определённости, будем считать, что корневой раздел находится на /dev/sda5
  • Монтируем корневой раздел с жёсткого диска к файловой системе RescueCD:
mount /dev/sda5 /mnt
  • Если есть отдельный раздел с /boot, монтируем его в точку /mnt/boot
mount /dev/sda1 /mnt/boot
  • Убеждаемся, что смонтировали действительно тот раздел
ls /mnt/

Если остальные разделы не нужны (для lilo корневого раздела и /boot достаточно, к примеру), продолжаем, если нужны, повторяем для остальных разделов.

  • Монтируем виртуальные ФС (потребуются для утилит, работающих с жёстким диском и т.п.):
mount --bind /proc /mnt/proc
mount --bind /dev  /mnt/dev
mount --bind /sys  /mnt/sys
  • Выполняем chroot в собранную ФС:
chroot /mnt

Восстановление

lilo

Восстановление lilo, как правило, сводится к запуску lilo без параметров. Иногда требуется предварительная правка файла /etc/lilo.conf

/sbin/lilo

grub

После того, как вы провели подготовительные действия и сделали сhroot, необходимо выполнить

grub-install /dev/sda # заменить /dev/sda на то устройство, куда хочется установить GRUB
grub-mkconfig -o /boot/grub/grub.cfg

Загрузчик grub обладает очень широкими возможностями. Вероятно, не лишним будет почитать про него предварительно.

Замечания

Если изменилась таблица разделов

Если проблемы с загрузчиком - результат перемещения/объединения разделов, то, до непосредственного восстановления загрузчика, потребуется скорректировать настройки загрузчика. Кроме этого, надо будет поправить /etc/fstab (для fstab порядок исправления не важен).

Пример для Lilo (для Grub смотреть в его описании). Предположим, у вас был раздел sda3 с Windows, а стал раздел 1. В /etc/lilo.conf надо заменить

other="/dev/disk/by-id/ata-SAMSUNG_HM160HI_S14QJF0Q772514-part3"
        label="Windows1"

на

other="/dev/disk/by-id/ata-SAMSUNG_HM160HI_S14QJF0Q772514-part1"
        label="Windows1"

И соответственно убрать/поправить в /etc/fstab строчку вида

/dev/sda3   /mnt/sda3       ntfs-3g locale=ru_RU.UTF-8,dmask=0,fmask=0111 0 0

Если у Вас в конфигурации загрузчика и в fstab используются UUID, то, для изменённых разделов, новые UUID можно посмотреть командой blkid. Не забудьте про параметр ядра resume, где указывается раздел swap.

Если нужны изменения в initrd

Непосредственно к восстановлению загрузочной записи это не относится, но может иметь отношение к процессу загрузки при замене контроллера HDD или иных проблемах, требующих изменений в initrd. В ALT Linux, начиная с дистрибутивов, основанных на ветках p5/5.1, используется утилита make-initrd. Вам следует узнать, какое ядро у Вас установлено по-умолчанию (смотреть в конфиге загрузчика), и пересобрать соответствующий initrd до выполнения пункта "Восстановление загрузчика". В большинстве случаев будет достаточно простого запуска make-initrd с указанием версии ядра, так как состав модулей будет определён автоматически, исходя из загруженных на данный момент. Если это не поможет, придётся изучить make-initrd более подробно.

Пример:

# ls -1d /lib/modules/*
/lib/modules/3.14.22-std-def-alt1
/lib/modules/3.14.23-std-def-alt1
/lib/modules/3.16.6-un-def-alt1
/lib/modules/3.4.96-led-ws-alt0.M70P.1

В примере видно наборы модулей для 4-х ядер. Допустим, по-умолчанию используется 3.16.6-un-def-alt1. Команда на пересборку будет выглядеть так:

# make-initrd --kernel=3.16.6-un-def-alt1