Введение
Небольшая теоретическая ремарка: BIOS ничего не знает об операционных системах. При первоначальной загрузке компьютера управление получает маленькая программа - загрузчик, размещенная в MBR (master boot record - запись начальной загрузки). После установки linux роль этой программы выполнял GRUB (GRand Unified Butloader), умеющий загружать различные ОС и обеспечивающий удобное меню выбора нужной из них. Основная проблема заключается в том, что ревнивая сука Windows рассчитывает на свою единственность в вашей жизни и не терпит связей на стороне. Исходя из этих соображений установщик ОС от Microsoft затирает все прочие загрузчики и оставляет возможность загрузки единственной системы (опытные знают лазейку через ntldr, но это выходит за пределы нашего обсуждения).
Итак, поскольку процесс установки Windows прям и прост, как жезл ГАИшника, нашей задачей будет восстановление загрузчика GRUB после установки Windows.
Процесс
Несколько комментариев по [пере]установке Windows.
Я предпочитаю делать это удалением раздела со старой ОС и созданием его заново. Такая страховка гарантирует, что установщик не потянет за собой старые болячки умирающей Windows. Но есть два момента:
- Следует удалять разделы осторожно. Нужный нам раздел вероятнее всего называется установщиком диском C:, а незнакомые ему linux-разделы называются "неизвестными". Часто проще всего идентифицировать раздел по размеру.
- Если установщик Windows криво допишет себя в конец таблицы разделов и ваша версия linux ещё не перешла на uuid'ы в fstab и grub.conf - вам придётся сделать это за неё позже, иначе Linux откажется грузится. Как это сделать - читайте в сети, а если не найдёте - спросите у меня. Я покажу вам, где почитать.
$ sudo su
# fdisk -l
Disk /dev/sda: 160.0 GB, 160041885696 bytes
Ага, наш вроде диск...
Device Boot Id System
/dev/sda1 83 Linux
/dev/sda2 * 7 HPFS/NTFS
/dev/sda3 5 Extended
/dev/sda5 83 Linux/dev/sda2 - наш windows-раздел, а вот /dev/sda1 либо /dev/sda5 - явно linux. Какой-то из них корневой.
Далее делаем
# mkdir /mnt/sda1; mount /dev/sda1 /mnt/sda1
здесь сказано "создать каталог с заданным именем; примонтировать устройство в этот каталог". После этого можно для каждого устройства посмотреть его содержимое:# ls /mnt/sda5
если мы видим что-то вродеbin dev initrd lib opt sbin ....
очевидно, это корень.Готовим этот корень к работе. Нам понадобиться в нём наличие каталога boot. Если "ls /mnt/sda5/boot" (здесь и далее подставляем своё корневое устройство) не выводит ничего - значит нужно монтировать сюда один из разделов. Заглядываем в в каталог /mnt/sda1 и если видим
grub config... initrd...
значит, это наш клиент. Приказываем
# mount /dev/sda1 /mnt/sda5/boot
и содержимое boot соответствует действительности. Возможно, похожие операции придётся произвести с каталогами /dev и /proc. Смотрим их содержимое:#ls /mnt/sda5/dev /mnt/sda5/proc
если там пусто - значит потребуется создать для каждого из них ссылки вот так:# rm /mnt/sda5/dev; ln -s /dev/ /mnt/sda5/dev
Впрочем, это было на старых ядрах а нынче я потребности в таких манипуляциях не заметил. Итак, /mnt/sda5 готов к переселению. За чем же дело?# chroot /mnt/sda5
Теперь мы находимся в нашей ранее установленной системе. В ней у нас находится правильно настроенный grub, осталось его только установить в mbr:# grub-install /dev/sda
обратите внимание:- это должен быть тот же диск (sda), с которым мы работали ранее
- без номера - потому что ставим не на разделы, а в mbr диска.
Замечания
Я сознательно не рассматривал более простой и приятный подход сохранения и восстановления mbr с помощью dd, потому что с одной стороны, он требует немалой квалификации (можно хоршо наломать дров), а с другой - это мирный безаварийный путь, который не поможет нам в случае, когда "опытные пользователи всё уже переставили без нас, но linux почему-то не хочет грузиться".
Опыты проводились на Windows XP SP3, grub2 (1.98), Debian Sid, но с минимальными переделками предположительно будет работать и в других подобных ситуациях.
Спасибо за содержательное разъяснение. Хочу отметить, что при выполнении этих рекомендаций возник ряд сложностей. А именно:
ОтветитьУдалитьпервой проблемой стало как раз-таки отсутствие у меня Live-CD. Damn Small, который у меня был в наличии, категорически отказывался грузиться (останавливался на этапе определения устройств). Как альтернатива решению возникшей проблемы, скачал упомянутую Вами версию Live-CD c Ubuntu 9.10, и успешно с него загрузился. Далее на команду fstab -1 получил исчерпывающий ответ, что такой команды не найдено. Спасло fdisk -l:
root@vic:/home/victor# fdisk -l
Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa02da02d
Device Boot Start End Blocks Id System
/dev/sda1 * 1 3270 26266243+ 7 HPFS/NTFS
/dev/sda2 3271 5106 14745601 5 Extended
/dev/sda3 5106 19457 115276108+ 7 HPFS/NTFS
/dev/sda5 3271 5106 14745600 83 Linux
т.е. оказалось, что sda5 - единственный на диске раздел Linux.
Восстановить grub я, учитывая полное отсутствие у меня опыта работы с Linux, выполняя все рекомендации так и не смог. В итоге я проделал следующее:
mkdir /mnt/tmp
mount /dev/sda5 /mnt/tmp
mount --bind /dev /mnt/tmp/dev
chroot /mnt/tmp
grub-install /dev/sda
...и загрузчик поднялся.
Благодарю за оказанную помощь.
Пользователь В.
Благодарю за замечание, Витя, опечатку с fstab/fdisk исправил.
ОтветитьУдалить