пятница, 14 мая 2010 г.

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

Небольшая предыстория...
У меня имеется 2 жестких диска: 1 на 40Gb выделен под две системы - Ubuntu и Windows, 2 на 80Gb под данные для двух систем.
Существовали две системы(Windows XP и Ubuntu 9.10) нормально пока я не решил обновить Ubuntu до версии 10.04... При обновлении новый загрузчик Grub спросил меня какой раздел загрузочный и куда ему установиться и соответственно предложил при незнании этого устанавливать его на все разделы, что я и сделал. После обновления Grub видел только последнее ядро линукса(винду уже не видел), но и линукс не работал так как хотелось бы - монитор при загрузке переключался в режим нерабочих частот. Я решил не запариваться и переставить Ubuntu заново, тем более я давно уже собирался это сделать. При установке Ubuntu 9.10(есть только этот диск) я решил разбить файловую систему по-новому, не трогая виндовые разделы.
Соответственно новая иерархия была таковой:
sda(40Gb):
  • sda1 21Gb NTFS - Установлена Windows(диск C:)
  • sda2 17Gb Ext4 - Установлена Ubuntu(точка монтирования / )
  • sda3 1Gb swap - Соответственно область подкачки
  • sda4 100mb Ext3 - Загрузочный раздел(точка монтирования /boot)
sdb(80Gb):
  • sdb1 40Gb Ext4 - Раздел для данных(точка монтирования /home)
  • sdb2 40Gb NTFS - Раздел для данных Windows(диск D:)
Благополучно установив 9.10 и обновив ее до 10.04, я принялся возвращать в Grub винду. Выполнив в терминале команду sudo update-grub, я увидел что все определилось и записалось в /boot/grub/grub.cfg. Однако при перезагрузке и выборе в загрузчике винды ничего не происходило - выкидывало обратно в меню загрузчика. Так я понял, что затерся виндовский загрузчик...
Взяв загрузочный диск Windows XP, я стал восстанавливать эти косяки, однако это привело к еще большим косякам - накрылся sda4(слетела файловая система). Недолго думая я его форматнул обратно в Ext3. Теперь у меня не грузилось вообще ничего кроме LiveCD с убунтой 9.10...
Теперь приступим к действиям по восстановлению двух систем!
  1. Для начала я загрузился с LiveCD Ubuntu 9.10 и через GParted(Система-Параметры-GParted) установил флаг boot(правый клик по разделу-manage flags) на sda1
  2. Загрузился с загрузочного диска Windows XP и зашел в консоль восстановления. Через нее восстановил загрузчик Windows на раздел sda1(диск C:), последовательно набрав команды bootfix и mbrfix(не знаю насколько важна последовательность команд, я сделал вроде в таком порядке и все заработало в итоге). После данных действий и перезагрузки у меня стала загружаться винда.
  3. Далее я опять загрузился с LiveCD и начал восстанавливать удаленные Grub и ядро линукса.
    • монтируем раздел с установленной убунтой: sudo mount /dev/sda2 /mnt
    • монтируем загрузочный раздел: sudo mount /dev/sda4 /mnt/boot (возможно сначала придется создать директорию /boot командой sudo mkdir /mnt/boot)
    • монтируем диски: sudo mount --bind /dev/ /mnt/dev
    • монтируем proc: sudo mount --bind /proc/ /mnt/proc
    • теперь зайдем в примонтированную систему как root: sudo chroot /mnt
    • переустанавливаем GRUB2: grub-install /dev/sda (если выдало какую-то ошибку, то попробуйте команду grub-install --recheck /dev/sda)
    • переустанавливаем ядро: aptitude reinstall linux-image-2.6.32-21-generic (у вас может быть другая версия ядра - ищите командой aptitude search generic и пробуйте)
    • обновляем grub: update-grub (тут по идее должно все найтись - и винда и переустановленное ядро линукса)
    • выходим из chroot: exit
    • отмонтируем разделы:
    • sudo umount /mnt/proc
    • sudo umount /mnt/dev
    • sudo umount /mnt/boot
    • sudo umount /mnt

  4. Тут я перезагрузил комп и увидел меню Grub со списком всех установленных у меня систем. Все они загружались и загружаются до сих пор :)