Бывают ситуации, когда требуется восстановить работоспособность загрузчика GRUB. Например - установка Windows на диск, где уже был установлен Linux, после которой область MBR диска оказалась перезаписана инсталлятором Windows, или случайное удаление области MBR какой-нибудь программой.

В этой статье будут описаны методы восстановления работоспособности загрузчика GRUB в дистрибутивах Linux.

Ситуация 1. Восстановление после установки Windows

Дано: Компьютер с двумя SATA-винчестерами. На первом стоит Linux (загрузчик - GRUB), на втором хотели установить Windows, но не получилось. Система Linux перестала загружаться: после начальной загрузки компьютера выдаётся сообщение "Error loading operation system" или просто пустой чёрный экран. На этом процесс останавливается.
Решение:
Ситуация типичная для всех пользователей, кто начинает осваивать Linux. Главное - не паниковать! Если раздел диска, где установлена операционная система Linux, не был случайно удалён, то восстановить работоспособность grub можно следующим образом:

Шаг 1. Загрузка с установочного диска или флешки

Нужно загрузиться с установочного диска или флешки, с которого производилась установка Linux.

note В принцие можно использовать и другой LiveCD-дистрибутив, но предпочтительнее это делать с помощью дистрибутива Knoppix или родного установочного диска, с помощью которого Linux устанавливалась на компьютер.

Если это дистрибутив без версии LiveCD, например Debian Etch, то следует начать процесс установки, но остановиться на моменте, когда инсталлятор спрашивает о разбивке диска и отменить процесс. Затем можно перейти в соседнюю консоль по Alt+F2, Alt+F3 и тд. и там работать.

Шаг 2. Монтирование разделов с диска, где стоит операционная система

Нужно подмонтировать к текущей файловой системе, корневой "/" раздел Linux, находящийся на первом диске.

 # mount -t ext3 /dev/sda1 /mnt

Если разделы "/boot" вынесен в отдельный раздел, его также нужно подмонтировать именно в ту точку, куда он монтируется в оригинальной системе. Например корневой раздел "/" располагается в первом разделе первого диска - sda1 , а /boot располагается во втором разделе первого диска - sda2:

 # mount -t ext3 /dev/sda1 /mnt        # примонтировали корневой раздел в /mnt
 # mount -t ext3 /dev/sda2 /mnt/boot   # примонтировали раздел /boot в /mnt/boot

Шаг 3. Сбор информации

Выясняем номер активного раздела, с которого идёт загрузка. Это можно сделать прочитав командой 'cat' конфигурационный файл grub`а 'menu.lst' . Обычно он располагается в каталоге /boot/grub/
Пример:

$ cat /boot/grub/menu.lst

# Config file for GRUB - The GNU GRand Unified Bootloader
# /boot/grub/menu.lst

# DEVICE NAME CONVERSIONS 
#
#  Linux           Grub
# -------------------------
#  /dev/fd0        (fd0)
#  /dev/sda        (hd0)
#  /dev/sdb2       (hd1,1)
#  /dev/sda3       (hd0,2)
#

#  FRAMEBUFFER RESOLUTION SETTINGS
#     +-------------------------------------------------+
#          | 640x480    800x600    1024x768   1280x1024
#      ----+--------------------------------------------
#      256 | 0x301=769  0x303=771  0x305=773   0x307=775
#      32K | 0x310=784  0x313=787  0x316=790   0x319=793
#      64K | 0x311=785  0x314=788  0x317=791   0x31A=794
#      16M | 0x312=786  0x315=789  0x318=792   0x31B=795
#     +-------------------------------------------------+
#  for more details and different resolutions see
#  http://wiki.archlinux.org/index.php/GRUB#Framebuffer_Resolution 

# general configuration:
timeout   5
default   0
color light-blue/black light-cyan/blue

# boot sections follow
# each is implicitly numbered from 0 in the order of appearance below
#
# TIP: If you want a 1024x768 framebuffer, add "vga=773" to your kernel line.
#
#-*

# (0) Arch Linux
title  Arch Linux
root   (hd0,1)
kernel /vmlinuz26 root=/dev/sda1 ro
initrd /kernel26.img

# (1) Arch Linux
title  Arch Linux Fallback
root   (hd0,1)
kernel /vmlinuz26 root=/dev/sda1 ro
initrd /kernel26-fallback.img

# (2) Windows
#title Windows
#rootnoverify (hd0,0)
#makeactive
#chainloader +1

Строка root (hd0,1) - говорит о том, что раздел /boot - располагается на втором по счёту разделе нулевого (счёт начинается с нуля) диска. Иными, не программистскими словами - "второй раздел первого диска". Запоминаем или записываем параметр (hd0,1).

В большинстве случаев, у пользователей, /boot не располагается на отдельном разделе, а находится в корне, в каталоге "/boot" поэтому вместо (hd0,1) будет (hd0,0) - нулевой раздел нулевого диска.

Шаг 4. Переконфигурация GRUB

Переходим в примотированный корневой каталог

 # cd /mnt

Вводим в консоли:

 # grub

Программа выдаст приглашение такого вида:

 grub> 

Теперь нужно ввести:

 grub> root (hd0,1)  
 grub> setup (hd0)

, где (hd0,1) - ваш параметр, взятый из файла menu.lst . (hd0) - обычно берётся из (hd0,1) до запятой.
Затем выходим из grub и перезагружаем компьютер:

 grub> quit
 # reboot

Вот как выглядит этот шаг для системы Arch Linux загруженной с диска:

[user@comp ~]$ grub

 GNU GRUB  version 0.97 (640K lower /3072 upper memory)
[Minimal Bash-like line editind is supported. For the first word, TAB \\ 
lists possible command completions. Anywhere else TAB lists the possible \\
completions of device/filename. ]

grub> root (hd0,1)
 Filesystem type is ext2fs, partition type 0x83

grub> setup (hd0)
 Checking if "/boot/grub/stage1" exist... no
 Checking if "/grub/stage1" exist... yes
 Checking if "/grub/stage2" exist... yes
 Checking if "/grub/e2fs_stage1_5" exist... yes
 Running "embed /grub/e2fs_stage1_5 (hd0)"... 16 sectors are embedded.
successed
 Running "install /grub/stage1 (hd0) (hd0)1+16 p (hd0,1)/grub/stage2 /grub/menu.lst"... successed
Done.

grub> quit

[user@comp ~]$ reboot

После перезагрузки компьютера должно появиться стандартное меню GRUB. Если загрузка не прошла, повторите все шаги, проверив параметр hd.

Смотрите также

Печать/экспорт