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

Материал из ALT Linux Wiki
м (+категории)
м (Убрал свою ссылку)
 
(не показано 46 промежуточных версий 12 участников)
Строка 1: Строка 1:
[[Категория:HOWTO]]
[[категория:FAQ]]
[[категория:admin]]
{{stub}}
{{stub}}
== Немного теории ==
=== DOS Partition Table ===
Загрузчик ОС может находиться как в Master Boot Record ([[ruwp:MBR|MBR]]), так и в boot record раздела. Если загрузчик находится в BR раздела, этот раздел должен быть помечен как активный, а в MBR должен находиться стандартный загрузчик, который находит активный раздел и запускает следующий загрузчик оттуда.


===Восстановление загрузчика в автоматическом режиме===
=== GPT ===
''надо описать отличия от DOS PT и, возможно, упомянуть отличия BIOS от [[UEFI]], где команда {{cmd|fixmbr}} неприменима''


В [[ALT Linux 4.1 Desktop]] (а так же в [[Линукс Мастер]], или во втором диске [[Лёгкий Линукс|Лёгкого Линукса]]) можно после загрузки [[режим восстановления|режима восстановления]] ввести команду
=== Рекомендуемые средства ===
<code>[[fixmbr]]</code>
Действия, описанные в разделе «Восстановление загрузки при повреждении MBR», можно сделать из любой ОС любыми имеющимися там средствами. Для действий, описанных в разделе «Подготовка к восстановлению основного загрузчика» и далее требуется любой LiveCD с Linux, соответствующий по архитектуре установленной на восстанавливаемой системе (но x86_64 может быть применён для i586). Во многих образах ALT Linux присутствует возможность загрузиться в режиме восстановления (rescue). Как правило, в этих образах присутствуют две полезные утилиты — {{cmd|fixmbr}} и {{cmd|mount-system}}. Кроме того, существует специализированный LiveCD [[Rescue|ALT Linux Rescue]].
без параметров. В большинстве случаев этого достаточно — программа найдёт первый [[раздел]], содержащий [[загрузчик]] для [[ruwp:MBR|MBR]] и [[активация раздела|активирует]] его. Если эта программа не поможет или её нет, то воспользуйтесь информацией, представленной ниже.


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


Восстановление удалённой [[загрузочная запись|загрузочной записи]] обычно бывает необходимо на [[компьютеры с несколькими операционными системами|компьютерах с несколькими операционными системами]]. Это связано с тем, что некоторые ОС переписывают существующую загрузочную запись, что делает невозможным загрузку других ОС.
=== с помощью fixmbr ===
Можно попробовать воспользоваться утилитой fixmbr из rescue-режима:
<code>fixmbr</code>
без параметров. В большинстве случаев этого достаточно — программа найдёт первый раздел, содержащий загрузчик, сделает его активным и восстановит MBR.


Восстановление старой записи в случае использования [[дистрибутивы ALT Linux|дистрибутивов ALT Linux]] состоит из следующих этапов:
=== с помощью lilo ===
Можно также воспользоваться lilo. Это не только загрузчик, но и утилита для манипулирования MBR и активными разделами. Допустим, мы знаем, что у нас загрузчик (не обязательно LILO) находится на разделе 2.


* Загрузка с [[установочный диск|установочного диска]] ALT Linux в [[режим Rescue|режиме Rescue]]. Это вариант [[LiveCD]]-загрузки без [[графическая среда|графической среды]]; предназначено для обслуживания и восстановления системы. После загрузки мы получаем терминал в [[режим root|режиме root]].
Восстанавливаем стандартный загрузчик в MBR (можно выбрать mbr или ext, последний допускает загрузку с логических разделов):
<pre>
lilo -M /dev/sda mbr
</pre>
Убираем все метки активных разделов (если единственная метка переехала или если меток стало больше одной):
<pre>
lilo -A /dev/sda 0
</pre>
Делаем активным раздел 2:
<pre>
lilo -A /dev/sda 2
</pre>


* Уточнение информации о том, на каком [[устройство|устройстве]] находится [[корневой раздел]]. Для этого можно воспользоваться утилитой [[fdisk]] (или своей памятью, или заранее заготовленными записями). Если будет обнаружено несколько [[раздел]]ов c Linux, возможно придётся проверять их подряд. Для определённости, будем считать, что корневой раздел находится на [[sdaX|/dev/sda5]]
== Восстановление основного загрузчика ==
* [[Монтирование|Монтируем]] корневой раздел с жёсткого диска к файловой системе RescueCD:
Основной загрузчик чаще всего бывает повреждён на компьютерах с несколькими операционными системами, если он расположен в MBR. Это связано с тем, что некоторые ОС переписывают содержимое MBR при установке, что делает невозможным загрузку других ОС. Следует понимать, что возврат старого загрузчика, в свою очередь, может сделать недоступной установку той самой «другой ОС». Иной способ повредить загрузчик — передвинуть разделы. Например, lilo грузит ядро и initrd, ориентируясь на абсолютное расположение файлов на носителе, заданное посекторно при установке загрузчика.
<source lang="bash">mount /dev/sda5 /mnt</source>
 
* Если есть отдельный раздел с {{path|/boot}}, монтируем его в точку {{path|/mnt/boot}}
Процесс состоит из двух этапов. Первый — это сбор дерева файловой системы в произвольной точке монтирования и выполнение команды chroot в эту точку. В результате этой операции получается рабочая (ранее недоступная) система. Надо заметить, что восстановление загрузчика — не единственное применение chroot. Второй этап — собственно работы по переустановке (с возможным переконфигурированием) нужного загрузчика, выполняемые во временно реанимированной посредством chroot системе.
<source lang="bash">mount /dev/sda1 /mnt/boot</source>
 
<!-- :(а также раздел с [[boot|/boot]] монтируем в точку /mnt/boot, если он на отдельном разделе). -->
=== Подготовка chroot ===
Загрузитесь с установочного диска ALT Linux в режиме «Rescue». После загрузки мы получаем терминал с командной оболочкой от имени суперпользователя <tt>root</tt>.
 
==== В автоматическом режиме ====
Воспользуйтесь утилитой [[mount-system]], находящейся, как и [[fixmbr]], в rescue-образе. Как и [[fixmbr]], она запускается без параметров. В случае успешного выполнения достаточно будет выполнить {{cmd|chroot}} в указанную точку монтирования (для первой обнаруженной системы это может быть {{path|/mnt/system1}}). В противном случае потребуется сделать то же самое в ручном режиме.
 
<pre>
chroot /mnt/system1
</pre>
 
==== В ручном режиме ====
Ручная подготовка chroot состоит из следующих этапов:
 
* Уточняем информацию о том, на каком устройстве находится корневой раздел. Для этого можно воспользоваться утилитой [[fdisk]] (или своей памятью, или заранее заготовленными записями). Если будет обнаружено несколько разделов c Linux, возможно, придётся проверять их подряд. Для определённости будем считать, что корневой раздел находится на {{path|/dev/sda1}}
* Монтируем корневой раздел с жёсткого диска к файловой системе RescueCD:
<source lang="bash">mount /dev/sda1 /mnt</source>
* Убеждаемся, что смонтировали действительно тот раздел
* Убеждаемся, что смонтировали действительно тот раздел
<source lang="bash">ls /mnt/</source> и т.п.)
<source lang="bash">ls /mnt/</source>
* Монтируем [[виртуальные ФС]] для использования их при работе с жёстким диском:
* Монтируем виртуальные ФС (потребуются для установки загрузчика либо иных задач по прямой работе с диском):
<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>
* Восстанавливаем загрузчик, предварительно подкорректировав, если это необходимо, файл {{path|/etc/lilo.conf}}
{{note|Дальнейшие операции будут выполняться относительно нового корня и будут требовать как минимум наличие {{path|/dev}}, про который было написано ранее}}
* Если есть отдельный раздел с {{path|/boot}}, монтируем его в точку {{path|/boot}}
<source lang="bash">mount /dev/sda2 /boot</source>
* Вместо предыдущего пункта можно использовать
mount -a
это смонтирует все ФС, которые описаны в {{path|/etc/fstab}}, включая отдельный {{path|/boot}}
 
=== Восстановление ===
 
==== lilo ====
Восстановление lilo, как правило, сводится к запуску команды {{cmd|lilo}} без параметров (иногда требуется предварительная правка файла {{path|/etc/lilo.conf}}):
<source lang="bash">/sbin/lilo</source>
 
==== [[grub]] ====
После того как проведены подготовительные действия и сделан сhroot, необходимо перегенерировать конфиг grub:
<source lang="bash">
<source lang="bash">
cd /sbin
grub-mkconfig -o /boot/grub/grub.cfg
./lilo</source>
</source>


===Замечание===
после чего, если используется обычный BIOS-режим, следует заново установить GRUB в MBR:


Если при переустановке Windows вы еще и переразбили диск (удаляли/объединяли разделы с Windows), то избежать редактирования <source lang="bash">lilo.conf</source> вам не удастся :).
<source lang="bash">
например, у вас был раздел sda3 с виндой, а стал раздел 1, то надо заменить
grub-install /dev/sda # заменить /dev/sda на то устройство, куда хочется установить GRUB
</source>
 
если же используется EFI-режим, может потребоваться восстановить загрузчик в ESP-разделе (EFI System Partition), который монтируется в {{path|/boot/efi}}:


<source lang="bash">
<source lang="bash">
mount -a # достаточно смонтировать точку монтирования /boot/efi
grub-efi-autoupdate
</source>
Загрузчик [[grub]] обладает очень широкими возможностями. Вероятно, нелишним будет [[grub|почитать про него]] предварительно.
== Замечания ==
=== Если изменилась таблица разделов ===
Если проблемы с загрузчиком — результат перемещения/объединения разделов, то до непосредственного восстановления загрузчика потребуется скорректировать настройки загрузчика. Кроме этого, надо будет поправить {{path|/etc/fstab}} (для него порядок исправления неважен).
Пример для LILO (для [[grub|GRUB]] смотреть в его описании).
Предположим, у вас был раздел sda3 с Windows, а стал раздел 1. В {{path|/etc/lilo.conf}} надо заменить
<pre>
other="/dev/disk/by-id/ata-SAMSUNG_HM160HI_S14QJF0Q772514-part3"
other="/dev/disk/by-id/ata-SAMSUNG_HM160HI_S14QJF0Q772514-part3"
         label="Windows1"
         label="Windows1"
</source>
</pre>


на
на


<source lang="bash">
<pre>
other="/dev/disk/by-id/ata-SAMSUNG_HM160HI_S14QJF0Q772514-part1"
other="/dev/disk/by-id/ata-SAMSUNG_HM160HI_S14QJF0Q772514-part1"
         label="Windows1"
         label="Windows1"
</source>
</pre>
 
И соответственно убрать/поправить в {{path|/etc/fstab}} строчку вида
<pre>
/dev/sda3   /mnt/sda3       ntfs-3g locale=ru_RU.UTF-8,dmask=0,fmask=0111 0 0
</pre>
 
Если у Вас в конфигурации загрузчика и в fstab используются UUID, то для изменённых разделов, новые UUID можно посмотреть командой {{cmd|blkid}}. Не забудьте про параметр ядра resume, где указывается раздел swap.
 
=== Если нужны изменения в initrd ===
Непосредственно к восстановлению загрузочной записи это не относится, но может иметь отношение к процессу загрузки при замене контроллера HDD или иных проблемах, требующих изменений в initrd. В ALT Linux, начиная с дистрибутивов, основанных на [[branches|ветках]] p5/5.1, используется утилита [[make-initrd]]. Вам следует узнать, какое ядро установлено по умолчанию (смотреть в конфигурации загрузчика), и пересобрать соответствующий initrd до выполнения пункта «Восстановление загрузчика». В большинстве случаев будет достаточно простого запуска make-initrd с указанием версии ядра, так как состав модулей будет определён автоматически исходя из загруженных на данный момент. Если это не поможет, придётся изучить make-initrd более подробно.
 
Пример:
<pre>
# 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
</pre>
В примере видны наборы модулей для четырёх ядер. Допустим, по-умолчанию используется 3.16.6-un-def-alt1. Команда на пересборку будет выглядеть так:
<pre>
# make-initrd --kernel=3.16.6-un-def-alt1
</pre>


И соответственно убрать из <source lang="bash">/etc/fstab</source> строчку типа
В случае Lilo надо обновить конфигурацию загрузчика (просто запустить lilo), так как Lilo обращается к информации в initrd минуя файловую систему и должен знать о расположении данных на HDD, а при пересоздании файла его расположение практически всегда меняется.
<source lang="bash">
UUID=34C635F2C635B4C8   /mnt/sda3       ntfs-3g locale=ru_RU.UTF-8,dmask=0,fmask=0111 0 0
</source>


===Ручное восстановление загрузчика [[grub]]===
{{Category navigation|title=Восстановление|category=Rescue|sortkey={{SUBPAGENAME}}}}

Текущая версия от 21:14, 7 октября 2024

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

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

DOS Partition Table

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

GPT

надо описать отличия от DOS PT и, возможно, упомянуть отличия BIOS от UEFI, где команда fixmbr неприменима

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

Действия, описанные в разделе «Восстановление загрузки при повреждении MBR», можно сделать из любой ОС любыми имеющимися там средствами. Для действий, описанных в разделе «Подготовка к восстановлению основного загрузчика» и далее требуется любой LiveCD с Linux, соответствующий по архитектуре установленной на восстанавливаемой системе (но x86_64 может быть применён для i586). Во многих образах 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 (можно выбрать mbr или ext, последний допускает загрузку с логических разделов):

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 в указанную точку монтирования (для первой обнаруженной системы это может быть /mnt/system1). В противном случае потребуется сделать то же самое в ручном режиме.

chroot /mnt/system1

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

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

  • Уточняем информацию о том, на каком устройстве находится корневой раздел. Для этого можно воспользоваться утилитой fdisk (или своей памятью, или заранее заготовленными записями). Если будет обнаружено несколько разделов c Linux, возможно, придётся проверять их подряд. Для определённости будем считать, что корневой раздел находится на /dev/sda1
  • Монтируем корневой раздел с жёсткого диска к файловой системе RescueCD:
mount /dev/sda1 /mnt
  • Убеждаемся, что смонтировали действительно тот раздел
ls /mnt/
  • Монтируем виртуальные ФС (потребуются для установки загрузчика либо иных задач по прямой работе с диском):
mount --bind /proc /mnt/proc
mount --bind /dev  /mnt/dev
mount --bind /sys  /mnt/sys
  • Выполняем chroot в собранную ФС:
chroot /mnt
Примечание: Дальнейшие операции будут выполняться относительно нового корня и будут требовать как минимум наличие /dev, про который было написано ранее
  • Если есть отдельный раздел с /boot, монтируем его в точку /boot
mount /dev/sda2 /boot
  • Вместо предыдущего пункта можно использовать
mount -a

это смонтирует все ФС, которые описаны в /etc/fstab, включая отдельный /boot

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

lilo

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

/sbin/lilo

grub

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

grub-mkconfig -o /boot/grub/grub.cfg

после чего, если используется обычный BIOS-режим, следует заново установить GRUB в MBR:

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

если же используется EFI-режим, может потребоваться восстановить загрузчик в ESP-разделе (EFI System Partition), который монтируется в /boot/efi:

mount -a # достаточно смонтировать точку монтирования /boot/efi
grub-efi-autoupdate

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

Замечания

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

Если проблемы с загрузчиком — результат перемещения/объединения разделов, то до непосредственного восстановления загрузчика потребуется скорректировать настройки загрузчика. Кроме этого, надо будет поправить /etc/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

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

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

В случае Lilo надо обновить конфигурацию загрузчика (просто запустить lilo), так как Lilo обращается к информации в initrd минуя файловую систему и должен знать о расположении данных на HDD, а при пересоздании файла его расположение практически всегда меняется.