Восстановление загрузочной записи
Материал из ALT Linux Wiki
Asy (обсуждение | вклад) (→Подготовка к восстановлению загрузчика: добавлено про mount-system) |
Asy (обсуждение | вклад) (→Если нужны изменения в initrd: добавил про обязательный запуск lilo после изменения initrd) |
||
(20 промежуточных версий не показаны.) | |||
Строка 1: | Строка 1: | ||
- | |||
- | |||
- | |||
{{stub}} | {{stub}} | ||
- | == | + | == Немного теории == |
+ | === DOS Partition Table === | ||
+ | Загрузчик ОС может находиться как в Master Boot Record ([[ruwp:MBR|MBR]]), так и в boot record раздела. Если загрузчик находится в BR раздела, этот раздел должен быть помечен как активный, а в MBR должен находиться стандартный загрузчик, который находит активный раздел и запускает следующий загрузчик оттуда. | ||
- | + | === GPT === | |
- | + | ''надо описать отличия от DOS PT и, возможно, упомянуть отличия BIOS от [[UEFI]], где команда {{cmd|fixmbr}} неприменима'' | |
- | + | ||
- | == | + | === Рекомендуемые средства === |
- | + | Действия, описанные в разделе «Восстановление загрузки при повреждении MBR», можно сделать из любой ОС любыми имеющимися там средствами. Для действий, описанных в разделе «Подготовка к восстановлению основного загрузчика» и далее требуется любой LiveCD с Linux, соответствующий по архитектуре установленной на восстанавливаемой системе (но x86_64 может быть применён для i586). Во многих образах ALT Linux присутствует возможность загрузиться в режиме восстановления (rescue). Как правило, в этих образах присутствуют две полезные утилиты — {{cmd|fixmbr}} и {{cmd|mount-system}}. Кроме того, существует специализированный LiveCD [[Rescue|ALT Linux Rescue]]. | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | Восстановление | + | == Восстановление загрузки при повреждении MBR == |
+ | Если основной загрузчик располагался в BR и не был повреждён, а проблема только с MBR и/или сбиты настройки активного раздела, исправить это можно с помощью fixmbr или lilo. Если же повреждён основной загрузчик, можно переходить сразу к пункту «Восстановление основного загрузчика». | ||
- | + | === с помощью fixmbr === | |
+ | Можно попробовать воспользоваться утилитой fixmbr из rescue-режима: | ||
+ | <code>fixmbr</code> | ||
+ | без параметров. В большинстве случаев этого достаточно — программа найдёт первый раздел, содержащий загрузчик, сделает его активным и восстановит MBR. | ||
- | + | === с помощью lilo === | |
- | * | + | Можно также воспользоваться lilo. Это не только загрузчик, но и утилита для манипулирования MBR и активными разделами. Допустим, мы знаем, что у нас загрузчик (не обязательно LILO) находится на разделе 2. |
+ | |||
+ | Восстановливаем стандартный загрузчик в MBR: | ||
+ | <pre> | ||
+ | lilo -M /dev/sda mbr | ||
+ | </pre> | ||
+ | Убираем все метки активных разделов (если единственная метка переехала или если меток стало больше одной): | ||
+ | <pre> | ||
+ | lilo -A /dev/sda 0 | ||
+ | </pre> | ||
+ | Делаем активным раздел 2: | ||
+ | <pre> | ||
+ | lilo -A /dev/sda 2 | ||
+ | </pre> | ||
+ | |||
+ | == Восстановление основного загрузчика == | ||
+ | Основной загрузчик чаще всего бывает повреждён на компьютерах с несколькими операционными системами, если он расположен в MBR. Это связано с тем, что некоторые ОС переписывают содержимое MBR при установке, что делает невозможным загрузку других ОС. Следует понимать, что возврат старого загрузчика, в свою очередь, может сделать недоступной установку той самой «другой ОС». Иной способ повредить загрузчик — передвинуть разделы. Например, lilo грузит ядро и initrd, ориентируясь на абсолютное расположение файлов на носителе, заданное посекторно при установке загрузчика. | ||
+ | |||
+ | Процесс состоит из двух этапов. Первый — это сбор дерева файловой системы в произвольной точке монтирования и выполнение команды chroot в эту точку. В результате этой операции получается рабочая (ранее недоступная) система. Надо заметить, что восстановление загрузчика — не единственное применение chroot. Второй этап — собственно работы по переустановке (с возможным переконфигурированием) нужного загрузчика, выполняемые во временно реанимированной посредством chroot системе. | ||
+ | |||
+ | === Подготовка 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/sda5}} | ||
+ | * Монтируем корневой раздел с жёсткого диска к файловой системе 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> | ||
- | |||
* Убеждаемся, что смонтировали действительно тот раздел | * Убеждаемся, что смонтировали действительно тот раздел | ||
- | <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, как правило, сводится к запуску команды {{cmd|lilo}} без параметров (иногда требуется предварительная правка файла {{path|/etc/lilo.conf}}): | ||
+ | <source lang="bash">/sbin/lilo</source> | ||
+ | |||
+ | ==== [[grub]] ==== | ||
+ | После того как проведены подготовительные действия и сделан сhroot, необходимо перегенерировать конфиг grub: | ||
<source lang="bash"> | <source lang="bash"> | ||
- | + | grub-mkconfig -o /boot/grub/grub.cfg | |
- | + | </source> | |
- | + | ||
- | + | после чего, если используется обычный BIOS-режим, следует заново установить GRUB в MBR: | |
+ | |||
<source lang="bash"> | <source lang="bash"> | ||
grub-install /dev/sda # заменить /dev/sda на то устройство, куда хочется установить GRUB | grub-install /dev/sda # заменить /dev/sda на то устройство, куда хочется установить GRUB | ||
- | + | </source> | |
+ | |||
+ | если же используется EFI-режим, может потребоваться восстановить загрузчик в ESP-разделе (EFI System Partition), который монтируется в {{path|/boot/efi}}: | ||
+ | |||
+ | <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}} надо заменить | |
- | Предположим, у вас был раздел sda3 с Windows, а стал раздел 1. В /etc/lilo.conf надо заменить | + | |
<pre> | <pre> | ||
Строка 71: | Строка 118: | ||
</pre> | </pre> | ||
- | И соответственно убрать/поправить в /etc/fstab строчку вида | + | И соответственно убрать/поправить в {{path|/etc/fstab}} строчку вида |
<pre> | <pre> | ||
/dev/sda3 /mnt/sda3 ntfs-3g locale=ru_RU.UTF-8,dmask=0,fmask=0111 0 0 | /dev/sda3 /mnt/sda3 ntfs-3g locale=ru_RU.UTF-8,dmask=0,fmask=0111 0 0 | ||
</pre> | </pre> | ||
- | Если у Вас в конфигурации загрузчика и в fstab используются UUID, то | + | Если у Вас в конфигурации загрузчика и в fstab используются UUID, то для изменённых разделов, новые UUID можно посмотреть командой {{cmd|blkid}}. Не забудьте про параметр ядра resume, где указывается раздел swap. |
- | ===Если нужны изменения в initrd=== | + | === Если нужны изменения в initrd === |
- | Непосредственно к восстановлению загрузочной записи это не относится, но может иметь отношение к процессу загрузки при замене контроллера HDD или иных проблемах, требующих изменений в initrd. В ALT Linux, начиная с дистрибутивов, основанных на ветках p5/5.1, используется утилита [[ | + | Непосредственно к восстановлению загрузочной записи это не относится, но может иметь отношение к процессу загрузки при замене контроллера HDD или иных проблемах, требующих изменений в initrd. В ALT Linux, начиная с дистрибутивов, основанных на [[branches|ветках]] p5/5.1, используется утилита [[make-initrd]]. Вам следует узнать, какое ядро установлено по умолчанию (смотреть в конфигурации загрузчика), и пересобрать соответствующий initrd до выполнения пункта «Восстановление загрузчика». В большинстве случаев будет достаточно простого запуска make-initrd с указанием версии ядра, так как состав модулей будет определён автоматически исходя из загруженных на данный момент. Если это не поможет, придётся изучить make-initrd более подробно. |
Пример: | Пример: | ||
Строка 89: | Строка 136: | ||
/lib/modules/3.4.96-led-ws-alt0.M70P.1 | /lib/modules/3.4.96-led-ws-alt0.M70P.1 | ||
</pre> | </pre> | ||
- | В примере | + | В примере видны наборы модулей для четырёх ядер. Допустим, по-умолчанию используется 3.16.6-un-def-alt1. Команда на пересборку будет выглядеть так: |
<pre> | <pre> | ||
# make-initrd --kernel=3.16.6-un-def-alt1 | # make-initrd --kernel=3.16.6-un-def-alt1 | ||
</pre> | </pre> | ||
+ | |||
+ | В случае Lilo надо обновить конфигурацию загрузчика (просто запустить lilo), так как Lilo обращается к информации в initrd минуя файловую систему и должен знать о расположении данных на HDD, а при пересоздании файла его расположение практически всегда меняется. | ||
+ | |||
+ | {{Category navigation|title=Восстановление|category=Rescue|sortkey={{SUBPAGENAME}}}} |
Текущая версия на 12:20, 24 ноября 2016
Содержание |
Немного теории
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:
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/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:
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, а при пересоздании файла его расположение практически всегда меняется.