Выполнил: Студент группы ТО-31
Панечкин А.Е.
Руководитель:
Шойко А.З.
Практическая работа №4. Настройка загрузчика GRUBПервые шаги
При первом сравнении GRUB со старым GRUB Legacy самым весомым различием оказывается измененная структура файлов конфигурации. Настройка GRUB производится теперь принципиально иным способом - основным файлом конфигурации является «/boot/grub/grub.cfg». Однако же, не торопитесь править его так, как привыкли это делать с «menu.lst» в GRUB Legacy. При внимательном прочтении мы видим в начале файла «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» генерируется автоматически с использованием нескольких скриптов. Поэтому после следующего обновления GRUB ваш «grub.cfg» будет создан заново, и все ваши правки будут утрачены. Кроме файла «grub.cfg», отвечающего за загрузочное меню, имеются файл «/etc/default/grub» и папка «/etc/grub.d». Рассмотрим их подробнее. /etc/default/grubДанный файл содержит в себе основные настройки для GRUB. Через него, собственно, они и изменяются. Для наглядности ниже приводится примерное содержимое этого файла: ![]() Консоль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"
Файл представляет из себя набор опций в понятном формате ОПЦИЯ=ЗНАЧЕНИЕ. Изменение стандартного пункта загрузкиПо умолчанию стандартный пункт (выделенный при показе меню) - верхний в списке. После установки Ubuntu она окажется наверху, а Windows, например, будет последним пунктом. Значением «GRUB_DEFAULT» является номер пункта меню, который должен быть выбран стандартным. Чтобы выбрать другой пункт, нам нужно узнать, каким по счету он будет в списке. Есть два варианта:
![]() Внимание
Нумерация пунктов меню начинается с нуля. Значение по умолчанию - 0, поэтому и выбирается первый пункт.
Пятому сверху пункту будет соответствовать значение 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», значение задается в секундах. Если поставить значение «-1», то меню будет отображаться до тех пор, пока пользователь не выберет какой-либо пункт
Обратите внимание, что цифра указывается в кавычках. В нашем примере это значение - 2, то есть меню отображается две секунды. "Скрытое" менюВ случае, если на компьютере установлена только Ubuntu, меню загрузки по умолчанию не будет отображаться, а GRUB будет загружать вас напрямую в систему. Однако же, иногда может возникнуть необходимость загрузиться с другим ядром или же запустить проверку памяти. Для этого предусмотрено «скрытое меню» за него отвечает параметр «GRUB_HIDDEN_TIMEOUT». В случае, когда установлены другие ОС, этот параметр закомментирован (# в начале строки). Данное значение позволит приостановит загрузку на заданное количество секунд, давая пользователю возможность вызвать меню загрузки, нажав Esc. Если значение установлено в 0, то задержки не будет, однако вызвать меню, можно удерживая при загрузке Shift
Параметр «GRUB_HIDDEN_TIMEOUT_QUIET» отвечает за отображение таймера во время паузы. Если его значение «true» таймер отображаться не будет, а со значением «false» будет. Чтобы GRUB отображал меню со списком установленных операционных систем, без нажатия клавиш вызова меню (например Shift или Esc) необходимо:
sudo gedit /etc/default/grub
GRUB_TIMEOUT="10"
#GRUB_HIDDEN_TIMEOUT=0
sudo update-grub Изменение стандартных параметров загрузки ядраИногда бывает необходимо загружать ядро системы с какими-либо особыми параметрами (например, для корректной работы специфического оборудования). В этом случае весьма полезен будет параметр «GRUB_CMDLINE_LINUX_DEFAULT» он отвечает за те параметры, с которыми запускаются ядра при загрузке. Его значение по умолчанию - «quiet splash»: происходит показ графической заставки при запуске системы без отображения какой-либо текстовой информации. Вы можете добавить необходимые вам параметра запуска ядра, приведя это значение к виду «quiet splash your_param1 your_param2», то есть дописав через пробел нужные параметры. ПримерЧтобы заменить графическую заставку во время загрузки на информацию о загрузке компонентов системы (это позволит проследить за процессом загрузки и выявить неполадки). Необходимо заменить строчку: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" На следующую: GRUB_CMDLINE_LINUX_DEFAULT="" /etc/grub.dЭта папка содержит в себе скрипты, которые используются для создания файла «grub.cfg». При обновлении GRUB они находят все установленные на компьютере системы и ядра и формируют в файле «grub.cfg» меню загрузки, которое мы и видим. Два основных из них:
Файл «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 и изменим название самого пункта. В итоге получаем: ![]() Консоль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 не является обязательной она лишь будет сигнализировать нам о том, что наш пункт найден и добавлен при обновлении GRUB. Команды консоли GRUBЧтобы попасть в консоль, нужно нажать клавишу C во время отображения меню загрузки. lsДовольно универсальная команда при использовании в чистом виде выдает список жестких дисков и разделов. Также она может быть использована как одноименная команда в Linux - для вывода содержимого папки. например: ls /boot/grub Еще одно полезное свойство комадны «ls» - она позволят получить информацию о любом разделе: ls (hd0,5) Команда сообщит нам тип файловой системы на разделе, метку раздела (если таковая имеется), UUID и дату последнего изменения данных на разделе (в формате UTC). catДанная команда выводит содержимое заданного файла, используется в формате: cat /путь/имя_файла linuxАналог команды «kernel» в GRUB Legacy. Загружает указанное Linux-ядро: linux файл_ядра опция1=значение опция2 опция3 Например, так: linux /boot/vmlinuz-2.6.32-020632-generic root=/dev/sda5 single initrdЗагружает указанный initrd-образ. Используется так: initrd /boot/initrd.img-2.6.32-020632-generic Обратите внимание, что версия initrd должна соответствовать версии загружаемого ядра!
chainloaderПередает управление загрузкой по цепочке другому загрузчику (загрузчик ищется на заданном в качестве root разделе). В общем случае требует указания файла для загрузки: chainloader /путь/имя_файла Для (загрузчика Windows) можно использовать: chainloader +1 boot rootПри использовании без параметров сообщает, какой раздел сейчас используется в качестве корневого и тип файловой системы на этом разделе, также команда может быть использована для задания другого root-раздела. Раздел задается в «grub device» - формате »(hd*,*)». например: root (hd0,5) После задания раздела команда сообщит новый root-раздел и тип файловой системы. Примечание: «root hd(*,*)» не всегда корректно срабатывает. более предпочтительным вариантом является «set root» (см. ниже) setВесьма универсальная команда для изменения различных параметров. Служит для задания значений переменных и используется в формате: set переменная=значение Наиболее необходимое ее применение - для задания root-раздела, например: set root=(hd0,5) Также с ее помощью можно, например, «на лету» изменить цвет текста в меню и консоли, что позволяет опробовать цветовую схему перед установкой ее в качестве основной. Для этого изменяем переменные «color_normal» - для обычного пункта (и текста в консоли) и «color_highlight» для выделенного пункта соответственно. Например, попробуем такой вариант: set color_normal=magenta/green set color_highlight=light-blue/black searchСлужит для поиска раздела по UUID, метке или заданному файлу. Имеет следующие ключи:
lsfontsКоманда отобразит список загруженных в настоящий момент шрифтов. helpПри использовании в чистом виде выведет список доступных команд. В формате: help r Выведет справку по всем командам, начинающимся на «r». help search Отобразит справку по команде «search» haltВыключение компьютера. rebootПерезагрузит компьютер. background_imageПозволяет «на лету» изменить фоновое изображение. Используется в формате: background_image /путь/имя_файла Дает замечательную возможность посмотреть на выбранную картинку в действии, избегая лишних перезагрузок. В сочетании с заменой цветов через set позволит довольно быстро подобрать подходящий вариант оформления. Данная команда не заменит ваши настройки оформления, фон будет изменен лишь на текущий сеанс.
При использовании без параметров сбросит текущее фоновое изображение. Однако, заданные цвета останутся, так что если у вас черный цвет текста - на черном фоне вы его не увидите. terminal_output.consoleПозволяет переключиться на обычную черно-белую цветовую гамму. Весьма полезно при работе с консолью в том случае, если у вас установлено фоновое изображение. Картинка на фоне - это, конечно, красиво, но на некоторых участках фона может быть не виден текст. Применение измененийПосле того, как мы отредактировали и сохранили наши файлы. Нужно закончить дело, обновив файл «grub.cfg». Это довольно просто - нужно всего лишь выполнить команду: sudo update-grub После этого смело перезагружаемся и видим, что все работает как надо. Нюанс с нумерацией дисков и разделовВ GRUB имеется еще одно важное отличие от старого GRUB Legacy, а именно изменилась нумерация разделов диска. Нумерация дисков идет с нуля, а нумерация разделов - с единицы! Если в GRUB Legacy первый раздел первого диска (sda1) именовался «hd0,0». То в GRUB, первый раздел первого диска (sda1) теперь будет «hd0,1». Создание дополнительного меню загрузкиСуть в том, что вместо уже знакомого «grub.cfg» можно загрузить свой файл настройки загрузочного меню со своей конфигурацией. Это позволяет создать дополнительное меню с другими пунктами, настройками, оформлением и т.д. Итак, создадим наш новый файл конфигурации. Создавать с нуля не будем, а скопируем «grub.cfg», дав новое имя: sudo cp /boot/grub/{grub,custom}.cfg Поскольку файл скопируется с правами 444, выставим ему права на запись: sudo chmod 744 /boot/grub/custom.cfg Теперь открываем его в любимом текстовом редакторе и изменяем: sudo gedit /boot/grub/custom.cfg Если вы в достаточной мере знаете структуру «grub.cfg» и понимаете, какие строки что делают, можно значительно сократить свой файл, убрал лишнее и привести его к более удобочитаемому виду.
Для задания фонового изображения найдем строку с Обратите внимание, что разрешение картинки должно соответствовать заданному выше разрешению экрана!
Строкой ниже мы можем задать цвета текста. Изменяются они так же, как и в »/etc/grub.d/05_debian_theme» (см. Настройка внешнего вида загрузчика GRUB). Можно проделать один интересный трюк: уберите строки с
Закончив с настройкой, перейдем к пунктам меню, они идут ниже. Измените их, удалите ненужные и добавьте новые, пересортируйте на свой вкус. Настроив свой файл, сохраните его Ctrl+S и закройте. Теперь необходимо добавить дополнительное меню. Для этого в файле »/etc/default/40_custom» добавим запись такого вида: ![]() Консольmenuentry "Название меню"{ configfile /boot/grub/custom.cfg } Если ваш путь к файлу отличается - исправьте его. Если вы используете отдельный boot-раздел, путь будет таким: »/grub/custom.cfg».
Также учтите, что «40_custom» должен заканчиваться пустой строкой!
Если вы хотите, чтобы ваше новое меню загружалось вместо стандартного «grub.cfg», установите новый пункт в качестве пункта по умолчанию, но перед этим проверьте новое меню на работоспособность. Обновите свой «grub.cfg» выполнив команду: sudo update-grub Теперь пункт перехода в дополнительное меню появится в главном, для того чтобы выйти обратно в главное меню, достаточно нажать Esc
В качестве образца пример файла «custom.cfg» (файл урезан до необходимого минимума): ![]() Консольhave_grubenv=true load_env ### выбранный пункт по умолчанию set default=0 ### таймаут меню set timeout=2 ### разрешение set gfxmode=800x600x32,800x600x24,800x600 insmod ext2 search -u 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 -s insmod gfxterm insmod vbe if terminal_output gfxterm ; then true ; else terminal gfxterm; fi insmod png ### фоновое изображение background_image /usr/share/images/grub/yellow.png ### настройка цветов set color_normal=black/black set menu_color_normal=green/light-blue set menu_color_highlight=red/blue menuentry "9.10 @ 2.6.32" { search -u 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 -s linux /boot/vmlinuz-2.6.32-020632-generic root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro quiet splash initrd /boot/initrd.img-2.6.32-020632-generic } menuentry "9.10 @ 2.6.32 (recovery)" { search -u 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 -s linux /boot/vmlinuz-2.6.32-020632-generic root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro single initrd /boot/initrd.img-2.6.32-020632-generic } menuentry "windooz"{ search -u AC9C75E59C75AA8A -s chainloader +1 } |