Fedora 16, GRUB2…

Привет тебе, гость читающий эту заметку!

Сегодня в данной мини-статье хочу немного осветить в русскоязычной и более очеловеченной форме вопрос быстрой юстировки нового загрузчика для Unix-систем — GRUB2.

Как обычно, сообщество программистов-энтузиастов, решило порадовать пользователей своей продукции и выпустить новую, более интересную головоломку для домашних энтузиастов-исследователей. Вроде бы ничего нового не случилось, однако, как это часто водится в OSS-среде, выход новой версии старого продукта означает на практике мутацию оного в новую форму с новым обликом и повадками. Не прошла эта традиция и мимо всеми любимого и удобного загрузчика операционных систем — GRUB. Теперь, этот скромный трудяга, проживающий в укромной части жесткого диска компьютера получил к своему названию номер «2», а с ним и кучу нововведений. О некоторых из них я и хочу упомянуть ниже, дабы волосы у некоторых из его почитателей были шелковисты, а нервная система избавлена от порции новых ощущений, не столь полезных в наше время глобализации и бешеных ритмов эволюции 🙂

Собственно о чем хотелось бы сказать прежде всего, так это о таких вещах, как выбор ОС по-умолчанию, задать таймаут для меню GRUB2 при старте системы и все это сохранить в конфигурации загрузчика.

Опишу здесь свою ситуацию.

На мое компьютере уже далеко не первый год проживает две (в основном) операционные системы: Windows 7 и соседка по этажу Fedora Linux. Вот последняя как раз недавно была подвержена очередному стресс-тесту ввиде операции под названием UPGRADE.

Как результат: версия ОС сменилась с 14 сразу на 16, вместе с этим ядро на версию 3.2.2-1 (!), а загрузчик на GRUB2. Gnome3 и KDE4 в новой реинкарнации достойно отдельной статьи с деферамбами, потому не будем сейчас затрагивать этих монстров, оставив отдельную полку для матов и благодарностей.

Так вот, у меня две ОС, которые загрузчиком были успешно определены и выведены в новый файл конфигурации, который теперь находится по такому адресу: /boot/grub2/grub.cfg .
Только не спешите сразу его редактировать, — об этом также предупреждает и комментарий внутри файла, содержимое которого я привожу ниже:

 

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
load_env
fi
set default=»${saved_entry}»
if [ «${prev_saved_entry}» ]; then
set saved_entry=»${prev_saved_entry}»
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fifunction savedefault {
if [ -z «${boot_once}» ]; then
saved_entry=»${chosen}»
save_env saved_entry
fi
}

function load_video {
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
}

set timeout=2
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###
menuentry ‘Fedora Linux, with Linux 3.2.2-1.fc16.x86_64′ —class fedora —class
gnu-linux —class gnu —class os {
savedefault
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)’
search —no-floppy —fs-uuid —set=root a4a19c6e-41a6-475d-b30d-cdcec3084950
echo ‘Loading Linux 3.2.2-1.fc16.x86_64 …’
linux /boot/vmlinuz-3.2.2-1.fc16.x86_64 root=UUID=a4a19c6e-41a6-475d-
b30d-cdcec3084950 ro quiet rhgb
echo ‘Loading initial ramdisk …’
initrd /boot/initramfs-3.2.2-1.fc16.x86_64.img
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry «Windows 7 (loader) (on /dev/sda1)» —class windows —class os {
savedefault
insmod part_msdos
insmod ntfs
set root='(hd0,msdos1)’
search —no-floppy —fs-uuid —set=root 5EB481BAB48194E5

chainloader +1
}
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the ‘exec tail’ line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

### BEGIN /etc/grub.d/90_persistent ###
### END /etc/grub.d/90_persistent ###

Как видно по тексту, файл конфигурации теперь больше напоминает скорее скрипт на bash, нежели набор опций, как это было раньше в первой версии GRUB, а все изменения в файле производятся утилитой входящей в состав нового GRUB2 — grub2-mkconfig.

1. Выбираем ОС-поумолчанию.

Для этого сначала смотрим, а какие собственно ОС у нас имеются. Делается это примерно так: запускаем окно терминала (например Xterm), а в нем логинимся как root.

su -l

теперь даем следующую команду:

grep menuentry /boot/grub2/grub.cfg

У меня результат такой:

menuentry ‘Fedora Linux, with Linux 3.2.2-1.fc16.x86_64’ —class fedora —class gnu-linux —class gnu —class os { menuentry «Windows 7 (loader) (on /dev/sda1)» —class windows —class os {

Теперь посмотрим, что же выбрано в GRUB2 по-умолчанию:

grub2-editenv list

мой результат:

saved_entry=Fedora Linux, with Linux 3.2.2-1.fc16.x86_64

Признаться, при всех теплых чувствах к этой ОС, в настоящий момент я предпочитаю, чтобы по-умолчанию загружалась Windows, т.к. именно она на сегодняшний день является моим основным местом обитания в домашних уловиях. Значит надо так и сделать. Делаем:

grub2-set-default «Windows 7 (loader) (on /dev/sda1)»

проверяем:

grub2-editenv list

что у нас вышло:

saved_entry=Windows 7 (loader) (on /dev/sda1)

2. Смена таймаута.

Теперь все по плану, еще нужно изменить время ожидания загрузчика. Приступаем:

vi /etc/default/grub

Клавиатура:

«i»

здесь изменяем значение GRUB_TIMEOUT с 5 на нужное, — я поставил 2:

GRUB_TIMEOUT=2

Клавиатура:

 

Shift + «:»

wq

Enter

 

А вот теперь, осталось все это дело зафиксировать с помощью нашего момент-монтаж, точнее утилитой упоминавшейся выше:

grub2-mkconfig -o /boot/grub2/grub.cfg

Отработать в окне должно примерно так:

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub.cfg …
Found linux image: /boot/vmlinuz-3.2.2-1.fc16.x86_64
Found initrd image: /boot/initramfs-3.2.2-1.fc16.x86_64.img
No volume groups found
Found Windows 7 (loader) on /dev/sda1
done

Ну и все пожалуй, теперь остается помолиться вашим покровителям и набрать заветное «ерек ую чорс», reboot в смысле 🙂

p.s.

Заметил также одну особенность в работе нового GRUB2: теперь, ОС по-умолчанию устанавливается кроме прочего, при выборе варианта загрузки из меню загрузчика с помощью клавиш стрелок до истечения таймаута.  Т.е., если вы выбрали загрузить Windows, то вы в нее войдете и при следующей загрузке компьютера, GRUB2 вам начнет загружать Windows. И наоборот: если вы выберете Linux, то загрузчик этот выбор запомнит и при следующей загрузке на автомате загрузится именно Linux. Иными словами GRUB2 запоминает последний выбор варианта загрузки. Так что имейте это ввиду, прежде чем бросаться перелопачивать конфигурацию груба из Linux-root’А 😉

p.p.s.

Прошло не так уж и много времени с момента написания статьи, и вот успело выйти обновление для ядра моей Linux-системы. Все бы ничего, кроме того, что многие дистрибутивы имеют привычку добавлять новое ядро в меню загрузчика GRUB. Моя ОС также не исключение из этого списка, и как только ядро было обновлено, оно появилось в меню загрузки наряду со двумя старыми — Fedora и Windows 7. В итоге получилось три варианта два из которых линуксы (старый + новый) + windows. И снова все бы ничего, только от этой «неожиданности» наш GRUB2 опять почему-то «забыл», что он должен загружать последний выбранный вариант (весело, правда? :-)).

Описанное мной в абзаце выше легко исправляется из консоли путем выполнения нескольких нехитрых команд от имени root, которые можно найти на этой странице. Но т.к. я человек хоть и пытливого ума, но от этого не менее ленивый, то я решил действовать более рациональным методом. Просто я взал и написал небольшой вспомогательный скрипт, который при запуске производит обратную замену «умолчального» варианта на прежнее место, сопровождая действия краткими текстовыми комментариями в окне терминала.

В своем текстовом редакторе типа vi или gedit вставляете примерно такой код:

#!/bin/bash
echo «Доступные варианты загрузки:
»
grep menuentry /boot/grub2/grub.cfg
sleep 3
echo «Текущий вариант ОС загружаемая по-умолчанию:
»
grub2-editenv list
sleep 3
echo »
Устанавливаем ОС по-умолчанию Windows 7…»grub2-set-default «Windows 7 (loader) (on /dev/sda1)»

echo »

Сохраняем изменения новой конфигурации…
»

grub2-mkconfig -o /boot/grub2/grub.cfg
sleep 1

echo »

Установлена ОС по-умолчанию:
—————————————————»

grub2-editenv list
exit 0

Теперь сохраняете это дело под произвольным именем, ввиде текстового файла, например:

/usr/local/bin/grub2defmenu

Делаете исполняемым:

chmod +x grub2defmenu

Запускаете от root .

reboot

Удачи!

Share
Запись опубликована в рубрике ЭВТ ИТ с метками , , , , , . Добавьте в закладки постоянную ссылку.

8 комментариев на «Fedora 16, GRUB2…»

  1. Aleksdem говорит:

    Интересно, чем же им так первый GRUB не понравился? 🙂 К тому же такое усложнение хорошим не окончится. 🙁

  2. wilber говорит:

    Старая версия видимо просто устарела настолько, что по мнению разработчиков ее непременно надо было заменить. Причем нет возможности заменить grub2 на grub штатными средствами Fedora, такими как yum — при выборе grub устанавливается grub2.

  3. Анонимный говорит:

    Остаётся только посочувствовать тем, кто, освоив, наконец, старый "граб", вынужден по-новой учиться им пользоваться. И, наверное, эта тенденция "всегдашней новизны", сваливающейся на тебя, как снег на голову, нежданно-негаданно — сохранится и в будущем. Если появился "граб 2", значит должен появится и "Терминатор 3".

  4. wilber говорит:

    Т.е. grub 3.0 ? =)

  5. wilber говорит:

    Дополнил немного статью в конце, насчет ОС-поумолчанию, — мелочь, но не маловажная на практике 🙂

  6. Анонимный говорит:

    Спасибо, все просто и понятно написано.

  7. wilber говорит:

    На здоровье. Обратите внимание на еще одно дополнение в подвале статьи.

  8. dmitpress говорит:

    Да, написано действительно кратко и полезно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *