Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist

Грубая правда о Grub'е 2

Алексей Дмитриев, 22 августа 2011

Не понимаю я логики иных разработчиков.

Если берешься усовершенствовать, согласно своим представлениям, некую популярнейшую и необходимейшую миллионам людей программу, и при этом начинаешь писать ее с нуля, то почему бы тебе не дать проекту другое название. Пусть старая добрая программа остается со своим брендом, а ты создай новый бренд, если так уверен в успехе своей программы.

Вместо этого, старый добрый проект закрывается, новая поделка навязывается насильно, и всем плевать на свободу выбора, которой так гордился прежде мир свободного софта.

Сказанное относится: к незажившей ране ≈ KDE; к возникшему в начале 2011 года Gnome3; и к неотвратимо расползающемуся, подобно раковой опухоли, Grub2. Все три этих инновации объединяет то, что они откровенно хуже (ресурсоемкость, медлительность, неудобство или невозможность настроек), несовместимы со своими предшественниками и базируются на бредовых идеях. А цель подобных инноваций только одна ≈ сделать "как у Виндоуз" ≈ то есть, чтобы пользователь не смог самостоятельно настраивать программы, а при каждой нештатной ситуации бежал к "специалисту", то есть платил деньги.

Тема сегодняшнего обсуждения ≈ Grub2, давайте перейдем к нему.

На первый взгляд, он вроде бы не сильно отличается от предшественника ≈ Grub Legacy. При инсталляции так же бодро обследует жесткие диски, находит все операционные системы и выдает удобное загрузочное меню. Это меню снабжено всякими картинками и даже озвучено и внешне выгодно отличается от старого.

Приходилось слышать мнение ≈ "Дескать, в старом грубе один файл настройки, в новом ≈ другие, притерпимся и привыкнем".

Но горе вам, если вы постоянно устанавливаете новые дистрибутивы, удаляете старые, меняете ядра, имеете клоны разделов или просто хотите иметь внятные и понятные вам пункты меню вместо стандартных безликих надписей!

меню по умолчанию

Рис. 1

Попробуйте удалить ненужный пункт меню или добавить нужный! Попробуйте отредактировать параметры загрузки! Попробуйте поменять строки меню местами!

Все это в старом Grub Legacy делалось редактированием единственного файла menu.list в текстовом редакторе и занимало от силы 10 минут.

А вот как происходят эти же действия в новом Grub2:

1. Изменение настроек по умолчанию

К ним относится: время ожидания меню; строка, загружаемая по умолчанию; использование UUID'ов; наличие строк recovery mode (безопасный режим, он же режим восстановления) и прочие.

Все эти настройки собраны в файле /etc/default/grub.

GRUB_DEFAULT=0 ≈ В первой строке устанавливается строка меню, загружаемая автоматически (если не выбрана иная). Первая строка считается нулевой, вторая ≈ первой и т.д.

GRUB_TIMEOUT=5 ≈ Задержка до начала загрузки пункта меню в секундах. Чтобы остановить отсчет секунд, достаточно нажать клавишу пробел или стрелочки вверх-вниз.

GRUB_CMDLINE_LINUX_DEFAULT="quiet" ≈ По умолчанию ядро LINUX будет загружено с параметром "quiet". Можно вписать сюда другие параметры, но они будут применяться ко всем ядрам подряд.

GRUB_CMDLINE_LINUX="" ≈ Дополнительные параметры загрузки ядра.

Чтобы изменить эти четыре настройки, нужно вписать свои значения и запустить команду

$ sudo update-grub 

Команда перепишет основной конфигурационный файл Grub2 ≈ /boot/grub/grub.cfg с новыми значениями.

Далее в файле /etc/default/grub еще есть возможность раскомментировать строки, позволяющие осуществить некоторые важные настройки:

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux 
(Раскомментируйте, если не хотите применения параметра "root=UUID=xxx" к ядру Linux)
#GRUB_DISABLE_LINUX_UUID=true

Попросту, если хотите видеть root=/dev/sdaX вместо root=UUID=xxx, то снимите решетку перед словами GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries 
(Раскомментируйте, если не хотите создания пунктов меню recovery mode 
(режим восстановления)
# GRUB_DISABLE_RECOVERY="true"

Если не хотите появления пунктов меню "режим восстановления", то снимите решетку перед строкой GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start 
(Раскомментируйте, чтобы услышать гудок при старте grub'а)
# GRUB_INIT_TUNE="480 440 1"

Миленький такой гудочек.

Это, разумеется не все опции. Часть я сознательно опустил, часть не вошла в Дебиановский вариант файла /etc/default/grub. Чтобы получить полный список опций настройки, наберите в командной строке

$   info -f grub -n 'Simple configuration'

Наберите, не пожалеете ≈ там еще очень много любопытного.

И опять-таки, чтобы изменения вошли в силу нужно переписать файл /boot/grub/grub.cfg при помощи команды

$ sudo update-grub 

2. Добавление и удаление пунктов меню. Редактирование этих пунктов

Grub2 так умно и замечательно устроен, что не допускает возможности внесения изменений в автоматически созданное при инсталляции загрузочное меню. Так что редактирование невозможно.

Вместо этого предлагается создать свой собственный пункт меню, который вы уже сможете редактировать как вам угодно. Для облегчения процесса написания скрипта, создающего новый пункт меню (menuentry), есть специальный файл /etc/grub.d/40_custom.

Вот его полный текст:

текст файла

Перевод: Этот файл обеспечивает простой способ добавлять собственные пункты меню. Просто впишите новые пункты, которые вы хотите добавить к меню, непосредственно после данного комментария. Не изменяйте строку 'exec tail' в начале файла.

Жаль что ничего не сказано про синтаксис этих самых menuentry, то есть пунктов меню. Но здесь нам послужит образцом файл /boot/grub/grub.cfg. Откроем его в текстовом редакторе, скопируем целиком один из menuentry, который вам хочется изменить, и вставим его в файл /etc/grub.d/40_custom. Например:

текст файла

Затем отредактируем название пункта меню. Вместо "RFRemix 15 on /dev/sda3 (2.6.38.6-27.fc15.i686) (on /dev/sda3)" напишем просто "Fedora 15 on /dev/sda3"

Что касается всех остальных команд и их аргументов, то, если они загружают раздел нормально, менять их незачем, ведь в меню они не видны.

Но одно нужно иметь в виду: разработчики Grub2 сделали настоящую подлость в нотации разделов. Раздел (hd0,1) означает первый раздел первого диска, так как нумерация дисков начинаются с нуля, а нумерация разделов ≈ с единицы. Логики здесь нет никакой, просто желание запутать пользователя. Тем более, что номера пунктов меню, как положено, считаются с нуля.

После внесения всех изменений нужно сохранить файл как 11_fedora, например. Чем меньше порядковый номер, тем выше в меню окажется этот пункт. Затем делаем файл исполняемым любым способом, например:

$ sudo chmod +x /etc/grub.d/11_fedora

После чего делаем неизменное

$ sudo update-grub 

Теперь можно просмотреть файл /boot/grub/grub.cfg и убедиться, что в нем появился новый пункт меню ≈ "Fedora 15 on /dev/sda3". Пункт этот окажется последним, так как перед ним будут идти все menuentry, создаваемые скриптом 10_linux (который и создает меню по умолчанию).

Теперь нужно проверить, работает ли наш menuentry на деле. Придется перезагрузиться, выбрать в загрузочном меню пункт "Fedora 15 on /dev/sda3" и нажать ENTER.

Если загрузка состоялась, то продолжим работу.

3. Создаем собственное модульное меню и деактивируем меню, созданное автоматически

Так же точно создадим по файлу на каждую операционную систему на ваших дисках. Назовем их 12_myOS, 13_myOS, 14_myOS и так далее. Сделаем все скрипты исполняемыми. Запустим update-grub. Проверим работоспособность.

Теперь можно избавиться от пунктов, созданных при инсталляции. Только не нужно удалять никаких файлов, как советуют иные руководства. Достаточно снять исполняемый бит с файла /etc/grub.d/10_linux:

$ sudo chmod -x /etc/grub.d/10_linux 

Если файл в директории /etc/grub.d не является исполняемым, то команда update-grub не может его запустить, что фактически означает его игнорирование.

После этого, нужно лишить исполняемого бита еще файл /etc/grub.d/30_os-prober, иначе этот скрипт снова обследует все диски и впишет дефолтные названия, на этот раз в конец списка.

Снова запустить update-grub.

Модульное меню готово. Теперь, чтобы убрать любой из пунктов меню, достаточно лишить соответствующий файл исполняемого бита. При необходимости его всегда можно подключить обратно.

Если вы создали новый раздел и установили новую ОС, то вам придется сделать файл /etc/grub.d /30_os-prober снова исполняемым, чтобы он мог найти и вписать новенькую. На основе этой записи вы сделаете очередной файл ХХ_myOS, а /etc/grub.d /30_os-prober опять деактивируете.

Поменять местами пункты меню можно просто поменяв первые цифры в названии файлов.

Спрашивается, а для чего делать по отдельному файлу на каждый menuentry, когда можно все их вписать в один файл 11_myOS? Можно пойти и этим путем, но тогда придется редактировать этот файл при каждом изменении одного из menuentry или при изменении очередности пунктов меню. Если у вас всего две или три операционные системы, то, вероятно, это даже лучше. Но если число menuentry приближается к десятку, то модульность удобнее.

4. Никому не верь, особенно разработчикам (Для самых отчаянных)

Сказанное ниже не является руководством к действию, но как один из вариантов, вполне может быть принято на вооружение.

В первой строке файла /boot/grub/grub.cfg сказано: "DO NOT EDIT THIS FILE!". Во всех без исключениях руководствах по Grub2, на самом видном месте, иногда большими буквами написано: "Не пытайтесь редактировать файл /boot/grub/grub.cfg, Все равно он будет переписан и все ваши изменения пропадут".

Это все глупости. Смело редактируйте grub.cfg (в пределах разумного), меняйте названия menuentry, выбрасывайте некоторые из них целиком, вписывайте новые. Только не делайте после этого update-grub. Эта команда, будучи запущена, действительно запустит все скрипты из директории /etc/grub.d и они перезапишут grub.cfg. Но если ее не запускать. то ваше меню будет выглядеть как вам хочется, до тех пор, пока не придется вносить в него изменения. В доказательство привожу рисунок 4.

новое меню

Рис. 4

5. Подведение итогов

Надеюсь вы убедились, что смысле удобства использования старый Grub Legacy даст новому сто очков вперед. Так что если у вас есть возможность установить хоть один дистрибутив, допускающий использование Grub Legacy (например, Fedora), то ставьте его, хотя бы для того, чтобы им запускать все остальные. Можно также выделить загрузочный раздел на диске и установить туда Grub Legacy. В любом случае стоит оттянуть освоение недоношенного Grub'а 2 как можно дольше, авось он сам сойдет на нет.

 



Средняя оценка 4.2 при 5 голосовавших

Комментарии