GRUB2

Обсуждаем, помогаем.

Модераторы: Conteo, Костик

GRUB2

Сообщение Deviljin » 21 фев 2010, 13:30

GRUB2
при первом сравнении grub2 со старым grub самым весомым различием оказывается измененная структура файлов конфигурации. настройка grub2 производится теперь по принципиально иному принципу.
первое же, что бросается в глаза - отсутствие привычного многим "/boot/grub/menu.lst", в котором были прописаны пункты загрузки, таймаут меню и прочие настройки. где это теперь?
в grub2 основным файлом конфигурации является "/boot/grub/grub.cfg". однако же, не торопитесь править его так, как привыкли это делать с "menu.lst". при внимательном прочтении мы видим в начале файла "grub.cfg" такие строки:

Код: Выделить всёРазвернуть
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

и об этом нас предупреждают не просто так. ведь "grub.cfg" генерируется автоматически с использованием нескольких скриптов. поэтому после следующего обновления grub2 ваш "grub.cfg" будет создан заново, и все ваши правки будут утрачены. но это мы подробнее рассмотрим чуть ниже.
перейдем к основным файлам конфигурации grub2. как и упомянуто выше, главным файлом, собственно, отвечающим за загрузочное меню, является "/boot/grub/grub.cfg". кроме него имеются файл "/etc/default/grub" и папка "/etc/grub.d". рассмотрим их подробнее.

/etc/default/grub
данный файл содержит в себе основные настройки для grub2. через него, собственно, они и изменяются. для наглядности ниже приводится примерное содержимое этого файла:

Код: Выделить всёРазвернуть
GRUB_DEFAULT=6
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT="2"
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 entrys
#GRUB_DISABLE_LINUX_RECOVERY="true"

мы видим, что файл представляет из себя набор опций в человекопонятном формате ОПЦИЯ=ЗНАЧЕНИЕ. мы не будем здесь рассматривать все представленные параметры, поскольку рядовому пользователю вполне достаточно понимания пары-тройки основных параметров.
наиболее часто встречающаяся потребность при настройке grub - изменение стандартного пункта загрзки и/или времени показа меню. рассмотрим же, как это делается.

по умолчанию стандартный пункт (выделенный при показе меню) - верхний в списке. после установки Ubuntu она окажется наверху, а Windows, например, будет последним пунктом. после обновления ядра первым пунктом списка становится загрузка с новым ядром. это происходит потому, что именно первый пункт загрузки является стандартным по умолчанию.
за это, собственно, отвечает параметр "GRUB_DEFAULT". значением его является номер пункта в меню загрузки, который должен быть выбран стандартным. причем нумерация начинается с нуля. значение по умолчанию - 0, поэтому и выбирается первый пункт. для того. чтобы выбрать другой пункт, нам нужно узнать, каким по счету он будет в списке. тут есть два варианта: просмотреть содержимое "/boot/grub/grub.cfg" и сосчитать, какой по счету окажется нужная запись, или же перезагрузиться и более наглядно посмотреть то же самое в меню загрузки (перед этим побегайте стрелочками по меню, чтобы остановить таймер). вторый вариант отличается более наглядным представлением, что проще для неопытного пользователя. в обоих случаях не забывайте о порядке нумерации - 0, 1, 2, 3 и так далее. то есть, пятому сверху пункту будет соответствовать знаение 4, второму - 1, первому - 0. в вышеприведенном примере установлено значение 6, то есть стандартным задан седьмой пункт меню.
кроме задания конкретного пункта есть еще другие интересный варианты. например, в качестве значения можно указать "saved" - тогда при загрузке будет выбран тот пункт, который был загружен в прошлый раз.
или же можно указать точное название пункта. в данном случае оно должно быть именно таким, каким мы его видим в "/boot/grub/grub.cfg". при этом значение должно указываться в кавычках! данный способ удобен тем, что после обновления ядра не придется изменять настройки из-за съехавшей нумерации

например, если в "grub.cfg" пункт меню выглядит так:
Код: Выделить всёРазвернуть

menuentry "Ubuntu, Linux 2.6.32-020632rc6-generic" {
        recordfail=1
....
}

то и значение параметра "GRUB_DEFAULT" должно указываться именно в виде
Код: Выделить всёРазвернуть

GRUB_DEFAULT="Ubuntu, Linux 2.6.32-020632rc6-generic"

по умолчанию меню загрузки отображается 10 секунд, после чего загружается стандартный пункт (если раньше не нажат enter и не выбран другой пункт, что останавливает таймер). с изменением задержки все совсем просто.
за эту задержку отвечает параметр "GRUB_TIMEOUT" (не путайте с "GRUB_HIDDEN_TIMEOUT"!). значение задается в секундах. обратите внимание, что цифра указывается в кавычках. в нашем примере это значение - 2, то есть меню отображается две секунды.
кроме того, есть одна хитрость. если поставить значение "-1", то меню будет отображаться до тех пор, пока пользователь не выберет какой-либо пункт. то есть без всяких таймеров и утекающих секунд.

"скрытое" меню.
в случае, если на компьютере установлена только Ubuntu, меню загрузки по умолчанию не будет отображаться, а grub2 будет загружать вас напрямую в систему. однако же, иногда может возникнуть необходимость загрузиться с другим ядром или же запустить проверку памяти. для этого предусмотрено "скрытое меню".
за него отвечает параметр "GRUB_HIDDEN_TIMEOUT". в случае, когда установлены другие ОС, этот параметр закомментирован (# в начале строки). в случае с единственной ОС он будет активен. значение его задает задержку в секундах. grub2 приостановит загрузку на заданное количество секунд, давая пользователю возможность вызвать меню загрузки, нажав Escape.
если значение установлено в 0, то задержки не будет. однако, пользователь все равно сможет вызвать отображение меню, удерживая при загрузке shift.
параметр "GRUB_HIDDEN_TIMEOUT_QUIET" отвечает за отображение таймера во время паузы. при значении "true" таймер показан не будет. "false" - будет отображаться.

изменение стандартных параметров загрузки ядра
иногда бывает необходимо загружать ядро системы с какими-либо особыми параметрами. например, для корректной работы специфического оборудования. в этом случае весьма полезен будет параметр "GRUB_CMDLINE_LINUX_DEFAULT". он отвечает за те параметры, с которыми запускаются linux-ядра при загрузке. значение его по умолчанию - "quiet splash", что приводит показу графической заставки при запуске системы без показа какой-либо текстовой информации. вы можете добавить необходимые вам параметра запуска ядра, приведя это значение к виду "quiet splash your_param1 your_param2", то есть дописав через пробел нужные параметры.

пример: вместо того, чтобы добавлять новые параметры, мы уберем стандартные. отключим графическую заставку и "молчаливый режим". заменим
Код: Выделить всёРазвернуть
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

на
Код: Выделить всёРазвернуть
GRUB_CMDLINE_LINUX_DEFAULT=""

теперь все наши пункты загрузки linux-ядер будут преобразованы в verbose mode, то есть режим загрузки без графической заставки и с выводом на экран текстовой информации о загрузке компонентов системы, что позволяет следить за процессом загрузки и выявлять неполадки

пример: вместо того, чтобы добавлять новые параметры, мы уберем стандартные. отключим графическую заставку и "молчаливый режим". заменим
Код: Выделить всёРазвернуть
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

на

Код: Выделить всёРазвернуть
GRUB_CMDLINE_LINUX_DEFAULT=""


теперь все наши пункты загрузки linux-ядер будут преобразованы в verbose mode, то есть режим загрузки без графической заставки и с выводом на экран текстовой информации о загрузке компонентов системы, что позволяет следить за процессом загрузки и выявлять неполадки

/etc/grub.d
эта папка содержит в себе скрипты, которые используются при создании "grub.cfg". при обновлении grub2 они находят все установленные на компьютере системы и ядра и формируют в "grub.cfg" меню загрузки, которое мы и видим. два основных из них - "10_linux" и "30_os-prober" отвечают за поиск linux-ядер и остальных ОС на других разделах соотвественно.
файл "40_custom" позволяет добавлять свои пункты загрузки. это может быть полезно, если вы, например, хотите добавить какие-то особые варианты загрузки системы.
(Кликните, чтобы показать/скрыть)
пример: добавляем verbose-mode (режим загрузки без графической заставки, с текстовым отображением процесса загрузки), позволяющий контролировать процесс загрузки системы. для этого мы немного отредактируем обычный пункт загрузки. допустим, он выглядит так (в "/boot/grub/grub.cfg"):

Код: Выделить всёРазвернуть
menuentry "Ubuntu, Linux 2.6.32-020632rc6-generic" {
        recordfail=1
        if [ -n ${have_grubenv} ]; then save_env recordfail; fi
   set quiet=1
   insmod ext2
   set root=(hd0,5)
   search --no-floppy --fs-uuid --set 0e717c2a-24bd-4abe-acfe-ecf98fc814f8
   linux   /boot/vmlinuz-2.6.32-020632rc6-generic root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro   quiet splash
   initrd   /boot/initrd.img-2.6.32-020632rc6-generic
}

для того, чтобы сделать из этого verbose-mode, нам нужно убрать опции quiet и splash из строки "linux". ну, и для понятности изменим название самого пункта. в итоге получаем:

Код: Выделить всёРазвернуть
echo "adding verbose mode" >&2
menuentry "Ubuntu, Linux 2.6.32.rc6 verbose-mode" {
        recordfail=1
        if [ -n ${have_grubenv} ]; then save_env recordfail; fi
   set quiet=1
   insmod ext2
   set root=(hd0,5)
   search --no-floppy --fs-uuid --set 0e717c2a-24bd-4abe-acfe-ecf98fc814f8
   linux   /boot/vmlinuz-2.6.32-020632rc6-generic root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro
   initrd   /boot/initrd.img-2.6.32-020632rc6-generic
}

все это и добавляем в "40_custom" в конец файла. строка с echo не является обязательной. она лишь будет сигнализировать нам о том, что наш пункт найден и добавлен при обновлении grub2
примечание: файл "40_custom" должен заканчиваться пустой строкой, иначе последний пункт не будет отображаться в меню!

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

sudo update-grub

она выполнит скрипты в папке "/etc/grub.d" и применит заданные в "/etc/default/grub" параметры. после этого смело перезагружаемся и видим, что все работает как надо. ну или не работает...
если все прошло успешно, то в выоде консоли вы увидите спсиок найденных grub2 ОС и linux-ядер. выглядит все это примерно так:

тот же самый "update-grub" происходит и при обновлении ядра.

нюанс с нумерацией дисков и разделов.
в grub2 имеется еще одно важное отличие от старого grub. связано оно с нумерацией жестких дисков и их разделов.
в grub нумерация физических дисков и нумерация разделов начинались одинаково - с нуля. первый физический диск (sda в системе) обозначался "hd0", второй (sdb) - "hd1", и так далее. это же осталось и в grub2.
нумерация же разделов диска изменилась. если в grub первый раздел первого диска (sda1) именовался "hd0,0", четвертый (sda4) - "hd0,3", то теперь, в grub2, цифра раздела в grub2 соотвествует цифре раздела в системе. то есть, sda1 теперь будет "hd0,1" (а не "hd0,0"), sdb4 - "hd1,4".
проще говоря, нумерация дисков идет с нуля, а нумерация разделов - с единицы!

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

Код: Выделить всёРазвернуть
datev=$(date +%Y_%m_%d)
mkdir -p ~/.grub.bak/$datev
cd ~/.grub.bak/$datev
mkdir -p boot/grub etc/default
cp /boot/grub/grub.cfg boot/grub
cp -Rp /etc/grub.d etc
cp /etc/default/grub etc/default


(можно сохранить данный скрипт в /usr/bin, назвать, к примеру, "grub-backup" и дать права 755. теперь для резервного копирования grub2 достаточно будет выполнить команду "grub-backup")

Ну собственно говоря перейдём к делу,и так после вчерашнего обновления убунты,я теперь не могу в неё зайти из-за того что появился GRUB2 ,нету пунктов меню,но за то есть консоль,попытался зайти в убунту,не заходит.
Делал я так
Прописывал root в ответ
(loop0)ext2
Потом прописал linux /boot/vmlinuz-2.6.31-19-generic root=/dev/sda5(тут перепробовал все цифирки от 1 до 6
и даже пробовал loop0 вместо sda)
Для уверености прописал initrd /boot/vmlinuz-2.6.31-19-generic
Потом прописал boot и пошла загрузка компонентов после некоторых писалось (errono=16)
И в конце ошибочка
No filesystem couldnt mount root tried: ext3 ext2 ext4 fuseblk
И после этого kernel panic

Пожалуйста,кто знает подскажите что делать
Изображение
Изображение
Аватара пользователя
Deviljin
Активный участник
 
Сообщения: 303
Зарегистрирован: 01 янв 2009, 17:32
Откуда: Саратов
Домен: deviltracker.vfose.ru
Вернуться к началу

Re: GRUB2

Сообщение Conteo » 21 фев 2010, 22:37

Опять убунта со своими проблемами...
Код: Выделить всёРазвернуть
root=/dev/sda5

Уверен, что там должно быть /dev/sdx а не /dev/hdx?
И да. Возможно сменился UUID раздела из-за переразбивки.
Изображение
Пользователи федоры - как тараканы. Слабые духом и нервами давно вымерли, а оставшихся в живых уже ничем не взять.
Аватара пользователя
Conteo
Активный участник
 
Сообщения: 1813
Зарегистрирован: 14 мар 2008, 13:21
Откуда: Саратов, Заводской район
Домен: http://conteo.vfose.ru

Re: GRUB2

Сообщение DPX-Infinity » 23 фев 2010, 01:08

Conteo писал(а):Уверен, что там должно быть /dev/sdx а не /dev/hdx?

ты это на полном серьёзе говоришь? разве ещё остались системы, где используется устаревшая система идешных дисков?
а при переразбивке UUID сменится гарантированно. Он меняется даже при просто форматировании.
Изображение
Переходите на Jabber! За ним будущее!
Желаю вам опенсорса!
Аватара пользователя
DPX-Infinity
Активный участник
 
Сообщения: 723
Зарегистрирован: 02 сен 2007, 20:45
Откуда: Саратов

Re: GRUB2

Сообщение Conteo » 23 фев 2010, 02:03

DPX-Infinity писал(а):ты это на полном серьёзе говоришь? разве ещё остались системы, где используется устаревшая система идешных дисков?

Остались :) Например у меня в генте так.
Изображение
Пользователи федоры - как тараканы. Слабые духом и нервами давно вымерли, а оставшихся в живых уже ничем не взять.
Аватара пользователя
Conteo
Активный участник
 
Сообщения: 1813
Зарегистрирован: 14 мар 2008, 13:21
Откуда: Саратов, Заводской район
Домен: http://conteo.vfose.ru

Re: GRUB2

Сообщение Костик » 23 фев 2010, 17:18

просто для сведения содержимое моего файла grub.conf на Russian Fedora remix :)


# grub.conf generated by anaconda
#boot=/dev/sda

default=1
timeout=15
splashimage=(hd0,2)/grub/fedora.xpm.gz
#hiddenmenu
title Russian Fedora Remix 12
root (hd0,2)
kernel /vmlinuz-2.6.31.5-127.fc12.i686.PAE ro root=/dev/mapper/vg_alfa-lv_root LANG=ru_RU.UTF-8 KEYBOARDTYPE=pc KEYTABLE=ru rhgb quiet
initrd /initramfs-2.6.31.5-127.fc12.i686.PAE.img
title Windows XP PRO SP3 Rus
rootnoverify (hd0,0)
chainloader +1
FreeBSD 9.2 and Fedora 18 user
Аватара пользователя
Костик
Активный участник
 
Сообщения: 1944
Зарегистрирован: 03 сен 2007, 02:15

Re: GRUB2

Сообщение server801 » 23 фев 2010, 17:39

всего лишь нужно это http://staynet.ru/debian/7-montirovanie ... metke.html
ИзображениеИзображение
Изображение
Аватара пользователя
server801
Активный участник
 
Сообщения: 511
Зарегистрирован: 14 янв 2009, 14:28


Вернуться в *nix

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

cron