среда, 27 февраля 2013 г.

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

Все чаще и чаще на форумах возникают вопросы:
Как удалить Ubuntu и восстановить загрузчик для Windows?
Как заменить grub на загрузчик Windows?
Установка Ubuntu рядом с Windows 8?
Ubuntu рядом с Win 8, загрузчик Windows не видит Ubuntu.
В связи с этим, решил написать заметку, о восстановлении загрузчика grub, о том, как нужно правильно удалять linux, восстанавливать загрузчик Windows и MBR.


1 способ. У нас есть live-cd/usb с дистрибутивом Linux.

1. Записываем live-cd, live-usb практически любого дистрибутива linux, будь то ubuntu, mint или еще что-то там.

2. Загружаемся с live-cd/usb, открываем терминал (Ctrl+T) и смотрим таблицу разделов диска:
$ sudo fdisk -l

Помимо fdisk, еще существует много различных утилит для просмотра и редактирования таблицы разделов: gparted, cfdisk например.

По таблице видно, что linux установлен на разделе /dev/sda1, напротив него стоит звездочка, это признак того, что раздел загрузочный.

3. Теперь этот раздел нужно смонтировать:
$ sudo mount /dev/sda1 /mnt

4. Раздел смонтирован, следовательно мы имеем доступ к нему. 
Сейчас нам нужно восстановить MBR
Для этого нужно установить grub на жесткий диск (НО НЕ НА РАЗДЕЛ ЖЕСТКОГО ДИСКА!), так как мы восстанавливаем MBR:
$ sudo grub-install --root-directory=/mnt /dev/sda
где /mnt — это рутовый каталог, который мы смонтировали, /dev/sda — имя жесткого диска.
После этого MBR восстановлен, grub установлен.

Ситуация:
у вас на машине стоит три системы например: Windows 7 Ultimate, Windows XP Professional и Linux Mint 14.
Windows вам надоела, вы ее снесли и по каким-либо причинам, в списке grub'а остались разделы Windows. 
Если случилась такая ситуация, то необходимо сгенерировать новый конфигурационный файл загрузчика. Он заново просканирует систему, определит установленные операционные системы на компьютере и сгенерирует конфиг с новыми параметрами меню загрузчика.

1. В консоли пишем:
$ sudo update-grub --output=/mnt/boot/grub/grub.cfg
где update-grub — обновляет конфиг загрузчика, параметр --output указывает на файл конфигурации grub'а.

2. После проделанных операций, можно перезагрузиться и загрузиться с жесткого диска (естественно заходим в BIOS).
Ну и все собственно.
Вот например как выглядит мое меню grub'а, установлен только Debian:

Второй способ, в этом случаем используем окружение chroot.

1. Опять же, загружаемся с live-cd/usb, смотрим разделы:
$ sudo fdisk -l

2. Монтируем раздел, на котором установлен linux и еще некоторые важные для работы разделы:
$ sudo mount /dev/sda1 /mnt
$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys /mnt/sys


!!! Если раздел /boot на отдельном разделе диска, то его тоже нужно примонтировать, например:
$ sudo mount --bind /boot /mnt/boot

3. Скопируем дефолтный файл grub'а (этот шаг можно пропустить):
$ sudo cp /etc/resolv.conf /mnt/etc/resolv.conf

4. Теперь нужно перейти в среду chroot:
$ sudo chroot /mnt

5. Устанавливаем grub:
# grub-install /dev/sda

Если возникла ошибка, поможет команда:
# grub-install --recheck /dev/sda

6. Выходим из chroot, отмонтируем разделы и перезагружаемся:
# exit
$ sudo umount /mnt /dev
$ sudo umount /mnt/proc
$ sudo umount /mnt
$ sudo umount /mnt/boot #если требуется
$ sudo reboot


Ситуация:
у вас нет второго компьютера чтобы записать live-cd/usb, соотвественно нужно как-то выкручивать (у самого была такая ситуация после экспериментальной установки windows 8).

Передо мной лишь черный экран и :
grub>

Это восстановление наиболее сложное (Rescue Mode), но если делать по инструкции, все должно пройти нормально.
В rescue mode доступно всего четыре команды:
ls
set
unset
insmod

1. Нам нужно посмотреть, какие разделы видит наш grub:
> ls
появится что-то типа:
(hd0) (hd0,msdos2) (hd0,msdos1) (hd1) (hd1,msdos2) (hd1,msdos1)

2. Кое-как криво Rescue Grub нам вывел разделы диска, якобы с файловой системой msdos.
Но это не важно.
Счет дисков у grub начинается с нуля, а разделов - с единицы.
По нашему выводу можно определить, что на первом диске у нас два раздела и на втором тоже два.
Экспериментальным путем угадывания будем определять, где же находится наш установленный linux.

3. Допустим раздел (hd0,1) — это именно то что нам нужно (приставку msdos можно опустить).
Пишем:
> set prefix=(hd0,1) /boot/grub
> set root=(hd0,1)

Таким образом мы получаем доступ к диску.

4. Пишем команду:
> ls /boot/grub
если будет какой-то вывод файлов, то все получилось, если же ничего нет, то мы промахнулись разделом, нужно смотреть другие, например (hd1,0).

5. Теперь пишем:
> insmod ext2
> insmod normal
> normal


6. После этого загружается grub, определяет операционные системы и практически восстановление завершено.

7. Загружаем linux, в терминале пишем:
$ sudo grub install /dev/sda

Все. grub прописывается в MBR и дальнейших проблем возникать не должно.

Ситуация:
нам надоело закапывать красные глаза из-за linux и мы решили вернуться на Windows. 
Windows предварительно у нас установлена, мы с нее загружаемся, и с помощью Acronis Disk Director или еще какой-нибудь программы сносим разделы Linux. 
С огромной радостью перезагружаемся, да не тут-то было, linux мы удалили, а grub — нет (ведь он установлен на сам диск, а не на его раздел). Что делать?

1. Записываем установочный диск/флешку (например с Windows XP).

2. Загружаемся с диска/флешки:
Если увидели это:

не надо нажимать F2, это не то, это автоматическое восстановление, а нам нужно ручное.

3. Немного подождав появляется такое:

Нажимаем R, попадаем консоль восстановления.

4. Нам предлагают выбрать копию Windows, которую нужно восстановить:

5. Вводим пароль админа:

6. Вот собственно консоль восстановления:

7. Вводим команду:
fixmbr
соглашаемся со всем что он от нас хочет, эта команда восстанавливает MBR.

8. Пишем:
fixboot
эта команда, записывает новый загрузочный сектор.

9. Выходим из консоли восстановления:
exit

10. Перезагружаемся.

Ситуация.
если же под рукой не XP, а Windows 7, то делаем то же самое, но вводить не 
fixmbr 
и 
fixboot
а 
bootrec /fixmbr 
и 
bootrec /fixboot 
соответственно, ибо на семерке нет утилит fixmbr и fixboot.

За скриншоты Windows спасибо http://www.ubuntologia.ru/grub-mbr-windows.

Ссылки:

7 комментариев:

Unknown комментирует...

Спасибо, завтра буду пробовать. У меня последняя ситуация - удалил раздел с андроидом и теперь винда 8.1 не грузится.
Хотел сделать загрузочную флешку прямо с планшета, но не смог т.к. нету root, а drivedroid его требует.
Это мне нужно делать флешку с виндовс 8 или можно хр?
Ещё есть вариант загрузить по lan PXE убунту, у провайдера есть такое.

Unknown комментирует...

Блин, спасибо огромное!!!! Весь день потратил на поиски, а оказалось всё очень просто! Восстановился по первому способу. Теперь у меня есть и убунту и семёрка!

Amet13 комментирует...

Рад был помочь!

max комментирует...

Господи как я ненавижу этот Linux этот поганый загрузчик grub!

Amet13 комментирует...

На самом деле там все логично и очень кастомизировано, в отличии от того же виндового загрузчика.

Unknown комментирует...

Не помогло. По-прежнему ошибка загрузки Grub

Unknown комментирует...

полное говнище этот линукс