- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF128:Grub 2
Материал из Linuxformat.
- Grub Осваиваем Великий Универсальный Загрузчик с мультизагрузкой Super Grub Disk 1.21
Grub 2: Польза от Super Grub Disk
- Последний учебник по Grub был бесполезен для владельцев последней версии Ubuntu. Карл Флетчер исправит это, написав введение в Grub 2.
Вы пришли в телячий восторг от гламура новой Ubuntu 9.10 (Karmic Koala)? Под ее позолотой скрывается рабочий стол с новыми возможностями, с которыми нужно познакомиться поближе. Главное, среди них есть та, что позволяет вам загружать машину в самом начале: Grub или, точнее, Grub 2. Мы рассмотрим изменения, которые несет Grub 2, и самый легкий способ его восстановления и правки. Следует заметить, что информация по данному вопросу ничуть не в дефиците, и ее легко найти через ваш любимый поисковик или в сообществе Ubuntu. Даже если вы не используете Karmic Koala или дистрибутив, который содержит Grub 2, вы можете получить последний с ftp://alpha.gnu.org/gnu/grub и скомпилировать вручную. В архиве есть руководство по установке, и если у вас есть все требуемые зависимости для сборки, все пройдет отлично. Этот проект стоит взять в голову: хотя Grub 2 пока не является выбором по умолчанию для большинства дистрибутивов, он скоро будет им. Если вы хотите экспериментировать с Grub 2, не затрагивая реальную систему, можете использовать виртуальную машину.
Grub’ое приближение
Основной файл загрузчика Grub продолжает жить в /boot/grub, но это не знакомый по Grub menu.lst. Конфигурация Grub 2 теперь хранится в grub.cfg, создаваемом с помощью различных скриптов, выполняемых при запуске команд update-grub или update-grub2.
Файлы, в первую очередь отвечающие за содержимое grub.cfg – это /etc/default/grub и индивидуальные сценарии в /etc/grub.d/. Заметим также, что имя программы update-grub2 встречается только в старых версиях пакета grub2, а теперь она называется update-grub. Update-grub на самом деле запускает grub-mkconfig -o /boot/grub/grub.cfg.
Когда выполняется update-grub, Grub 2 ищет ядра Linux и других операционных систем. Что и где он смотрит, зависит от сведений, находящихся в каталоге /etc/grub.d. *10_linux ищет установленные ядра Linux на текущем разделе. *30_os-prober ищет другие операционные системы. По моему опыту, это работает достаточно четко.[а по моему могут появляться непонятные ошибки типа неправильной подстановки имени раздела в конфигурационный файл, которые могут быть исправлены только руками прим. викификатора]
Многие из файлов в /boot/grub будут незнакомы пользователю из старых приверженцев Grub. Самой «заметной» будет масса *.mod файлов в директории /boot/grub. Grub 2 имеет модульную структуру, и файлы *.mod загружаются по мере необходимости.
Сломать и починить
Начнем с примера двойной загрузки Windows XP и Ubuntu 9.10 на одном жестком диске. Представим себе, что наша система настроена и работает в течение некоторого времени, но мы переустановили XP и после перезагрузки машины обнаружили только Windows, безо всяких намеков на Grub. Звучит знакомо? Восстановление с помощью Grub 2 просто: всего лишь следуйте дальнейшим инструкциям.
Часть 1: Загружаем LiveCD Ubuntu 9.10
Для начала загрузите рабочий стол с LiveCD, откройте ваш любимый эмулятор терминала и наберите
sudo fdisk -l
Будет выдан список разделов, как показано на экранном снимке.
Запомните, какое устройство в этом списке содержит вашу установленную Ubuntu, или, более точно, корневую файловую систему. В нашем примере это sda5. Возможно, у вас отдельные разделы для корня (/) и домашних директорий (/home), но это не типично для «ванильной» установки Ubuntu. Иначе мы предполагаем, что вы знаете, какой раздел для чего. Также может случиться, что у вас был отдельный загрузочный раздел (/boot) – это маловероятно, но бывает. Если да, его будет необходимо подмонтировать вместе с корневым разделом. Следующий шаг монтирует корневой раздел (а если необходимо, и /boot):
sudo mount /dev/sda5 /mnt sudo mount /dev/sda? /mnt/boot
Замените ? на соответствующий вывод команды fdisk. Потом смонтируйте оставшиеся устройства (на данном этапе за XP не беспокойтесь):
sudo mount --bind /dev /mnt/dev
Далее, в терминале выполните chroot для установки файловой системы Ubuntu в качестве корневой. Это позволит нам работать от имени root без использования sudo:
sudo chroot /mnt
Следующим шагом будет выполнение update-grub, а именно
update-grub
Затем установим Grub 2 в основную загрузочную запись (MBR), следующей командой:
grub-install /dev/sda
Ошибки, конечно, возможны всегда. В таком случае, попробуйте вот что:
grub-install --recheck /dev/sda
Нажмите Ctrl+D для выхода из chroot и, вернувшись в основную консоль, наберите
sudo unmount /mnt/dev sudo unmount /mnt
Теперь можете перезагрузиться.
Часть 2: Загружаем установленную систему
Завершив первую часть, вы должны осознать, насколько прост Grub 2… а также заметить, что пропала запись для загрузки XP.
К счастью, мы отказались от более знакомого метода добавления других ОС в загрузочном меню путем ручного редактирования файла menu.lst. Вместо этого мы вернемся в Ubuntu. Теперь все, что нам нужно, это открыть терминал и набрать
sudo update-grub
а затем
sudo grub-install /dev/sda
Результат будет виден при перезагрузке: теперь в меню появится возможность выбора Windows.
Вы можете выполнить такую же процедуру независимо от вида операционной системы, установленной вторым номером. Запуск update-grub и grub-install найдет другие установки, которые появятся в меню при следующей загрузке.
Даже если Grub сломан, вы все еще можете запустить свою машину с помощью Super Grub Disk (http://www.supergrubdisk.org/index.php). Он не требует использования LiveCD Ubuntu, так как загружает вашу установленную систему напрямую. После загрузки с носителя Super Grub Disk вы увидите нечто похожее на экранный снимок. Теперь вы можете добраться до вашей системы. Нужно всего лишь запустить два ключевых скрипта:
sudo update-grub sudo grub-install /dev/sda
После перезагрузки Grub заработает снова.
О ручном редактировании
Редактирование Grub вручную, вероятно, вам знакомо. Но мы не будем править файл grub.cfg, который выдает вам меню загрузки (эквивалент старого menu.lst). Вместо этого мы создадим скрипт в /etc/grub.d. Он также должен быть сделан исполняемым, командой
sudo chmod +x /etc/grub.d/имя_файла
Пройдемся по подробностям: когда отработает update-grub, Grub 2 прочтет /etc/default/grub и файлы, содержащиеся в директории /etc/grub.d. Эта комбинация установит визуальные параметры меню Grub (/etc/default/grub) и выполнит поиск ядер Linux, других ОС и элементов, доступных в пользовательских скриптах в /etc/grub.d. Файлы скриптов в этой директории выполняют следующие задачи:
- 10_linux ищет установленные ядра Linux.
- 30_os-prober ищет другие операционные системы.
- 40_custom и другие пользовательские скрипты в директории /etc/grub.d добавляют в меню ваши собственные элементы.
Имя файла определяет его место в меню. Запись 30_os-prober будет предшествовать пункту 40_custom, а тот будет помещен перед 50_my-custom. Имя файла должно иметь формат XX_имя, где XX означает номер, следом идет подчеркивание, а затем имя. И, как говорилось, все пользовательские файлы должны быть сделаны исполняемыми при помощи
sudo chmod +x /etc/grub.d/filename
Пример скрипта
#!/bin/sh exec tail -n +3 $0 # Этот файл демонстрирует простой путь для редактирования записей в меню. #Просто наберите нужную вам запись после этого коментария. # Будьте внимательны, не изменяйте строку _exec tail_ выше. echo “Adding RescueCD” >&2 menuentry “Ubuntu Rescue CD” { set root=(hd0,09) linux /sysrcd/rescuecd subdir=sysrcd setkmap=us initrd /sysrcd/initram.igz }
Пример выше создает в меню пункт для запуска RescueCD (ранее установленного) из раздела, созданного в sda09. Если вы и вправду хотите использовать его, каталоги и файлы RescueCD потребуется скопировать в нужные места. Строка echo «Adding RescueCD» не обязательна, но она позволяет видеть отклик, что запись найдена и введена посредством скрипта update-grub. Все это можно сохранить как /etc/grub.d/41_RescueCD.
Для получения ваших собственных пунктов в верху меню создайте файл и назовите его 09_xxxx. Так как файлы в /etc/grub.d/ читаются по порядку, 09_custom попадет перед 10_linux. Не нумеруйте ваши файлы меньше чем 06, чтобы темы, запускаемые из 05_debian_theme, выполнились до создания вашего меню. Создав файл, запустите sudo update-grub и проверьте значение DEFAULT в /etc/default/grub. Если оно не ссылается на правильную запись меню, измените значение DEFAULT на верное.
В новой системе именования номера устройств отсчитываются с 0. Sda обозначается hd0, sdb – hd1 и т. д.
Часть 3: Ставим OpenSUSE 11.2 на sda1 для двойной загрузки
Мы рассмотрели новый Grub с Windows, теперь же установим на sda1 дистрибутив Linux. Альтернативная загрузка двух дистрибутивов Linux востребована чаще, чем кажется. Трюк здесь в том, чтобы исключить установку загрузчика: он не нужен, так как мы используем Grub 2 из Ubuntu 9.10. Загрузите OpenSUSE с CD или DVD и выполните инсталляцию. Помните, что в секции параметров загрузчика устанавливать Grub не нужно. Закончив и перезагрузившись, вы получите загрузочное меню Ubuntu, потому что именно оно находится в MBR. Оно будет показывать Windows XP, но вы это проигнорируйте и, загрузившись в Ubuntu, откройте терминал и проделайте все как раньше. Перезагрузитесь, и вы увидите нечто похожее на экранный снимок.
Невыразительное меню загрузки Ubuntu особо не впечатляет. Однако можно добавить экран заставки по выбору. Сперва запустите это:
sudo apt-get install grub2-splashimages
Вы найдете ваши новые экраны заставки в /usr/share/images/grub/.
Скопируйте изображения в /boot/grub, потому что тогда, даже при установке с отдельным корнем / на зашифрованной файловой системе и разделом /boot, изображения все равно будут видны. Сам Grub не может видеть файлы внутри зашифрованной файловой системы.
sudo cp /usr/share/images/grub/*.tga /boot/grub
Чтобы появилось наше новое изображение, нужно отредактировать файл /etc/grub/05_debian_theme, набрав
gksudo gedit /etc/grub.d/05_debian_theme
Найдите строки 16–17 и измените следующее
for i in {/boot/grub,/usr/share/images/desktop-base}/ moreblue-orbit-grub.{png,tga} ; do
на
for i in {/boot/grub,/usr/share/images/desktop-base}/ Windbuchencom.{png,tga} ; do
Теперь выполните
sudo grub-mkconfig -o /boot/grub/grub.cfg
Вот что вы должны увидеть в выводе:
Generating grub.cfg… Found Debian background: Windbuchencom.tga Found linux image: /boot/vmlinuz-2.6.31-14-generic Found initrd image: /boot/initrd.img-2.6.31-14-generic Found memtest86+ image: /boot/memtest86+.bin Found openSUSE 11.2 (i586) on /dev/sda1
Редактируем /etc/default/grub
Этот файл содержит информацию, которая раньше находилась в первом разделе /boot/grub/menu.lst. Настройки тут влияют на способ отображения меню Grub. Данный файл допускается редактировать от имени root, и изменения будут импортированы в grub.cfg при запуске sudo update-grub. В заключение взгляните на типовой вид начальной секции menu.lst:
# Modified by YaST2. Last modification on Tue Nov 10 15:11:47 GMT 2009 # THIS FILE WILL BE PARTIALLY OVERWRITTEN by perl-Bootloader # Configure custom boot parameters for updated kernels in /etc/sysconfig/bootloader default 0 timeout 8 ##YaST - generic_mbr gfxmenu (hd0,1)/boot/message ##YaST - activate # If you change this file, run ‘update-grub’ afterwards to update # /boot/grub/grub.cfg. GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=”10” GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash” GRUB_CMDLINE_LINUX=”” # Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo’ #GRUB_GFXMODE=640x480 # Uncomment if you don’t want GRUB to pass “root=UUID=xxx” parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entries #GRUB_DISABLE_LINUX_RECOVERY=”true”
Слово о grub.cfg
Заранее извиняемся за заглавные буквы, но НИ В КОЕМ СЛУЧАЕ НЕ РЕДАКТИРУЙТЕ ЕГО! Хотя он заменяет файл menu.lst из Grub Legacy, это не значит, что его можно править вручную. Grub.cfg генерируется или изменяется, когда вы запускаете update-grub. Если вы сделаете изменения в своей операционной системе, update-grub найдет их и обновит grub.cfg. И, как уже говорилось, это действительно работает. Мы упоминали о пользовательских пунктах меню, но эта практика представляется теперь менее необходимой, чем раньше, хотя и полезна для выбора пользовательского ядра или если вы хотите иметь другую ОС для загрузки первой по умолчанию.
Не совсем понятно зачем здесь такие большие буквы, можно смело редактировать grub.cfg. Если чтото пойдет не так то grub-install диск попросту выдаст ошибку и update-grub ее исправит по новой сгенерировав этот конфигурационный файл. Более того update-grub часто делает слишком много (например находит ВСЕ установленные ядра и вписывает их в меню загрузки), а генерируемые им названия пунктов весьма далеки от идеала, так что вмешаться руками бывает гораздо проще чем объяснить компьютеру что пользователю нужно.
Что измененилось в Grub 2
Новые возможности таковы:
- Файл menu.lst теперь больше не управляет меню – теперь это задача grub.cfg.
- grub.cfg автоматически генерируется одним из скриптов Grub 2.
- Отличается система нумерации разделов.
- Выражения [stanza] сейчас формулируются несколько иначе, и их нельзя просто скопировать из menu.lst Grub 1 в grub.cfg.
- При желании вы можете использовать для ваших собственных пунктов меню отдельный файл – /etc/grub.d/40_custom_. Он не будет перезаписываться.
- Основной файл настройки для изменения отображаемого на экране меню – /etc/default/grub.
- Существует несколько файлов для настройки меню – упомянутый выше /etc/default/grub, а также файлы в /etc/grub.d/.
- Другие операционные системы, такие как Windows, должны автоматически распознаваться и добавляться в меню.
- Изменения, которые вы делаете в конфигурационных файлах, не входят в силу, пока вы не запустите команду update-grub.
- Grub 2 поддерживает скрипты, включая условные операторы и функции.
- Улучшена поддержка графического загрузочного меню и экрана заставки.
- Вы можете легко загружать ISO-образы LiveCD прямо с жесткого диска.
- Из коробки работает поддержка «не x86» платформ (таких как PowerPC).
- Существует универсальная поддержка для UUID.
Помните, что не все дистрибутивы адаптировали Grub 2; к примеру OpenSUSE и Fedora этого не сделали. Чтобы узнать больше, см. http://grub.enbug.org/Manual.