Лиловая грубость Евгений Зобнин aka j1m Хакер, номер #086, стр. 086-104-3 Сложный путь заключается в самостоятельном вводе команды, выполняемой GRUB после окончания установки (install /grub/stage1 (hd0) ...). Немного модифицировав эту команду, можно избавиться от второго компонента загрузки (e2fs_stage1_5), чтобы избежать проблем с файловыми системами и... обрести новые из-за невозможности перемещать stage2 внутри каталога /boot/grub, так как второго компонента, понимающего ФС, теперь не будет, и начальному загрузчику, укрывшемуся в MBR, придется самостоятельно калькулировать расположение stage2 по смещению от начала раздела, которое после перемещения файла тоже изменится. [курсы углубленного изучения] У нас уже есть совсем крохотный, но рабочий конфиг. Сейчас мы его расширим, добавив возможность загрузки нескольких ОС. Представим такую ситуацию: на диске hda созданы разделы в следующей последовательности: /boot (hda1), корневой раздел Linux (hda2), раздел FreeBSD (hda3) и раздел для Windows (hda4). На все разделы, за исключением первого, установлена соответствующая ОС. Чтобы иметь возможность загрузки каждой из них, нам понадобится примерно такой конфиг: # vi /boot/menu.lst # ждать три секунды и грузить ОС, назначенную по умолчанию timeout 3 # по дефолту загружаем первый пункт меню (Linux) default 0 # если первый пункт загрузить не удалось, то загружаем второй (FreeBSD ;) fallback 1 # красивое зеленое меню color green/black # далее идут элементы меню title Linux root (hd0,0) # загружаем ядро Linux kernel /vmlinuz root=/dev/hda2 title FreeBSD root (hd0,1,a) # загружаем стандартный загрузчик BSD kernel /boot/loader title Windows root (hd0,2) # делаем активным выбранный раздел (метка BOOT) makeactive # передаем управление следующему загрузчику chainloader +1 # перезагрузка title Reboot reboot # выключение title Halt halt После каждого поля title идут стандартные команды встроенного в GRUB шелла, их можно использовать прямо в самом загрузчике. Как нам уже известно, команда root совершает переход на выбранный раздел. А команда kernel принимает в качестве аргумента путь до образа ядра, при этом ядро должно поддерживать спецификацию Multiboot (Linux и все BSD следуют ей). Как можно видеть, мы не загружаем ядро FreeBSD напрямую, это было бы идеологически и практически не верно, вместо этого передаем управление стандартному загрузчику /boot/loader. Имя раздела для FreeBSD тоже выглядит по-другому, оно включает в себя и подраздел в виде буквы, как принято в BSD-системах. А вот с Windows уже начинаются костыли, Multiboot эта ОС не поддерживает и требует, чтобы раздел, на котором она установлена, был активным. Поэтому мы идем напрямую: сначала с помощью команды makeactive делаем текущий раздел активным, а затем по цепочке передаем управление стандартному загрузчику Windows, расположенному в BR, то есть в первом секторе раздела. Вообще говоря, специально для таких операционок, как творение Билла Гейтса, в GRUB предусмотрено множество обходных путей. Например, две версии Windows 9X не могут быть загружены из смежных разделов, управление получит только первая. Для устранения проблемы можно использовать такую конструкцию: |