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 #
/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"
Изменение стандартного пункта загрузки
По умолчанию стандартный пункт (выделенный при показе меню) - верхний в списке. После установки 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="Ubuntu, Linux 2.6.32-020632rc6-generic"
Изменение времени отображения меню
По умолчанию меню загрузки отображается 10 секунд, после чего загружается стандартный пункт (если раньше не нажат enter и не выбран другой пункт, что останавливает таймер). С изменением задержки все совсем просто. За эту задержку отвечает параметр "GRUB_TIMEOUT" (не путайте с "GRUB_HIDDEN_TIMEOUT"!). Значение задается в секундах. Обратите внимание, что цифра указывается в кавычках. В нашем примере это значение - 2, то есть меню отображается две секунды. Кроме того, есть одна хитрость. Если поставить значение "-1", то меню будет отображаться до тех пор, пока пользователь не выберет какой-либо пункт. То есть без всяких таймеров и утекающих секунд."Скрытое" меню
В случае, если на компьютере установлена только Ubuntu, меню загрузки по умолчанию не будет отображаться, а grub2 будет загружать вас напрямую в систему. однако же, иногда может возникнуть необходимость загрузиться с другим ядром или же запустить проверку памяти. для этого предусмотрено "скрытое меню". за него отвечает параметр "GRUB_HIDDEN_TIMEOUT". в случае, когда установлены другие ОС, этот параметр закомментирован (# в начале строки).Если в меню загрузки присутствует Windows,этот параметр игнорируется, даже если он раскомментирован,т.е.использовать скрытое меню невозможно. В случае с единственной ОС он будет активен. значение его задает задержку в секундах. 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=""
Обратите внимание, чтобы ядру не передавались лишние параметры через GRUB_CMDLINE_LINUX, если он не пустой. Все вышеописанное работает для
GRUB_CMDLINE_LINUX=""
Остальные настройки файла /etc/default/grub
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_TERMINAL=console
GRUB_DISABLE_LINUX_UUID=true
GRUB_GFXMODE=640x480
Если строка GRUB_GFXMODE=640x480 закомментирована или выбранное разрешение недоступно, тогда GRUB2 использует настройки по умолчанию, определенные скриптом /etc/grub.d/00_header.
Несколько советов: - Настройка одинакового разрешения в меню GRUB2 и вашей операционной системы, позволит немного уменьшить время загрузки. - В качестве дополнительной опции, пользователь может задать битность изображения, просто добавив необходимые данные в настройку разрешения. Например так: 1280x1024x24 или 640x480x32. - Пользователь может добавить одновременно несколько разрешений. Как это работает? А вот так, если GRUB2 не может использовать первое заданное разрешение, тогда он будет пробовать следующее и т.д. Перечень разрешений необходимо разделять запятыми. Пример: 1280x1024x16,800x600x24,640x480. - Если используется строка GRUB_GFXMODE= и при выполнении команды sudo update-grub вам выдается сообщение not found, просто попробуйте или добавить или изменить битность изображения.
GRUB_DISABLE_LINUX_RECOVERY=true
GRUB_DISABLE_OS_PROBER="true"
/etc/grub.d
Эта папка содержит в себе скрипты, которые используются при создании "grub.cfg". При обновлении grub2 они находят все установленные на компьютере системы и ядра и формируют в "grub.cfg" меню загрузки, которое мы и видим. Два основных из них - "10_linux" и "30_os-prober" отвечают за поиск linux-ядер и остальных ОС на других разделах соотвественно. Файл "40_custom" позволяет добавлять свои пункты загрузки. Это может быть полезно, если вы, например, хотите добавить какие-то особые варианты загрузки системы.Примечание: файл "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 }
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 }
Применение изменений
После того, как мы отредактировали и сохранили наши файлы, радоваться еще рано. Теперь нужно закончить дело, обновив наш "/boot/grub/grub.cfg". Это довольно просто - нужно всего лишь выполнить командуsudo 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
Украшательства
Установка фонового изображения
Вы можете выбрать и установить полноцветное изображение в качестве фона в меню загрузки grub2. Размер изображения должен соответствовать разрешению grub2 (по умолчанию - 640x480, задается в "/etc/default/grub"), формат файла - png или tga. Вы можете установить готовый набор из нескольких подходящих для grub2 изображений, выполнив командуsudo apt-get install grub2-splashimages
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,/usr/share/images/grub}/winter.{png,tga} ; do
Заметьте, что между именем файла и вторыми фигурными скобками должна стоять точка! Как это работает: grub2 последовательно просматривает заданные папки и ищет в них файл с заданным именем и одним из перечисленных расширений. Цикл прекращается как только найдено первое подходящее изображение. Таким образом, файл с подходящим именем присутствует в нескольких папках, будет взят файл из той папки, которая раньше указана в списке. Аналогично, если изображение представлено в разных форматах (например, "image.png" и "image.tga") - выбран будет файл с тем расширение, которое первым указано во вторых фигурных скобках. Интересности: вы можете добавить любую папку с изображениями, владельцем которой вы являетесь. Это упростит добавление/изменение изображений. Однако, заметьте: при этом root должен иметь как минимум права r-x на эту папку. Также не стоит добавлять папки с шифрованного home-раздела, т.к. на момент загрузки он еще не примонтирован. Лучше просто сделайте себя владельцем папки "/usr/share/images/grub" и храните все картинки там. Помимо PNG и TGA поддерживается также формат JPEG. Но на текущий момент реализована только поддержка jpeg с 8-битным цветом. Поэтому используйте jpeg-файлы только если вы понимаете, что такое глубина цвета и как сохранить изображение в 8-битном цвете. Для того, чтобы добавить поддержку jpeg-файлов, приведите вторые фигурные скобки к такому виду: "{png,tga,jpg,jpeg}".
Обратите внимание, что в последних, на данный момент (23.10.2010), версиях GRUB, установка фонового изображения упростилась ещё больше. Теперь для установки фонового изображения достаточно в строке:
WALLPAPER="/usr/share/images/desktop-base/moreblue-orbit-grub.png"
sudo update-grub
Настройка цвета пунктов меню
Цвета пунктов меню также задаются в файле "/etc/grub.d/05_debian_theme". В самом начале файла нужно всего-навсего изменить значения переменных:COLOR_NORMAL= COLOR_HIGHLIGHT=
black - черный; blue - синий; brown - коричневый; cyan - голубой; dark-gray - темно-серый; green - зеленый; light-cyan - светло-голубой; light-blue - светло-синий; light-green - ярко-зеленый; light-gray - серый; light-magenta - розовый; light-red - светло-красный; magenta - пурпурный; red - красный; white - белый; yellow - желтый.
Заметьте, что black (черный) при использовании в качестве второго параметра (т.е. цвета фона) в результате даст прозрачный фон, без какой-либо заливки, текст прямо поверх картинки. Использование black в качестве цвета текста дает черный текст.
Пример
COLOR_NORMAL=black/black COLOR_HIGHLIGHT=black/light-gray
Восстановление GRUB2
После, например, установки Windows, вы можете столкнуться с тем, что при загрузке будет отображаться только меню загрузки Windows, а меню grub2 вы не увидите вовсе, что приведет к невозможности загрузить что-либо кроме Windows. Такое происходит из-за того, что Windows при установке затирает загрузочную область жесткого диска (так назывемый MBR-раздел), удаляя оттуда файлы загрузчика grub2. Для восстановления grub2 вам понадобится liveCD Ubuntu 10.04 или любой другой современной системы, включающей grub2 в свой дистрибутив.Востановление GRUB2 с LiveCD
Загрузитесь с вашего LiveCD (предварительно выберите меню устройств загрузки при наличии такового или же установите cd-привод первым boot device в BIOS). Запустите консоль. Для начала нам нужно будет узнать, на каком диске и на каком разделе установлена Ubuntu. Если вы не помните этого - воспользуйтесь командойsudo fdisk -l
sudo mount /dev/sda5 /mnt
sudo mount /dev/sda3 /mnt/boot
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo chroot /mnt
sudo fdisk -l
grub-install /dev/sda
grub-install --recheck /dev/sda
grub-install --recheck --no-floppy /dev/sda
exit
sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt/boot
sudo umount /mnt
Востановление GRUB2 с LiveCD. способ 2 (без chroot)
Нам опять же понадобится LiveCD Ubuntu 9.10 или другой системы с поддержкой grub2. В отличие от предыдущего способа, мы не будем запускать установщик через chroot, что позволит сократить количество требуемых действий. Итак, загружаемся с выбранного LiveCD, запускаем консоль. Вместо использования chroot мы воспользуемся ключом "--root-directory". Но для начала убедимся, что данная опция поддерживается нашей live-системой. Если вы работаете с Ubuntu 9.10 Desktop, можно не волноваться. В ином случае выполнитеman grub-install
sudo fdisk -l
sudo blkid
sudo mount /dev/sda5 /mnt
sudo mount /dev/sda2 /mnt/boot
sudo grub-install --root-directory=/mnt /dev/sda
(hd0) /dev/sda (hd1) /dev/sdb
Восстановление GRUB2 с LiveCD. способ 3 (совсем простой)
В случае, если нужно только восстановить MBR диска (например, после (пере)установки Windows), все можно сделать еще проще, вообще ничего не монтируя. Грузимся с LiveCD. Определяем нужный жесткий диск с помощью "sudo fdisk -l". Если он единственный - значит, sda. Вводим командуsudo grub-install --root-directory=/tmp /dev/sda
Загрузка системы при частичной неработоспособности GRUB2
В некоторых случаях может оказаться так, что отдельнные файлы grub2 будут повреждены (например, в результате сбоя при выполнение "update-grub"). Однако, иногда есть шанс загрузиться в свою систему и восстановить grub2 из нее без необходимости полной переустановки оного. Если при загрузке grub2 вы видите сообщения об ошибках - не спешите предаваться панике. Все может быть еще вполне поправимо. На данный момент наша главная цель - попасть в консоль grub2. Вы можете сразу увидеть ее на экране, или же будет предложено что-либо нажать или выбрать для запуска консоли. В любом случае, если вам удалось запустить консоль - радуйтесь, шансы на спасение увеличены! Консоль grub2 похожа на более привычную оболочку bash. Здесь также поддерживается автодополнение команд по нажатию tab. Если же нажать tab в пустой строке - мы увидим полный список доступных команд. Что ж, приступим к процедуре запуска системы. Для начала нам нужно задать root-раздел, то есть раздел, на который установлена наша система. В моем случае это "/dev/sda5" (в grub2 разделы задаются в виде "hd*,*". Если вы мало знакомы с нумерацией разделов в grub2 - почитайте пункт "нюанс с нумерацией дисков и разделов" в I главе). root-раздел задается командойset root=(hd0,5)
(hd0,1) (hd0,2) (hd1.1) (hd2,1)
(hd0,5): filesystem is ext2
linux /boot/vmlinuz-2.6.32-020632rc6-generic root=/dev/sda5
boot
initrd /boot/initrd.img-2.6.32-020632rc6-generic
Совет
Вы можете легко и быстро сделать себе инструкцию по аварийному запуску системы. Откройте ваш "/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 }
set root=(hd0,5) linux /boot/vmlinuz-2.6.32-020632rc6-generic root=/dev/sda5 initrd /boot/initrd.img-2.6.32-020632rc6-generic boot
Если же вышеприведенный метод не сработал (ядро не загрузилось или же вы вовсе не можете попасть в консоль grub2) и ничего не загружается - тут уж дело идет к переустановке grub2, что описана выше.
Загрузка Windows аналогичным образом
В случае неработоспособности Ubuntu вы можете загрузить другую установленную систему при наличии таковой. Для linux-систем схема будет той же: set root - linux - initrd - boot. Для Windows же все будет даже проще. Для начала так же укажем корневой раздел. На этот раз уже тот, на котором установлена Windows. В моем случае это "/dev/sda1", и команда будет иметь такой вид:set root=(hd0,1)
chainloader +1
boot
Advanced
Даунгрейд до grub-legacy (возврат старой версии). В случае, если ваша дружба с grub2 так и не состоялась, вы можете заменить его на старый grub (ныне известный как grub-legacy), который на текущий момент более стабилен и привычен для многих. Для начала, конечно же, сделаем бэкап важных файлов. Создайте резервную копию файлов конфигурации как описано в конце I-ой главы. Также желательно забэкапить папку "/boot/grub". Для этого выполнитеsudo cp -R /boot/grub{,.bak}
sudo apt-get purge grub2 grub-pc
sudo apt-get install grub
sudo update-grub
sudo grub-install /dev/sda
Из оригинального руководства не понятно, что делать с пакетом "grub-common". Данный пакет является зависимостью пакета "grub-pc", но вместе с последним не удаляется. Однако же, использование его вместе со старой версией grub - не лучшее решение. Наиболее безопасный вариант - после удаления "grub-pc" выполнить
sudo apt-get autoremove
Cоздание аварийно-спасательного GRUB2-liveUSB
Здесь мы рассмотрим, как создать загрузочную флэшку с установленным на нее grub2, через который можно будет загрузиться в случае, если grub2 на жестком диске безнадежно испорчен. Есть, конечно, возможность восстановления с LiveCD, но никогда не помешает дополнительная страховка на случай, если это не спасет. Тем более, что потребуется для этого не так уж много. Итак, имеем флэшку. На этой самой флэшке нужно будет создать небольшой раздел для установки туда grub2. Здесь подразумевается, что вы уметее создавать и форматировать разделы. Если нет - установите gparted, почитайте его справку и другую доступную информацию. Итак, откусим кусок свободного места и создадим небольшой раздел. 100 мб будет более чем достаточно (впрочем, хватит и 50). В качестве файловой системы выберите ext4/ext3. Причина проста: reiserfs займет на 100-мегабайтном разделе 32 мб, а ext4 — всего 8. Закончив с разделом, загрузитесь с LiveCD. Примонтируйте свежесозданный раздел как папку «/boot/grub» запущенной live-системы (здесь и далее будем считать, что раздел именуется «/dev/sdb1». Подставляйте свое значение, если это не так)sudo mount /dev/sdb1 /boot/grub
sudo grub-install /dev/sdb
sudo umount /boot/grub
sudo mount /dev/sdb1 /mnt
sudo mkdir -p /mnt/config/{default,grub.d}
sudo cp -p /etc/grub.d/* /mnt/config/grub.d/
sudo cp -p /etc/default/grub /mnt/config/default
sudo mount --bind /mnt/config/default/grub /etc/default/grub sudo mount --bind /mnt/config/grub.d /etc/grub.d sudo grub-mkconfig -o /mnt/grub.cfg sudo umount /etc/default/grub sudo umount /etc/grub.d
/mnt/config/grub-usb-update
sudo umount /mnt
Консоль grub2 - команды и хитрости
Здесь мы рассмотрим некоторые команды консоли grub2. Все мы разбирать не будем, а изучим лишь самые необходимые и полезные. Напомню, чтобы попасть в консоль, нужно нажать "c" во время отображения меню загрузки. Итак, начнем!ls
Довольно универсальная команда. при использовании в чистом виде выдает список жестких дисков и разделов. Также она может быть использована как одноименная команда в linux - для вывода содержимого папки. Например,ls /boot/grub
ls (hd0,5)
cat
Данная команда аналогична своей тезке в linux - она выводит содержимое заданного файла. Используется в форматеcat /путь/имя_файл
linux
Загружает указанное linux-ядро. Аналог команды "kernel" в grub-legacy. Используется в формате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
chainloader
Передает управление загрузкой по цепочке другому загрузчику (загрузчик ищется на заданном в качестве root разделе). В общем случае требует указания файла для загрузки:chainloader /путь/имя_файла
chainloader +1
boot
root
При использовании без параметров сообщает, какой раздел сейчас используется в качестве корневого (по умолчанию - корневой раздел системы, на которую установлен текущий grub2) и тип файловой системы на этом разделе (для ext3/4 тип будет указан как ext2, это нормально). Также команда может быть использована для задания другого root-раздела. Раздел задается в "grub device" формате, то есть "(hd*,*)". Например:root (hd0,5)
set
Весьма универсальная команда для изменения различных параметров. Служит для задания значений переменных и используется в форматеset переменная=значение
set root=(hd0,5)
set color_normal=magenta/green set color_highlight=light-blue/black
search
Пожалуй, одна из самых полезных команд. Потомок "find" и "uuid" из grub-legacy. Служит для поиска раздела по UUID, метке или заданному файлу. Имеет следующие ключи: -u (или --fs-uuid) - поиск раздела по UUID -l (или --label) - поиск по метке раздела -f (или --file) - поиск по указанному файлу -n (или --no-floppy) - не проверять флоппи-дисковод (чтоб не трещал) -s (или --set) - установить найденный раздел в качестве значения заданной переменной. Зачем это нужно? Дело в том, что при подключении/отключении жестких дисков (и в некоторых других случаях) нумерацию дисков и разделов может "поехать", и тогда наша команда "set root=(hd0,5)" в "grub.cfg" будет вести или в никуда или на раздел не того диска. Поэтому в "grub.cfg" вы найдете строчку с "search". Для поиска раздела с известным нам uuid запустим "search" с ключом -"u":search -u uuid_нужного_раздела
search -f /grub/grub.cfg
search -l C_drive -s
lsfonts
Эта команда отобразит список загруженных в настоящий момент шрифтов (полезно для тех, кто все-таки решил поразвлекаться с настройкой шрифтов в grub2, конвертацией их в .pf-формат и прочим).help
При использовании в чистом виде выведет список доступных команд. В форматеhelp r
help search
halt
Выключит компьютер (в теории) или введет его в ступор (у меня ).reboot
Перезагрузит компьютерbackground_image
Позволяет "на лету" изменить фоновое изображение. Используется в форматеbackground_image /путь/имя_файла
vbeinfo
Выведет список поддерживаемых видеорежимов. Этой командой полезно будет воспользоваться перед настройкой разрешения в "/etc/default/grub".configfile
Потомок одноименной команды в grub-legacy. Позвоялет загрузить другой файл конфигурации с другим меню вместо текущего "grub.cfg". Создав новый файл, вы можете сделать другое меню с другими настройками, оформлением и пунктами, не захламаляя основное меню. Используется так:configfile /путь/другой_файл_меню
terminal_output.console
Позволяет переключиться на обычную черно-белую цветовую гамму. Весьма полезно при работе с консолью в том случае, если у вас установлено фоновое изображение. Картинка на фоне - это, конечно, красиво, но на некоторых участках фона может быть не виден текст (если картинка не везде однородная). Выполнив эту команду, вы получите контрастную схему (белый текст на черном фоне) и хороший крупный шрифт. Если вы часто используете консоль grub2, имеет смысл добавить в 40_custom пункт с этой командой, например:menuentry "black&white mode"{ terminal_output.console }
Премудрости ;)
Ну и для полного счастья ниже я приведу небольшой список премудростей, которые помогут вам облегчить работу в консоли: уже упомянутое автодополнение команд (как в bash) по нажатию tab. tab в пустой строке выведет полный список доступных команд. Это самое автодополнение имеет нетривиальный способ использования. Если вы не помните, какой раздел вам нужен, напишите "root (hd0," (или "root (hd1." и далее по списку) и нажмите tab. Будет выведен список разделов заданного диска с указанием файловых систем, UUID и времени последнего изменения. Имя раздела вида "(hd*,*)" можно использовать в начале пути к файлу, например, вот так:cat (hd0,6)/home/username/папка/файл
ls (hd0,3)/
Загрузка другого grub2 из текущего
Как выяснилось в ходе экспериментов, все весьма просто. загружаемся в grub2, переходим в консоль нажатием "c". Загрузка другого grub2 происходит по методу "set root - chainloader - boot". Для начала определимся с диском, в MBR которого прописан grub2, который мы собираемся загрузить. Выполните командуls
set root=(hd1)
root (hd1)
chainloader +1
boot
Создание дополнительных меню загрузки
В этом разделе мы рассмотрим создание своих собственных загрузочных меню со своей конфигурацией. Суть в том, что вместо уже знакомого нам "grub.cfg" можно загрузить другой файл конфигурации. Это позволяет создать дополнительное меню, совершенно другое — с другими пунктами, настройками. оформлением. Те, кто имел дело с установкой ArchLinux, могли заметить несколько подменю в grub установочного диска. Примерно такой метод мы и будем использовать. Итак, создадим наш новый файл конфигурации. Писать с нуля мы его, конечно же, не будем, а сотворим на основе имеющегося "grub.cfg". Для чего скопируем последний, дав новое имя, например:sudo cp /boot/grub/{grub,custom}.cfg
sudo chmod 744 /boot/grub/custom.cfg
set gfxmode=1024x768x32,1024x768x24,1024x768
menuentry "my very custom menu"{ configfile /boot/grub/custom.cfg }
sudo update-grub
Пример файла "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 }
MBR — бэкап, восстановление и загрузка через образ
Для тех, кто не знает, поясню: MBR — фрагмент первого сектора жесктого диска, в котором прописан код, запускающий загрузчик. При загрузке с диска оттуда считывается информация о том, как запустить загрузчик. grub2 прописывает свой код в MBR при установке (и это же мы делаем, выполняя «grub-install … /dev/sda»). На случай повреждения MBR (причины бывают разными) и для возможности быстрого восстановления работоспособности grub2 полезно будет иметь резервную копию MBR жесткого диска. Чтобы создать ее, сначала нужно определиться, с какого из жестких дисков производится загрузка (можно посмотреть с помощью «sudo fdisk -l»). После этого скопируем первый сектор (первые 512 байт) диска в файл с помощью команды dd:sudo dd if=/dev/sda of=mbr.bin bs=512 count=1
set root=(hd1)
root
chainloader (hd0,1)/mbr.bin
boot
Примечание: в MBR (и, соответственно, в полученном образе) нет четкого указания жесткого диска, поэтому через наш образ загрузится grub2 с того раздела, который был указан в качестве корневого (root) в консоли grub2. Загрузив родную систему, мы можем восстановить ид-под нее MBR диска. Но если лишнего grub2 у вас под рукой нет, действовать мы будем с LiveCD.
Грузимся с LiveCD любой linux-системы (в данном случае поддержка grub2 роли не играет). Для восстановления MBR нам нужно будет «раскатать» ранее созданный образ обратно в первый сектор диска. Но для начала проверим таблицу разделов, ведь вполне возможно, что grub2 не грузился и из-за нее. Для этого выполните
sudo fdisk -l
sudo dd if=/mnt/mbr.bin of=/dev/sda bs=446 count=1
Еще одна полезная возможность — полученный образ можно использовать для загрузки grub2 через NTLDR (в случае, если grub2 не загружает нормально Windows, и вы хотите сделать NTLDR основным загрузчиком). Но об этом как-нибудь позже.
Создание LiveCD с GRUB2
В случае, если ваш компьютер не поддреживает загрузку с usb, можно создать cd-диск с grub2, через который можно будет загрузить свою систему при неисправности основного grub2. Для начала создадим в удобном месте папку, в которой будем собирать наш диск, а в ней вложенные папки "/boot" и "/boot/grub":mkdir -p tmp/iso/boot/grub
cp /usr/share/grub/unicode.pf2 tmp/iso/boot/grub
loadfont /boot/grub/unicode.pf2 insmod gfxterm insmod vbe if terminal_output gfxterm ; then true ; else terminal gfxterm; fi
menuentry "9.10 @ 2.6.32" { search -u uuid_раздела -s linux /boot/vmlinuz-xxxxxxx root=/dev/sdXY quiet splash single или_что_там_еще initrd /boot/initrd.img-xxxxxx }
menuentry "winxp" { searсh -u uuid_раздела_с_win -s chainloader +1 }
grub-mkrescue --overlay=tmp/iso/ tmp/grub.iso
Пример файла "grub.cfg"
Как и обещал, привожу пример файла "grub.cfg", корректно работающего на LiveCD с комментариями:### модуль файловой системы iso9660 (cd-диск) insmod iso9660 ### модуль для распознавания таблицы разделов жесткого диска! must have!! insmod part_msdos ### выбранный пункт по умолчанию set default=0 ### таймаут меню set timeout=2 ### разрешение set gfxmode=800x600x32,800x600x24,800x600 ### модуль файловой системы ext2/3/4 insmod ext2 ### загружаем шрифт и включаем графическое меню loadfont /boot/grub/unicode.pf2 insmod gfxterm insmod vbe if terminal_output gfxterm ; then true ; else terminal gfxterm; fi ### настройка цветов set color_normal=white/black set menu_color_normal=green/black set menu_color_highlight=light-blue/black #0 menuentry "9.10 @ 2.6.33rc1" { search -u 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 -s linux /boot/vmlinuz-2.6.33-020633rc1-generic
root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro quiet splash initrd /boot/initrd.img-2.6.33-020633rc1-generic } #1 menuentry "9.10 @ 2.6.33rc1 (recovery)" { search -u 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 -s linux /boot/vmlinuz-2.6.33-020633rc1-generic
root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro single initrd /boot/initrd.img-2.6.33-020633rc1-generic } #2 menuentry "windooz"{ search -u AC9C75E59C75AA8A -s chainloader +1 }
Создание LiveCD с GRUB2 на базе имеющегося дистрибутива
(за идею спасибо тов. komix)Поскольку тратить целую болванку ради записи iso-шника с grub2 в 3 мегабайта было бы глупо, можно совместить приятное с полезным, а именно: LiveCD с grub2 и установочный диск какой-нибудь системы. Исходить мы будем из того, что имеется iso некоего LiveCD, к которому мы хотим прикрутить grub2. Порядок действий будет в целом аналогичен описанному в предыдущем пункте. Первым делом создадим папку, в которой будем собирать наш новый диск. В ней же создадим папку /boot/grub и папку, в которую будут помещены файлы нашей live-системы (я назову ее live):
mkdir -p tmp/iso/{boot/grub,live}
sudo mount -o loop downloads/some-live-system.iso tmp/iso/live
menuentry "Parted Magic" { linux /live/bzImage initrd /live/initramfs }
sudo grub-mkrescue --overlay=tmp/iso tmp/my-live-system-grub2.iso
sudo umount tmp/iso/live
Добавление в меню пункта загрузки с CD/DVD & USB
Средствами исключительно GRUB загрузиться с CD-ROM/USB не получится, но "мир не без добрых людей". Существуют мультизагрузчики, не такие многофункциональные, как GRUB, но, зато, умеющие грузить систему с CD-ROM/USB, даже если BIOS такой возможности не предоставляет.Способ 1. Загрузка с CD & USB посредством Plop Boot Manager
Сама загрузка будет осуществляться посредством Plop Boot Manager. Для этого качаем архив Plop'а, откуда извлекаем файл plpbt.bin, и кидаем его в папку /boot/ нашей системы. Далее открываем файл /etc/grub.d/40_custom:nano /etc/grub.d/40_custom
menuentry "Boot CD/DVD & USB -> Plop Boot Manager" { set root=(hd0,1) linux16 /boot/plpbt.bin }
sudo update-grub
Способ 2. Загрузка с CD посредством Smart Boot Manager
В этом случае загрузка будет осуществляться посредством Smart Boot Manager. Итак, качаем два файлика: memdisk.bin - "крохотный" файлик из пакета Питера Анвина syslinux и sbootmgr.dsk - образ загружаемой дискеты из Smart Boot Manager. Кидаем оба файлика в папку /boot/ нашей системы. Далее открываем файл /etc/grub.d/40_custom:nano /etc/grub.d/40_custom
menuentry "Boot CD/DVD" { set root=(hd0,1) linux16 /boot/memdisk.bin initrd16 /boot/sbootmgr.dsk }
sudo update-grub
Комментариев нет:
Отправить комментарий