Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: [HOWTO] Настройка и редактирование GRUB 2  (Прочитано 976297 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dimas000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
I. 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". при этом значение должно указываться в кавычках! данный способ удобен тем, что после обновления ядра не придется изменять настройки из-за съехавшей нумерации
(Нажмите, чтобы показать/скрыть)

изменение времени отображения меню.
по умолчанию меню загрузки отображается 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", то есть дописав через пробел нужные параметры.
(Нажмите, чтобы показать/скрыть)

/etc/grub.d
эта папка содержит в себе скрипты, которые используются при создании "grub.cfg". при обновлении grub2 они находят все установленные на компьютере системы и ядра и формируют в "grub.cfg" меню загрузки, которое мы и видим. два основных из них - "10_linux" и "30_os-prober" отвечают за поиск linux-ядер и остальных ОС на других разделах соотвественно.
файл "40_custom" позволяет добавлять свои пункты загрузки. это может быть полезно, если вы, например, хотите добавить какие-то особые варианты загрузки системы.
(Нажмите, чтобы показать/скрыть)
примечание: файл "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")

II. украшательства.
установка фонового изображения.
вы можете выбрать и установить полноцветное изображение в качестве фона в меню загрузки grub2. размер изображения должен соответствовать разрешению grub2 (по умолчанию - 640x480, задается в "/etc/default/grub"), формат файла - png или tga.
вы можете установить готовый набор из нескольких подходящих для grub2 изображений, выполнив команду
sudo apt-get install grub2-splashimages(не путайте пакет grub2-splashimages с пакетом grub-splashimages, который не совместим с grub2!). эти изображения будут помещены в папку "/usr/share/images/grub", которую нужно будет добавить в файл конфигурации (см. ниже).
фоновое изображение задается в файле "/etc/grub.d/05_debian_theme". найдите в нем строку такого вида:
for i in {/boot/grub,/usr/share/images/desktop-base}/moreblue-orbit-grub.{png,tga} ; doте, кто более-менее знаком с bash, узнают прием с перечислением в фигурных скобках. для остальных: все на так сложно, как может показаться. в первых фигурных скобках (в нашем примере - "{/boot/grub,/usr/share/images/desktop-base}") перечислены папки, в которых grub2 будет искать подходящие для установки изображения. далее (после слэша) указано имя файла изображения (без расширения!), которое мы хотим установить в качестве фона (здесь - "moreblue-orbit-grub"). вторые фигурные скобки ("{png,tga}") определяют расширения файлов, которые grub2 будет пытаться использовать в качестве фона. заметьте, что пункты в фигурных скобках перечисляются через запятую и не разделяются пробелами!
по умолчанию изображения ищутся в папках "/boot/grub" и "/usr/share/images/desktop-base". изображения из пакета grub2-splashimages у нас распаковались в "/usr/share/images/grub". поэтому мы должны добавить эту папку в список мест, где grub2 будет искать изображения. добавим еще один пункт в первые фигурные скобки.
сразу же определимся с выбором картинки. я выбрал последнюю, переименовав файл для удобства в "winter.tga". заменим имя ("moreblue-orbit-grub") на имя выбранной картинки (в моем случае - "winter"). в итоге получим такую строку:
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/gub" и храните все картинки там.
  • помимо PNG и TGA поддерживается также формат JPEG. но на текущий момент реализована только поддержка jpeg с 8-битным цветом. поэтому используйте jpeg-файлы только если вы понимаете, что такое глубина цвета и как сохранить изображение в 8-битном цвете. для того, чтобы добавить поддержку jpeg-файлов, приведите вторые фигурные скобки к такому виду: "{png,tga,jpg,jpeg}".

настройка цвета пунктов меню.
цвета пунктов меню также задаются в файле "/etc/grub.d/05_debian_theme". найдите ближе к концу файла следующую секцию:
if background_image `make_system_path_relative_to_its_root ${bg}` ; then
  set color_normal=black/black
  set color_highlight=black/light-gray
else
EOF
fi
здесь и настраиваются цвета для пунктов меню загрзки. строка "set color_normal" отвечает за цвета обычного (невыделенного) пункта меню. "set color_highlight" - за цвета выделенного пункта. вот эти две строки мы и будем изменять.
значение каждой из этих строк представляет собой два цвета, разделенные слэшем. первый цвет - это цвет текста. второй цвет - цвет фона строки.
вот список доступных цветов:
(Нажмите, чтобы показать/скрыть)
заметьте, что black (черный) при использовании в качестве второго параметра (т.е. цвета фона) в результате даст прозрачный фон, без какой-либо заливки, текст прямо поверх картинки. использование black в качестве цвета текста дает черный текст.
пример:
 set color_normal=black/black
  set color_highlight=black/light-gray
в моем случае заданы следующие параметры: обычный пункт - черный текст, прозрачный фон; выделенный пункт - черный текст, серая подсветка строки.
примечание: не перепутайте вышеописанную секцию с секцией "set_mono_theme", что в начале файла! последняя отвечает за цвета меню в том случае, если фоновое изображение отсутствует.

III. восстановление GRUB2.
после, например, установки Windows, вы можете столкнуться с тем, что при загрузке будет отображаться только меню загрузки Windows, а меню grub2 вы не увидите вовсе, что приведет к невозможности загрзуить что-либо кроме Windows. такое происходит из-за того, что Windows при установке затирает загрузочную область жесткого диска (так назывемый MBR-раздел), удаляя оттуда запись загрузчика grub2.
для восстановления grub2 вам понадобится liveCD Ubuntu 9.10 или любой другой современной системы, включающей grub2 в свой дистрибутив. архитектура LiveCD должна соответствовать архитектуре вашей системы! узнать текущую архитектуру можно с помощью команды "arch" или "uname -m". "i686" соответствует 32-битной архитектуре, "amd64" - 64-битной

востановление GRUB2 с LiveCD.
загрузитесь с вашего LiveCD (предварительно выберите меню устройств загрузки при наличии такового или же установите cd-привод первым boot device в BIOS). запустите консоль.
для начала нам нужно будет узнать, на каком диске и на каком разделе установлена Ubuntu. если вы не помните этого - воспользуйтесь командой
sudo fdisk -lдля работы нам понадобится /-раздел (root). примонтируйте его командой
sudo mount /dev/sda5 /mntв моем случае корневой раздел системы - /dev/sda5, вы же используйте свое значение. если у вас /boot сделан отдельным разделом, его также надо будет примонтировать:
sudo mount /dev/sda3 /mnt/bootтакже монтируем папку /dev нашей live-системы как /dev нашего root-раздела:
sudo mount --bind /dev /mnt/devи папку /proc как /proc root-раздела:
sudo mount --bind /proc /mnt/procтеперь выполняем следующую команду:
sudo chroot /mnt /bin/bashтеперь вы - root-пользователь в системе, корневым разделом которой считается /mnt, то есть корневой раздел вашей настоящей системы. и вот мы готовы обновить MBR-раздел жесткого диска, переустановив grub2. но для начала нам нужно определиться, с какого физического диска загружается наш компьютер. если у вас один жесткий диск, разбитый на разделы - он будет именоваться sda. если несколько - первый из них - sda, второй - sdb, и так далее. если вы не знаете, какой жесткий диск установлен в качестве загрузочного, посмотрите соответствующую опцию в BIOS. обычно жесткий диск указан по модели (например, так: ST9160310AS). чтобы узнать, какому диску в системе соответствует данная модель, выполните такую команду:
for d in /dev/sd[a-z] ; do echo "$d: $(sudo hdparm -I $d | grep -i 'model')" ; doneкроме того, в Ubuntu 9.10 можно воспользоваться утилитой palimpsest ("система - администрирование - дисковая утилита").
определившись с загрузочным диском (в нашем примере - sda), ставим на него grub2:
grub-install /dev/sdaесли вы столкнетесь с какими-либо ошибками - попробуйте перезапустить команду с ключом --recheck:
grub-install --recheck /dev/sdaобратите внимание: мы устанавливаем grub2 на физический диск (sda, sdb...), а не на раздел (sda3, sdb1...)!
если все прошло успешно, выходим из chroot командой
exitотмонтируем наши диски и папки:
/dev нашей live-системы:
sudo umount /mnt/dev/proc live-системы
sudo umount /mnt/procboot-раздел, если таковой монтировался отдельно:
sudo umount /mnt/bootи собственно, корневой раздел:
sudo umount /mntвсе! перезагружаемся, восстанавливаем порядок загрузки в BIOS (ставим жесткий диск на первое место) и смотрим результат.

востановление GRUB2 с LiveCD. способ 2 (без chroot)
нам опять же понадобится LiveCD Ubuntu 9.10 или другой системы с поддержкой grub2. в отличие от предыдущего способа, мы не будем запускать установщик через chroot, что позволит сократить количество требуемых действий.
итак, загружаемся с выбранного LiveCD, запускаем консоль. вместо использования chroot мы воспользуемся ключом "--root-directory". но для начала убедимся, что данная опция поддерживается нашей live-системой. если вы работаете с Ubuntu 9.10 Desktop, можно не волноваться. в ином случае выполните
grub-install --helpесли в описании опций присутствует вышеупомянутый ключ "--root-directory" - все в порядке. теперь нам нужно примонтировать корневой раздел системы. если вы не помните, на каком разделе стоит система, вам поможет
sudo fdisk -lопределившись с корневым разделом, монтируем его. пусть в нашем примере это будет sda5:
sudo mount /dev/sda5 /mntесли у вас выделен отдельный boot-раздел, примонтируйте и его. допустим. это sda2
sudo mount /dev/sda2 /mnt/bootтеперь переходим собственно к установке grub2. ключ "--root-directory" позволяет указать, что использовать в качестве корневой директории. нам нужен корневой раздел нашей системы, который примонтирован в /mnt. поэтому выполняем:
sudo grub-install --root-directory=/mnt /dev/sdaкак и в предыдущем способе, grub2 устанавливается на физический диск, а не на раздел! в качестве диска нужно указать тот диск, который установлен загрузочным в bios.
если все пройдет успешно, установщик выведет сообщение об успешном завершении и список обнаруженных жестких дисков, которые были добавлены в "device.map". если все это есть - отмонтируем диски, перезагружаемся и радуемся. если будет выведен неполный список дисков - отредактируйте файл "device.map" в корневой папке установленной системы (в описанном примере - "/mnt/boot/grub/device.map") и поправьте его, добавив остальные диски и поправив нумерацию. файл должен иметь вид
(hd0) /dev/sda
(hd1) /dev/sdb
и так далее для всех жестких дисков. сохраните файл и повторно выполните команду grub-install, как описанно выше. теперь должен отобразиться правильный список дисков. отмонтируем диски и перезагружаемся.

загрузка системы при частичной неработоспособности GRUB2.
в некоторых случаях может оказаться так, что отдельнные файлы grub2 будут повреждены (например, в результате сбоя при выполнение "update-grub"). однако, иногда есть шанс загрузиться в свою систему и восстановить grub2 из нее без необходимости полной переустановки оного.
если при загрузке grub2 вы видите сообщения об ошибках - не спешите предаваться панике. все может быть еще вполне поправимо. на данный момент наша главная цель - попасть в консоль grub2. вы можете сразу увидеть ее на экране, или же будет предложено что-либо нажать или выбрать для запуска консоли. в любом случае, если вам удалось запустить консоль - радуйтесь, шансы на спасение увеличены!
консоль grub2 похожа на более привычную оболочку bash. здесь также поддерживается автодополнение команд по нажатию tab. если же нажать tab в пустой строке - мы увидим полный список доступных команд. что ж, приступим к процедуре запуска системы. для начала нам нужно задать root-раздел, то есть раздел, на который установлена наша система. в моем случае это "/dev/sda5". (в grub2 разделы задаются в виде "hd*,*". если вы мало знакомы с нумерацией разделов в grub2 - почитайте пункт "нюанс с нумерацией дисков и разделов" в I главе). root-раздел задается командой
set root=(hd0,5)в моем случае это "hd0,5", он же "/dev/sda5", то есть пятый раздел первого диска. полный список доступных разделов можно получить уже знакомой многим командой "ls". она выдаст что-то вроде
(hd0,1) (hd0,2) (hd1.1) (hd2,1)после того, как вы задали root-раздел, можно удостовериться в том, что все получилось, выполнив команду "root". она выдаст сообщение следующего вида:
(hd0,5): filesystem is ext2некоторых, наверно, смутит упоминание ext2. не волнуйтесь, так и должно быть (для файловых систем ext2/3/4 в grub2 используется общий драйвер)
после того, как задан root-раздел, мы должны указать, какое ядро следует загрузить. это задается командой "linux". укажите то ядро, с которым вы обычно загружаетесь. в моем случае команда будет выглядеть так:
linux /boot/vmlinuz-2.6.32-020632rc6-generic root=/dev/sda5не пугайтесь, если вы не помните номер вашего ядра. просто напишите "linux /boot/vmlinuz" и нажмите tab. на экран будет выведен список доступных ядер.
обратите внимание на параметр "root=/dev/sda5" в конце строки! здесь также нужно указать ваш root-раздел, но уже в более привычном формате. без этого система может не загрузиться.
вместе с ядром следует загрузить initrd (это образ, содержащий все необходимое для определения жесткого диска, монтирования корневой ФС и продолжения зарузки системы). делается это командой "initrd". нужно загрузить initrd-образ, версия которого соответствует версии загружаемого ядра:
initrd /boot/initrd.img-2.6.32-020632rc6-genericпосле этого можно загрузить систему командой
bootв результате всех манипуляций мы должны успешно загрузиться в родную систему. а там уже можно выполнить "update-grub" и при необходимости восстановить нужные файлы из резервной копии (которую вы, конечно, делали).
(Нажмите, чтобы показать/скрыть)
если же вышеприведенный метод не сработал (ядро не загрузилось или же вы вовсе не можете попасть в консоль grub2) и ничего не загружается - тут уж дело идет к переустановке grub2, что описана выше.
(Нажмите, чтобы показать/скрыть)
продолжение читайте несколькими постами ниже
« Последнее редактирование: 10 Октября 2010, 01:07:22 от stmc »
лучше на "ты"

Оффлайн dimas000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
Re: пишем мануал по GRUB2 (первые наброски)
« Ответ #1 : 09 Ноября 2009, 15:38:22 »
(Нажмите, чтобы показать/скрыть)
IV. Advanced
даунгрейд до grub-legacy (возврат старой версии).
в случае, если ваша дружба с grub2 так и не состоялась, вы можете заменить его на старый grub (ныне известный как grub-legacy), который на текущий момент более стабилен. и привычен для многих.
для начала, конечно же, сделаем бэкап важных файлов. создайте резервную копию файлов конфигурации как описано конце I-ой главы. также желательно забэкапить папку "/boot/grub". для этого выполните
sudo cp -R /boot/grub{,.bak}теперь мы можем приступить к удалению grub2. для этого удаляем пакеты "grub-pc" и "grub2" (последний может быть не установлен):
sudo apt-get purge grub2 grub-pcзаметьте: удаление пакетов не приведет к полной очистке папки "boot/grub".
теперь установим grub версии 0.97:
sudo apt-get install grubно после установки нам необходимо создать файл menu.lst и другие файлы загрузчика. для этого нужно выполнить еще две команды:
sudo update-grubэта команда создаст файл меню загрузки. на заданные ей вопросы отвечайте "yes".
sudo grub-install /dev/sdaсоздаст остальные файлы загрузчика и запишет информацию в загрузочный раздел диска (MBR). вместо "/dev/sda" в конце укажите тот жесткий диск, который используется в качестве загрузочного (установлен загрузочным в bios)
если установка прошла успешно - перезагружаемся и видим старый добрый grub с его menu.lst и без лишних хитростей
(Нажмите, чтобы показать/скрыть)

создание аварийно-спасательного 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теперь выполним собственно процедуру установки grub2. для этого запустите
sudo grub-install /dev/sdbне забывайте, что при установке мы указываем диск (/dev/sdb в нашем примере), а не раздел! мы по сути скомандовали системе установить grub2 на саму себя, прописав grub2 в MBR указанного диска, но вместо "/boot/grub" файлы загрузчика попадут на флэшку, "что и требовалось доказать".
отмонтируем флэшку
sudo umount /boot/grubперезагружаемся.
в принципе, вышеописанных операций достаточно для того, чтобы загрузиться с флэшки в работающий grub2. однако, меню загрузки вы не увидете, а попадете сразу в консоль. если у вас нет опыта работы с консолью grub2, или вы просто хотите сделать процесс более удобным, придется совершить еще несколько действий, чтобы получить полноценный grub2 с менюшкой.
грузимся с жесткого диска, запускаем обычную систему.
монтируем раздел с grub2. по умолчанию он смонтируется автоматом в "/media", причем в качестве точки монтирования будет использован uuid раздела. отмонтируйте его через апплет или значок на рабочем столе и примонтируйте в "/mnt":
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теперь настроим наш новый grub2. если в вашем обычном grub2 вы используете фоновое изображение - отредактируйте "/mnt/config/grub.d/05_debian_theme", указав в качестве картинки имя несуществующего файла, тем самым отключив картинку на фоне. также можете поправить "/mnt/config/default/grub" - например, отключить секундомер, выставив параметр "GRUB_TIMEOUT" в "-1".
после внесения необходимых правок мы можем приступить к созданию "grub.cfg" на нашем разделе. для этого потребуется еще несколько манипуляций. нижеприведенные команды вы можете выполнить по отдельности, но я рекомендую для дальнейшего удобства сохранить эти строки в виде скрипта, поместив файл, например, в "/mnt/config/grub-usb-update" и установив ему права 755.
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
что мы только что сделали? примонтировали файлы конфигурации grub2 в качестве "родных" настроек основной системы. и исходя из них создали grub.cfg, поместив его на флэшку. команда "grub-mkconfig" идентична привычному "update-grub" (на самом деле, "update-grub" лишь запускает "grub-mkconfig", указав, куда сохранить файл), с помощью ключа "-o" мы указали, куда поместить результат трудов команды. после чего мы отмонтируем наши файлы с настройками, возвращая родные файлы на законное место.
если вы последовали совету выше и сохранили скрипт, достаточно будет его запустить одной командой:
/mnt/config/grub-usb-updateтеперь когда вы решите обновить grub2 на флэшке (например, после обновления ядра), достаточно будет примонтровать раздел в "/mnt", выполнить скрипт и отмонтировать флэшку обратно.
ну а сейчас отмонтируем флэшку
sudo umount /mntи перезагружаемся. грузимся с флэшки и видим меню загрузки со всеми нашими системами. радуемся.

загрузка другого grub2 из текущего.
как выяснилось в ходе экспериментов, все весьма просто. загружаемся в grub2, переходим в консоль нажатием "c". загрузка другого grub2 происходит по методу "set root - chainloader - boot". для начала определимся с диском, в MBR которого прописан grub2, который мы собираемся загрузить. выполните команду
lsчтобы увидеть список текущих дисков и разделов. диск, с которого производился загрузка будет именоваться (hd0). в нашем примере мы загрузим с флэшки основной grub2 на жестком диске. если флэшка - (hd0), то жесткий диск будет (hd1). выолняем
set root=(hd1)или же
root (hd1)во втором случае видим сообщение, что файловая система незивестна. это нормально.
передаем управление по цепочке
chainloader +1и даем команду на запуск
bootи попадаем в искомый загрузчик.

консоль grub2 - команды и хитрости.
здесь мы рассмотрим некоторые команды консоли grub2. все мы разбирать не будем, а изучим лишь самые необходимые и полезные. напомню, чтобы попасть в консоль, нужно нажать "c" во время отображения меню загрузки. итак, начнем!
  • ls
довольно универсальная команда. при использовании в чистом виде выдает список жестких дисков и разделов.
также она может быть использована как одноименная команда в linux - для вывода содержимого папки. например,
ls /boot/grubвыведет содержимое папки "/boot/grub" на разделе, который сейчас указан в качестве корневого (об этом чуть ниже).
еще одно полезное свойство комадны "ls" - она позволят получить информацию о любом разделе:
ls (hd0,5)сообщит нам тип файловой системы на разделе, метку раздела (если таковая имеется), UUID и дату последнего изменения данных на разделе (в формате UTC).
  • 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обратите внимание: версия initrd должна соответствовать версии загружаемого ядра!
  • chainloader
передает управление загрузкой по цепочке другому загрузчику (загрузчик ищется на заданном в качестве root разделе). в общем случае требует указания файла для загрузки:
chainloader /путь/имя_файлаоднако, для NTLDR (загрузчика Windows) можно использовать
chainloader +1
  • boot
производит загрузку указанного ядра (заданного с "linux" и "initrd") или же другого загрузчика (заданного через "chainloader"). используется без параметров
  • root
при использовании без параметров сообщает, какой раздел сейчас используется в качестве корневого (по умолчанию - корневой раздел системы, на которую установлен текущий grub2) и тип файловой системы на этом разделе (для ext3/4 тип будет указан как ext2, это нормально)
также команда может быть использована для задания другого root-раздела. раздел задается в "grub device" формате, то есть "(hd*,*)". например:
root (hd0,5)после задания раздела команда сообщит новый root-раздел и тип файловой системы.
примечание: "root hd(*,*)" не всегда корректно срабатывает. более предпочтительным вариантом является "set root" (см. ниже)
  • set
весьма универсальная команда для изменения различных параметров. служит для задания значений переменных и используется в формате
set переменная=значениенаиболее необходимое ее применение - для задания root-раздела. для этого изменяется переменная "root", в качестве значения задается необходимый раздел, например:
set root=(hd0,5)(именно такая технология используется в "grub.cfg")
также с ее помощью можно, например, "на лету" изменить цвет текста в меню и консоли, что позволяет опробовать цветовую схему перед установкой ее в качестве основной. для этого изменяем переменные "color_normal" и "color_highlight" для обычного пункта (и текста в консоли) и выделенного пункта соответсвенно. например, попробуем такой вариант:
set color_normal=magenta/green
set color_highlight=light-blue/black
(подробнее о цветах читайте в главе II, раздел "настройка цвета пунктов меню")
  • 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_нужного_разделакоманда сообщит нам, какой раздел соответствует заданному UUID.
однако, UUID длинный, и хотя его и можно узнать, вводить вручную такое количество символов проблематично, и существует большой шанс сделать ошибку. вместо этого мы воспользуемя поиском по файлу, который точно имеется на нужном разделе. допустим, мы ищем раздел boot-раздел нашей системы. найдем его по файлу "grub.cfg":
search -f /grub/grub.cfgобратите внимание, что при использовании такого способа указанный файл должен иметься только на одном разделе!
получив искомое, можно вручную задать нужный раздел в качестве root-раздела, но гораздо проще воспользоваться ключом "-s". если после него не указана переменная, будет использована "root", то есть найденный раздел как раз и будет задан в качестве корневого. допустим, раздел с Windows имеет метку "C_drive". установим его в качестве корневого для загрузки с него:
search -l C_drive -s
(Нажмите, чтобы показать/скрыть)
  • lsfonts
эта команда отобразит список загруженных в настоящий момент шрифтов (полезно для тех, кто все-таки решил поразвлекаться с настройкой шрифтов в grub2, конвертацией их в .pf-формат и прочим)
  • help
при использовании в чистом виде выведет список доступных команд. в формате
help rвыведет справку по всем командам, начинающимся на "r".
help searchотобразит справку по команде "search"
  • halt
выключит компьютер (в теории) или введет его в ступор (у меня  ;)).
  • reboot
перезагрузит компьютер
  • background_image
позволяет "на лету" изменить фоновое изображение. используется в формате
background_image /путь/имя_файладает замечательную возможность посмотреть на выбранную картинку в действии, избегая лишних перезагрузок. в сочетнии с заменой цветов через "set" позволит довольно быстро подобрать подходящий вариант оформления.
при использовании без параметров сбросит текущее фоновое изображение. однако, заданные цвета останутся, так что если у вас черный цвет текста - на черном фоне вы его не увидите.
примечание: данная команда не заменит ваши настройки оформления, фон будет изменен лишь на текущий сеанс
  • 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)/позволяет просмотреть содержимое заданного раздела без переключения root.

создание дополнительных меню загрузки.
в этом разделе мы рассмотрим создание своих собственных загрузочных меню со своей конфигурацией. суть в том, что вместо уже знакомого нам "grub.cfg" можно загрузить другой файл конфигурации. это позволяет создать дополнительное меню, совершенно другое - с другими пунктами, настройками. оформлением. те, кто имел дело с установкой ArchLinux, могли заметить несколько подменю в grub установочного диска. примерно такой метод мы и будем использовать.
итак, создадим наш новый файл конфигурации. писать с нуля мы его, конечно же, не будем, а сотворим на основе имеющегося "grub.cfg". для чего скопируем последний, дав новое имя, например:
sudo cp /boot/grub/{grub,custom}.cfgпоскольку файл скопируется с правами 444, выставим ему права на запись:
sudo chmod 744 /boot/grub/custom.cfgтеперь открываем его в любимом текстовом редакторе и начинаем ковырять. если вы в достаточной мере знаете структуру "grub.cfg" и понимаете, какие строки что делают, можно значительно сократить свой файл, вырезав лишнее, и привести его к более удобочитаемому виду. однако же, можно и не трогать руками все подряд, а изменить лишь интересующие параметры, что мы и проделаем.
для начала найдем строку "set default=...." (у меня это 13-я строка). здесь можно задать пункт меню по умолчанию, указав или его номер или точное название. далее отыщем строку "set gfxmode...." (24-я в моем случае). здесь задается разрешение экрана в привычном формате WxH. можно также указать глубину цвета, например "1024x768x32". можно указать несколько вариантов, при этом если первый не сможет быть установлен, будет загружен второй, если и он не сработает - третий и т.д. варианты перечисляются через запятую и без пробелов:
set gfxmode=1024x768x32,1024x768x24,1024x768теперь зададим время отображения меню. для этого ищем строку "set timeout", но именно ту, которая идет после "else" (36). здесь и задается задержка в секундах. установите -1 для отключения таймера.
настроим оформление нашего меню. для задания фонового изображения найдем строку с "if background_image....." (45). (здесь подразумевается, что в вашем grub.cfg используется фоновое изображение. если нет - смотрите пример файла в конце этого раздела). после команды background_image прописан путь к файлу картинки. поменяйте его на нужный файл. (обратите внимание, что разрешение картинки должно соответствовать заданному выше разрешению экрана!).
строкой ниже мы можем задать цвета текста. правятся они точно так же, как и в "/etc/grub.d/05_debian_theme" (подробнее о цветах читайте в главе II, раздел "настройка цвета пунктов меню"). еще можно проделать один интересный трюк: уберите строки с "set color_highlight" и "else". теперь настройка будет такой:
color_normal задает цвет/фон текста сверху и снизу (версия grub и комментарии) и текста в консоли
menu_color_normal отвечает за цвет пунктов меню и фон прямоугольника, в котором они находятся
menu_color_higlight задает цвет/фон выделенного пункта меню.
закончив с настройкой, перейдем собственно к пунктам. ниже идут пункты из вашего "grub.cfg". измените их, удалите ненужные и добавьте новые, пересортируйте на свой вкус. ниже будет приведен пример с немного отредактированными тремя пунктами загрузки.
настроив свой файл, сохраните его. теперь нам нужно добавить возможность загрузить его вместо "grub.cfg". для этого в последний нужно будет добавить еще один пункт, что мы сделаем через "/etc/grub.d/40_custom". для смены файла конфигурации в grub2 используется команда "configfile". ей мы и воспользуемся, добавив в "40_custom" запись такого вида:
menuentry "my very custom menu"{
configfile /boot/grub/custom.cfg
}
если ваш путь к файлу отличается - исправьте его. если вы используете отдельный boot-раздел, путь будет таким: "/grub/custom.cfg". также учтите, что "40_custom" должен заканчиваться пустой строкой!
если вы хотите, чтобы ваше новое меню загружалось вместо стандартного "grub.cfg", установите новый пункт в качестве пункта по умолчанию. также можете установить таймаут для "grub.cfg" в 0 (в "/etc/default/grub"), но перед этим рекомендую протестировать свежеиспеченное меню на работоспособность.
обновите свой "grub.cfg" выполнив
sudo update-grubтеперь пункт перехода в новое меню появится в обычном. для того чтобы выйти обратно в первое меню, достаточно нажать escape.
вот, в принципе, и вся премудрость. таких файлов можете насоздавать себе хоть десять штук, тут уж зависит от потребностей. ниже я приведу в качестве образца то, что получилось у меня (файл сильно урезан до необходимого минимума):
(Нажмите, чтобы показать/скрыть)

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если ваш загрузочный диск - не sda, поменяйте значение на свое. (на самом деле, код загрузчика занимает первые 446 байт, а дальше записана таблица разделов, но для загрузки нашего образа он должен быть не меньше 512 байт).
наш образ готов! данные сохранена в файл "mbr.bin" в вашей домашней директории.
используя полученный образ можно загрузить основной grub2 из-под другого при поврежденном MBR диска. если у вас есть другая установленная linux-система с grub2 на другом жестком диске или загрузочная флэшка с grub2 (создание таковой описано выше) - можете попробовать на практике нижеприведенный совет.
итак, в моем примере я загружаюсь со своей спасительной флэшки с grub2, на которую я предварительно закинул образ MBR своего жесткого диска.
загрузившись в gurb2, выходим в консоль (нажав "c"). указываем в качестве корневого раздела тот жесткий диск, на котором по сценарию попорчен MBR, и с которого мы хотим запустить grub2. можно указать сам диск или любой из его разделов, например так:
set root=(hd1)проверим результат командой
rootесли все верно - загружаем наш образ с помощью chainloader. здесь нужно указать полный путь, начиная с раздела, на котором лежит наш файл. флэшка, с которой я загружен именуется (hd0), так что команда будет выглядеть так:
chainloader (hd0,1)/mbr.binесли все тихо - даем команду на запуск:
bootи наслаждаемся родным grub2.
примечание: в MBR (и, соответственно, в полученном образе) нет четкого указания жесткого диска, поэтому через наш образ загрузится grub2 с того раздела, который был указан в качестве корневого (root) в консоли grub2.
загрузив родную систему, мы можем восстановить ид-под нее MBR диска. но если лишнего grub2 у вас под рукой нет, действовать мы будем с livecd.
грузимся с livecd любой linux-системы (в данном случае поддержка grub2 роли не играет). для восстановления MBR нам нужно будет "раскатать" ранее созданный образ обратно в первый сектор диска. но для начала проверим таблицу разделов, ведь вполне возможно, что grub2 не грузился и из-за нее. для этого выполните
sudo fdisk -lесли fdisk видит разделы - таблицу разделов трогать не будем, а восстановим только код загрузчика. в этом случае нам нужно перезаписать лишь первые 446 байт. если же "убита" и таблица разделов - все 512. определившись, что именно мы делаем, копируем нужное количество байт из образа в первый сектор диска. в примере ниже таблица разделов в порядке, восстанавливаем только grub2:
sudo dd if=/mnt/mbr.bin of=/dev/sda bs=446 count=1если нужно восстановить и таблицу разделов - укажите 512 вместо 446. в качестве значения if пропишите путь к файлу образа, в of - тот диск, загрузочный сектор которого мы восстанавливаем. если все прошло успешно - перезагружаемся, грузимся с починенного диска и радуемся.
еще одна полезная возможность - полученный образ можно использовать для загрузки grub2 через NTLDR (в случае, если grub2 не загружает нормально Windows, и вы хотите сделать NTLDR основным загрузчиком). но об этом как-нибудь позже.

продолжение - в 10-м посте
« Последнее редактирование: 07 Июня 2011, 22:41:20 от dimas000 »
лучше на "ты"

Оффлайн dimas000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
Re: пишем мануал по GRUB2 (первые наброски)
« Ответ #2 : 09 Ноября 2009, 18:45:27 »
(Нажмите, чтобы показать/скрыть)
востановление GRUB2 с LiveCD. способ 3 (совсем простой)
в случае, если нужно только восстановить MBR диска (например, после (пере)установки Windows), все можно сделать еще проще, вообще ничего не монтируя.
все так же грузимся с liveCD. определить, какой нужен жесткий диск можно опять же с помощью "sudo fdisk -l". если он один - значит, sda.
и вот, собственно, команда на "мат в один ход":
sudo grub-install --root-directory=/tmp /dev/sdaизмените /dev/sda на нужный диск. все! можно снова грузиться с этого диска

создание 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теперь нам нужно написать файл конфигурации "grub.cfg", содержащий загрузочное меню и настройки. вы можете взять за основу ваш "/boot/grub/grub.cfg" и изменить его под текущие нужды, а можете написать его с нуля - оба варианта подходят если вы понимаете структуру "grub.cfg". в противном случае вы можете взять готовый шаблон, помещенный в конце этого раздела и отредактировать его.
для тех же, кто избрал "путь самурая" - подробнее о создании собственного "grub.cfg" вы можете почитать выше, в разделе "создание дополнительных меню загрузки". здесь же опишу лишь некоторые специфичные для LiveCD вещи.
если вы берете за основу "/boot/grub/grub.cfg" - уберите из него строки, задающие ваш рут-раздел системы в качестве root ("search.... uuid_раздела...."). корневым разделом должен быть cd-диск!
если вы выбрали вариант с графическим меню - нужно обязательно подгрузить скопированный ранее шрифт. кроме того, следует, собственно, включить графический режим. для этого добавьте такие строки:
loadfont /boot/grub/unicode.pf2
insmod gfxterm
insmod vbe
if terminal_output gfxterm ; then true ; else terminal gfxterm; fi
и еще один очень важный момент: в начале файла должна иметься такая строка:
insmod part_msdos
загрузка данного модуля обязательна! без него полученный grub2 увидит только жесткий диск, но не увидит таблицу разделов на нем, и такой LiveCD будет бесполезен.
про настройки цветов/разрешения и всего прочего читайте в вышеупомянутом разделе. а теперь же перейдем к созданию самого меню.
вы можете скопировать нужные пункты из "/boot/grub/grub.cfg", но я рекомендую написать их с нуля, ибо для корректной работы тамошних пунктов потребуется загрузка дополнительных модулей. а написать их несложно, для Linux-системы пункт меню должен иметь такой вид:
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
}
в качестве uuid нужно задать тот раздел, где находится ваш /boot (если у вас общий / - пишите его, если отдельный /boot-раздел - именно его и указываем, а не /. в случае с отдельным /boot пути будут выглядеть как "/vmlinuz...." и "/initrd....")
для Windows будет что-то такое:
menuentry "winxp" {
searсh -u uuid_раздела_с_win -s
chainloader +1
}
закончив с файлом, сохраняем его как "grub.cfg" в целевой папке (в моем случае - "~/tmp/iso/boot/grub/grub.cfg"). теперь мы готовы к созданию iso-образа нашего LiveCD. в этом нам поможет утилита grub-mkrescue. команда будет выглядеть так:
grub-mkrescue --overlay=tmp/iso/ tmp/grub.isoвместо "tmp/iso" укажите свою папку, вместо "tmp/grub.iso" - путь, куда сохранить полученный iso-образ.
если все успешно - получаем на выходе очень небольшой iso-шник (~2.8M), прожигаем его на rw-шку и пробуем грузиться!
ниже, как и обещал, привожу пример файла "grub.cfg", корректно работающего на LiveCD с комментариями:
(Нажмите, чтобы показать/скрыть)

создание LiveCD с GRUB2 на базе имеющегося дистрибутива.
(за идею спасибо тов. komix)
поскольку тратить целую болванку ради записи iso-шника с grub2 в 3 мегабайта было бы глупо, можно совместить приятное с полезным, а именно: LiveCD с grub2 и установочный диск какой-нибудь системы. исходить мы будем из того, что имеется iso некоего LiveCD, к которому мы хотим прикрутить grub2.
порядок действий будет в целом аналогичен описанному в предыдущем пункте. первым делом создадим папку, в которой будем собирать наш новый диск. в ней же создадим папку /boot/grub и папку, в которую будут помещены файлы нашей live-системы (я назову ее live):
mkdir -p tmp/iso/{boot/grub,live}теперь нам нужно примонтировать iso-образ нашей системы в свежесозданную папку для нее:
sudo mount -o loop downloads/some-live-system.iso tmp/iso/liveтеперь создайте "grub.cfg", как это описано в предыдущем пункте (не забудьте скопировать файл шрифта, если хотите использовать графическое меню). здесь все аналогично вышеописанному способу, но с той лишь разницей, что в меню мы добавим пункт для загрзуки нашей live-системы.
как именно нужно запускать "живое ядро"? на этот вопрос нет универсального ответа. узнать это можно, покопавшись в настройках прилагаемого загрузчика (обычно это isolinux или же старый grub - в обоих случаях понять логику несложно). приведу конкретный пример для мини-дистрибутива Parted Magic:
menuentry "Parted Magic" {
linux /live/bzImage
initrd /live/initramfs
}
в данном случае этого будет достаточно. для других систем могут потребоваться дополнительные параметры загрузки ядра. ядро же может лежать в "/live/boot" или в другой папке в зависимости от конкретного дистрибутива.
обратите внимание на то, что здесь не используются строки вида "set root..." или "search...". если вы создали правильный "grub.cfg", то корневым разделом при загрузке устанавливается cdrom, поэтому нет нужды его задавать повторно.
после того, как "grub.cfg" готов, можно приступить к созданию iso-образа:
sudo grub-mkrescue --overlay=tmp/iso tmp/my-live-system-grub2.isoпродолжительность процесса зависит от размера оригинального дистрибутива. по окончании получаем свежеиспеченный iso-образ с оригинальным дистрибутивом и бонусом в виде grub2.
отмонтируем оригинальный iso:
sudo umount tmp/iso/liveи прожигаем новый iso-шник на болванку. грузимся и проверяем результат
« Последнее редактирование: 19 Февраля 2010, 15:27:31 от dimas000 »
лучше на "ты"

Оффлайн assistent

  • Активист
  • *
  • Сообщений: 682
    • Просмотр профиля
    • Caйт плеера foobnix
Re: пишем мануал по GRUB2 (первые наброски)
« Ответ #3 : 09 Ноября 2009, 18:57:03 »
Так, чую в этой теме теперь будут тусоваться спецы по Grub2.
Думаю, задачи, которые здесь сейчас решаются, достаточно типичны.
А вот попробуйте решить такую задачку с новым Grub https://forum.ubuntu.ru/index.php?topic=73097.msg548587#msg548587
Пока что никто ничего путного посоветовать не смог.
Foobnix - наше всё.

Оффлайн dimas000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
Re: пишем мануал по GRUB2 (первые наброски)
« Ответ #4 : 09 Ноября 2009, 22:18:23 »
вот! нарыл несколько статеек по восстановлению гроб2, почитал, поразмыслил... но основе одной из них и получился третий раздел... ежели кто имеет желание протестировать на своей машинке - будет круто))) а пока что "as is"
лучше на "ты"

Serge

  • Гость
Re: пишем мануал по GRUB2 (первые наброски)
« Ответ #5 : 09 Ноября 2009, 22:28:23 »
вот! нарыл несколько статеек по восстановлению гроб2, почитал, поразмыслил... но основе одной из них и получился третий раздел... ежели кто имеет желание протестировать на своей машинке - будет круто))) а пока что "as is"

Спасибо. У меня винды нет. Народ, кто ставить будет, попробуйте.

Пользователь

  • Гость
Re: пишем мануал по GRUB2 (первые наброски)
« Ответ #6 : 09 Ноября 2009, 22:45:33 »
По восстановлению grub2, было дело пытался восстановить, застрял на этом  пункте   sudo chroot /mnt
дальше помню дело не пошло, теперь понял, я же было примонтировал через наутилус, а он смонтировал мне в media и неизвестно с какими правами.

Теперь подождем пока у кого-нибудь грохнется grub2 и в разделе "Общие вопросы" появится тема: "как восстановить grub2?", подсунем мануальчик - проверим на практике  :)

Оффлайн dimas000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
Re: пишем мануал по GRUB2 (первые наброски)
« Ответ #7 : 09 Ноября 2009, 23:05:12 »
Теперь подождем пока у кого-нибудь грохнется grub2...
добрые все такие)))
лучше на "ты"

Jetta

  • Гость
Re: пишем мануал по GRUB2 (первые наброски)
« Ответ #8 : 09 Ноября 2009, 23:17:06 »
Читал где-то что для успешного
sudo chroot /mnt нужно не только монтировать /dev/ но и /proc/ и что-то там ещё

Пользователь решил продолжить мысль 09 Ноября 2009, 23:21:24:
Кстати а как стиль меню grub2 поменять? а то как то просто выглядет/...
« Последнее редактирование: 09 Ноября 2009, 23:21:24 от Jetta »

Оффлайн dimas000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
Re: пишем мануал по GRUB2 (первые наброски)
« Ответ #9 : 10 Ноября 2009, 00:28:54 »
Читал где-то что для успешного
sudo chroot /mnt нужно не только монтировать /dev/ но и /proc/ и что-то там ещё

Пользователь решил продолжить мысль [time]Mon Nov  9 21:21:24 2009[/time]:
Кстати а как стиль меню grub2 поменять? а то как то просто выглядет/...
блин, точно... в каком-то источнике что-то было про /proc...
ага, нашел! вот здеся - http://www.ubuntu-inside.me/2009/06/howto-recover-grub2-after-windows.html - судя по постам в бложике, товарищ серьезный. надо бы добавить. завтра проверю с ливСД Мандривы за неименеием иного. в смысле, на предмет chroot'а.
спасибо, сейчас добавлю пунктик!
что до оформления - это тебе в раздел "украшательства". тут уж ручаюсь, ибо самолично все опробовал

UPD: в Арч-вики так и вовсе учат людей нехорошему)) арчеводы, посодействуйте там! а то предлагают людям через груб.кфг все настраивать.
« Последнее редактирование: 10 Ноября 2009, 01:02:25 от dimas000 »
лучше на "ты"

Оффлайн positivebb

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: пишем мануал по GRUB2 (первые наброски)
« Ответ #10 : 11 Ноября 2009, 15:38:04 »
Ну вот у меня слетел груб2, но не полностью, а только конф-файл(некорректная перезагрузка после обновления)
Сперва, попав в консоль груба несколько растерялся.
Порядок действий был такой:
 
Цитировать
set root (hd0,1) <- здесь "позывной" вашего раздела с линуксом. Список разделов можно посмотреть по ls
 linux /boot/vmlinuz-2.6.31-15-generic <- номер вашего ядрышка
 boot
После чего загрузился

Да, по-хорошему, загрузка должна проходить через initrd, однако мне хватило этого, что-бы загрузиться и выполнить update-grub.

Оффлайн dimas000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
Re: пишем мануал по GRUB2 (первые наброски)
« Ответ #11 : 11 Ноября 2009, 16:36:09 »
Ну вот у меня слетел груб2, но не полностью, а только конф-файл(некорректная перезагрузка после обновления)
Сперва, попав в консоль груба несколько растерялся.
Порядок действий был такой:
 
Цитировать
set root (hd0,1) <- здесь "позывной" вашего раздела с линуксом. Список разделов можно посмотреть по ls
 linux /boot/vmlinuz-2.6.31-15-generic <- номер вашего ядрышка
 boot
После чего загрузился
Да, по-хорошему, загрузка должна проходить через initrd, однако мне хватило этого, что-бы загрузиться и выполнить update-grub.
у меня отчего-то не вышло... set root (hd0,5) не проканало. сейчас посмотрел в груб.кфг, там записи вида set root=(hd0,5). у тебя опечатка или я неправильно делаю?
в итоге удалось скомандовать "root (hd0,5)", после чего задал ядро и скомандовал boot - в итоге система впала в кернель паник, мотивируя оный невозможностью примонтировать рут-раздел...
сейчас еще раз ребутнусь, буду дальше пробовать.
а за инфу спасибо огромное! ежели довести способ до ума, он может помочь во многих случаях

UPD: разобрался! все получилось. оказывается, рут-раздел нужно ядру указывать. странно, что у тебя загрузилось без него. в любом случае, теперь все ясно.
+ добавил раздел с описанием этого дела
« Последнее редактирование: 11 Ноября 2009, 17:53:30 от dimas000 »
лучше на "ты"

Оффлайн catalyst

  • Активист
  • *
  • Сообщений: 475
    • Просмотр профиля
Re: пишем мануал по GRUB2 (первые наброски)
« Ответ #12 : 11 Ноября 2009, 18:38:09 »
вот тут говорится что восстановать граб2 можно конечной командой grub-install /dev/sda НО он же тогда затрет МБР и я не смогу запустить винду (вторая система)?

в первом грабе как было, вводишь setup (hd0,5) и он ставится на первый диск, 5 раздел в итоге мбр цел и граб стоит, достаточно потом просто в винде создать будет загрузочное меню для мультибута и все

я что хочу короче - у меня стоит 7вынь и Ubuntu, Ubuntu собираюсь переустановить форматнув перед этим /, потом восстанавливаю запорченый МБР для винды и позже восстанавливаю граб. Как можно его восстановить но НЕ в мбр?

Оффлайн dimas000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
Re: пишем мануал по GRUB2 (первые наброски)
« Ответ #13 : 11 Ноября 2009, 18:47:28 »
а чем плохо вариант с установкой grub2 в MBR-раздел? и почему это ты не сможешь запустить винду? все прекрасно сможешь, ибо груб2 при установке подцепит все системы.
тут я может быть, не совсем точно понимаю, но схема такая: Windows записывает в MBR команду на запись своего загрузчика (NTLDR). груб2 прописывает в MBR себя, и мы при загрузке видим меню. если же ты выбираешь в меню пункт с виндой, управление по цепочке передается NTLDR, который прекрасно загружает винду.
короче, если вопрос в том, что нужно переставить Ubuntu, но чтобы при этом не убить загрузку винды - просто переставляй и все. grub2 обнаружит твою винду и будет ее загружать. ничего потом восстанавливать не надо будет. уж это опробовано на себе с установленной виндой, так что могу с уверенностью заявлять. это тебе не Windows, которая при установке затирает все остальное.
так что смело ставь Ubuntu и не парься ни о чем! будут тебе они обе в меню загрузки!
лучше на "ты"

Оффлайн catalyst

  • Активист
  • *
  • Сообщений: 475
    • Просмотр профиля
Re: пишем мануал по GRUB2 (первые наброски)
« Ответ #14 : 11 Ноября 2009, 18:56:00 »
grub2 обнаружит твою винду и будет ее загружать. ничего потом восстанавливать не надо будет
об этом варианте я думал, граб такое может да :)
Но все же, на будущее, для тех людей кто ставит наоборот - винду поверх Ubuntu.
Раньше решался вопрос восстановлением граба НЕ в мбр, а затем уже из винды через утилитку EasyBCD конфигурировался мультибут. Как делается со вторым грабом? Неужели он ставится только в мбр запись?

 

Страница сгенерирована за 0.11 секунд. Запросов: 24.