Oh Shi! Или я зачем-то поставил Windows поверх моего любимого Linux'а...
И правда, зачем? Ну это больше риторический вопрос.
Очень часто, у начинающих пользователей ОС Linux возникает необходимость например переставить первую ос на компьютере по той причине, что она отказывается работать (Начинающие как правило держат WinXP и Ubuntu\Kubuntu. Это самый распространенный "набор"). И тут проблема: установщик windows стирает наш горячо любимый grub и меняет на свой. Так как предполагаемый человек новичок, то вероятнее всего он поставит Linux снова, потеряв все настройки. Ибо другого варианта он не знает. Это кстати зря, всего лишь парочка магических легких команд, и старый добрый загрузчик на месте и ничего не надо переустанавливать =]
И так, нам понадобятся загрузочный livecd с дистрибутивом linux (например gentoo или archlinux подойдут как нельзя лучше, но и обычный livecd Ubuntu подойдет тоже), немного терпения и желания =]
Внимание:Все что описано ниже, поможет только если у вас Grub первых версий. Т.е. если у вас допустим была установлена Ubuntu 9.10 с нуля, то у вас вероятнее всего Grub 2.0, и это небольшое how-to, вам не подойдет.
Грузимся с livecd и пишем cfdisk /dev/sda
(у вас может отличается. Например hda если старое ядро) и смотрим, и хорошо запоминаем разбиение диска. Предположим так:
/dev/sda1 - ntfs раздел с Windows
/dev/sda2 - ext2 с /boot
/dev/sda3 - ext3 на корневой раздел
Запомнили? Отлично. Примонтируем разделы:
mount /dev/sda3 /mnt/
mount /dev/sda2 /mnt/boot
mount -t proc /proc /mnt/proc
mount -o bind /dev/ /mnt/dev/
Войдем в свою систему:
chroot /mnt/ /bin/bash
Все. Мы в своей родной системе. Осталось восстановить загрузчик. На всякий случай, еще надо добавить инфу о подключенных файловых системах в /etc/mtab
:
grep -v rootfs /proc/mounts > /etc/mtab
Необходимо отредактировать /boot/grub/grub.conf
в данном случае он будет выглядеть так:
default 0
timeout 30
title Linux
root (hd0,1)
kernel /boot/kernel-x86-2.6.31root=/dev/ram0 real_root=/dev/sda3
initrd /boot/initramfs-x86-2.6.31
title Windows
rootnoverify (hd0,0)
makeactive
chainloader +1
Немного объяснений: грубу нужен именно раздел, на котором находятся загрузочные файлы. Т.е. /boot
. В случае с Windows просто указываем раздел где она (венда) находится, и на этом работа grub заканчивается. Например в данном случае c Linux - (hd0,1). Это значит что диск первый (sda), и раздел /boot
у нас находится на отдельном диске (sda1).
С этим разобрались. Осталось собственно установить сам grub. Пишем grub
(или grub --no-floppy
) и попадаем в его "интерактивный режим".
grub (hd0,1)
root (hd0)
exit
Откуда взялись параметры написано выше :) Теперь осталось выйти из chroot'а, отмонтировать файловые системы, перезагрузиться, и наслаждаться жизнью:
exit
umount /mnt/boot /mnt/proc /mnt/dev /mnt
reboot