Начальный загрузчик GRUB 2 - полное руководство (часть 1)
Оригинал: GRUB 2 bootloader - Full tutorial Автор: Igor Ljubuncic
Дата публикации: 05 сентября 2012 г.
Перевод: С. Русинов
Дата публикации перевода: 4 февраля 2013 г.
Законченное руководство с сайта Dedoimedo "GRUB 2.00 руководство по мультизагрузке"
(GRUB 2.00 multi-boot tutorial) помещено
в 117-ом выпуске журнала "Linux User & Developer Magazine"! Рекомендую
посмотреть его.
Загрузчик GRUB 2 находится в постоянном развитии. Со временем
часть информации должна измениться, так как свойства добавляются,
удаляются и меняются. Последние обновления, пожалуйста, смотрите ниже в
разделе Updates.
Это руководство описывает GRUB версии 2, последующую версию популярного загрузчика.
Если вас интересует руководство по оригинальной (сейчас, так называемая, legacy)
версии GRUB, пожалуйста, посмотрите эту
статью. Добро пожаловать в руководство по начальному загрузчику GRUB 2! Обязательно
прочитайте мое руководство
по GRUB legacy. В течение двух с половиной лет только
оно одно набрало около полумиллиона просмотров. Это доказывает, что оно практично
и очень популярно у пользователей во всем мире.
Я хочу повторить подобный успех с руководством по GRUB 2. Моя цель предоставить
пользователям, запускающим UNIX-подобные операционные системы или осуществляющим мультизагрузку
на своих компьютерах с помощью загрузчика GRUB, простое пошаговое руководство, проверенное и
работоспособное, которое позволит им быстро, просто и безопасно управлять загрузкой операционных
систем.
В этом руководстве вы узнаете как работать с GRUB 2. Как добавить и удалить конфигурации
меню, как адаптировать под свои требования загрузочные конфигурации с помощью заголовков и
загрузочных опций, как осуществить двойную загрузку и тройную загрузку операционных систем.
Особое внимание будет уделено совместному использованию GRUB legacy и GRUB 2 и адаптации Windows
к этой структуре. После этого мы узнаем, как избавиться от ошибок. Следуйте за мной.
Предупреждение
Обратите внимание! GRUB 2 до сих пор является бета-версией
программного обеспечения. Несмотря на это, он уже поставляется с Ubuntu
подобными системами, хотя является не совсем доработанным продуктом.
Вы, наверное, сможете использовать его без каких-либо проблем. Хотя
проблемы и существуют, но вероятность повреждения системы невелика.
Вам необходимо это знать. Даже, в случаях, когда решаются задачи, требующие осторожного
обращения, которые осуществляют критически важные функции системы, например, разбиение жесткого
диска на разделы, последовательная загрузка, манипуляции с образом системы и другие, вы всегда
будете готовы к наихудшему развитию событий. Это значит:
- Вы должны иметь проверенный порядок действий при отказе системы, чтобы не произошла
потеря всех ваших данных.
- Поэтому вы должны владеть инструментами и знаниями о быстром восстановлении системы
после аварийного сбоя. Это включает в себя восстановление предыдущего состояние системы,
исправление поврежденных конфигураций, восстановление первичных загрузчиков и другие задачи.
- Вы должны быть уверены в том, что вы делаете.
Теперь мы знаем об этом и пойдем дальше смело.
Просто помните, что GRUB 2 является бета-версией. Хотя тоже самое можно сказать и о
Google Mail, который был бета-версией приблизительно шесть лет или около этого, поэтому вы должны
быть осторожны. Еще одна важная деталь, содержание и соответствующее ему содержимое в этом
руководстве до сих пор, бывает, меняется вместе с изменениями в программном продукте GRUB 2,
поэтому следите за обновлениями.
GRUB 2 - перспективы развития
Это то, с чем вы должны ознакомиться до опробования GRUB 2. Когда GRUB 2 станет де-факто
загрузчиком для UNIX подобных операционных систем? В настоящее время GRUB legacy прекрасно
справляется и будет продолжать это делать еще много лет. Получив долгосрочную поддержку от компаний,
подобных RedHat и Novell, в серверных дистрибутивах, GRUB legacy остался ключевым игроком на самое
меньшее 5-10 лет.
На настольных машинах внедрение должно происходить быстрее, но не стоит ждать чудес слишком
быстро. Тем не менее, это не помешает начать его изучение. Примите это к сведению, вы столкнетесь с
некоторыми ограничениями совместимости в дальнейшем, особенно во многих консервативных
дистрибутивах, которые не внедряют новые технологии слишком быстро.
На данное время GRUB 2 применяется только в системах семейства Ubuntu, которые занимают
только третью часть рынка настольных систем на базе Linux. Данное обстоятельство делает это
руководство актуальным только для одного из двух или даже трех домашних пользователей Linux,
которые могли бы быть заинтересованы в том, чтобы узнать больше о GRUB 2 и его применении.
Теперь давайте перейдем к реальным механизмам.
Введение в GRUB 2
Перед тем, как вы начнете углубяться в материал, я настоятельно советую вам прочитать
написанное мной оригинальное
руководство по GRUB. Это поможет вам лучше понять эту статью.
В GRUB 2 внесено много новых изменений. И GRUB 2 имеет ряд улучшений: лучшую переносимость
и систему модулей, поддерживает не-ASCII таблицу символов, динамическую загрузку модулей,
управление физической памятью и другие.
Все эти новшества практически бесполезны для большинства пользователей. Для управления
GRUB 2 необходимо знать изменения в конфигурационных файлах и их размещение.
Новая структура
Конфигурационные файлы старого загрузчика GRUB были (и до сих пор!) размещены в
/boot/grub/, включая файл menu.lst. Этот файл считывался во время загрузки и
его содержимое отображалось на экране пользователя в виде пользовательского меню GRUB.
GRUB 2 размещает свои файлы в трех местах:
/boot/grub/grub.cfg - Это главный конфигурационный файл, который заменил
menu.lst. В отличие от menu.lst, этот файл не может быть отредактирован
вручную! Я настоятельно рекомендую не пытаться вмешиваться в этот файл, используя команду chattr
или что-то подобное. Пусть все остается как есть.
/etc/grub.d/ - Это новая директория, содержащая GRUB скрипты. Эти скрипты
являются структурными элементами, из которых состоит grub.cfg файл. Когда выполнена соответствующая
команда GRUB, скрипты выполняются в определенной последовательности, и создают конфигурационный
файл grub.cfg.
/etc/default/grub - Этот файл содержит установки меню GRUB, которые считываются
GRUB скриптами и записываются в конфигурационный файл grub.cfg. Он является частью GRUB и
предназначен для его кастомизации (обеспечение соответствия требованиям пользователя). Он похож
на старый конфигурационный файл menu.lst, в нем находятся существующие загрузочные конфигурации.
Это значит, что если вы хотите изменить меню GRUB, вам будет нужно отредактировать
существующие скрипты или создать новые и после этого обновить меню. Это больше похоже на LILO,
в которой меню редактировалось на лету, чем на GRUB legacy.
Пример файла grub.cfg
Этот файл размещен в следующией директории /boot/grub/:
Так будет выглядеть grub.cfg файл:
Это очень интересно, потому что он является просто оболочкой
скрипта. Большинство людей, скорее всего, не захотят читать его
содержимое или полностью с ним разбираться. Все же этот файл стоит бегло
просмотреть перед обновлением GRUB меню, чтобы быть уверенным в
правильности конфигураций и в том, что все они находятся в файле, как вы
рассчитывали. Выполните это, если хорошо разбираетесь в скриптах.
Пример директории /etc/grub.d/
Содержимое этой директории на только что установленной системе, в данном случае Kubuntu:
Давайте рассмотрим скрипты:
00_header этот скрипт загружает установки GRUB из /etc/default/grub,
такие, как время ожидания выбора конфигурации, конфигурация загружаемая
по умолчанию и другие. Позже мы поговорим об этом подробнее.
05_debian_theme определяет фон, цвета и темы. Имя этого
скрипта зависит о выбранного дистрибутива и изменяется при выборе
другого дистрибутива в GRUB 2.
10_linux загружает конфигурации меню для установленного дистрибутива.
20_memtest86+ загружает утилиту тестирования памяти.
30_os-prober скрипт, который сканирует жесткие диски на наличие других операционных систем и добавляет их в загрузочное меню.
40_custom является шаблоном, который вы можете
использовать для создания дополнительных конфигураций, которые добавятся
в загрузочное меню.
Вы обратили внимание на нумерацию в именах скриптов? Это
несколько похоже на порядок скриптов Запуска/Завершения на различных
уровнях выполнения. Нумерация осуществляется согласно очередности. Это
означает, что скрипт 10_linux будет выполнен до 20_memtest86+ и поэтому
он размещен выше в загрузочном меню.
Эти скрипты не очень интересны. Так же как и grub.cfg файл, они
не могут быть отредактированы, за исключением скрипта 40_custom. Вам
нужно быть очень осторожными, когда вы работаете с этими скриптами.
Скоро мы увидим как они выглядят и узнаем как с ними работать.
Пример /etc/default/grub
Этот файл находится в /etc/default:
Эта директория содержит много других файлов, так что не
подумайте, что все они используются GRUB. Файл grub является текстовым
файлом, это показано на примере скрипта 00_header. Вы можете вносить
свои собственные изменения в него, если хотите, конечно. Мы рассмотрим
это позже в разделе кастомизация.
Теперь мы знаем какие файлы являются основными. Посмотрим, как мы можем их использовать.
Основное применение
Теперь, добавим к нашим теоретическим знаниям немного практики.
Как работает GRUB 2?
GRUB 2 работает подобно этому:
/etc/default/grub содержит кастомизацию; /etc/grub.d/
содержит скрипты содержащие информацию о меню GRUB и скрипты,
загружающие операционные системы. Когда вы запускаете команду
update-grub, он считывает содержимое grub файла и скрипты из grub.d, и
создает файл grub.cfg.
Это все!
Для изменения grub.cfg вам необходимо отредактировать grub файл или скрипты, размещенные в grub.d.
Скрипты предназначены для выполнения. Это значит, что стандартная процедура выполнения должна
быть для них включена. Если вы отключите стандартную процедуру выполнения, то они не будут запущены.
Это означает, что вы можете разместить в директории grub.d столько файлов, сколько вам нужно,
так как они не являются исполняемыми оболочкой скриптами, которые может считывать update-grub.
Если вы хотите использовать их, вам нужно активировать для них стандартную процедуру выполнения или,
наоборот, отключить ее, если необходимо сделать их не доступными для update-grub.
Давайте рассмотрим скрипты.
Например, 00_header и 05_debian_theme:
40_custom более содержателен, но он не поможет нам понять, как
можно настраивать скрипты. Не беспокойтесь, мы скоро все узнаем.
Добавление нового GRUB скрипта
Чтобы добавить новую загрузочную опцию, вам необходимо следовать основным правилам:
Создать новый файл с префиксом XX_ в имени, где XX числовая
последовательность. Если вы хотите разместить новую конфигурацию выше
других, используйте меньшее число, если вы хотите разместить ее ниже
других, то используйте большее число.
Например, 11_ конфигурация будет размещена после конфигурации по
умолчанию, 08_конфигурация будет размещена перед конфигурацией 10_
linux.
Следующий шаг - записать необходимые данные. Вот пример:
#!/bin/sh -e echo "Some string" cat << EOF menuentry "Something" { set root=(hdX,Y) -- boot parameters -- } EOF
Давайте рассмотрим этот файл:
Это shell скрипт, что следует из объявления в первой строке файла.
echo "Some string" строка, которую вы увидите после запуска команды update-grub. Если вы не хотите видеть вывод на экран команды echo, то вы можете перенаправить его на стандартную ошибку или /dev/null:
$ echo "Some string" > &2 Пример: echo "Adding openSUSE 11.2" cat << EOF определяет начало текущей загрузочной конфигурации.
menuentry "Something" это имя, которое будет показано в меню. Пример: Linux.
set root=(hdX,Y) - вернемся к уже знакомому материалу, установка корневого (root) устройства.
Очень важно! GRUB 2 использует нумерацию разделов с 1, а не с 0, как было в GRUB legacy! Это крайне важно, помните об этом!
Другими словами, устройства по прежнему нумеруются с 0, а разделы с 1. Например, это значит, что sda1 теперь (hd0,1), а НЕ(hd0,0), как было раньше!
-- boot parameters -- (загрузочные параметры) будут
меняться в зависимости от ОС (операционной системы). В Linux вы можете
использовать, что-то подобное:
linux /boot/vmlinuz initrd /boot/initrd.img
Однако в Windows вы будете использовать, скорее всего, следующую команду:
$ chainloader (hdX,Y)+1
По этой причине, законченный пример скрипта будет выглядеть приблизительно так:
#!/bin/sh -e echo "Adding my custom Linux to GRUB 2" cat << EOF menuentry "My custom Linux" { set root=(hd0,5) linux /boot/vmlinuz initrd /boot/initrd.img } EOF
Или в случае Windows, приблизительно так:
#!/bin/sh -e echo "Adding Windows 8 to GRUB 2 menu" cat << EOF menuentry "Windows 8" { set root=(hd0,1) chainloader (hd0,1)+1 } EOF
EOF конец GRUB файла.
Теперь у нас есть готовый файл. И нам нужно сделать его исполняемым.
$ chmod +x XX_new_os_script
GRUB 2 команды
Еще одна вещь, на которую мне хотелось бы обратить внимание, это данные, содержащиеся во
фрагменте cat << EOF. Как мы сейчас видели, команда cat определяет начало кода в
скрипте, который будет полностью добавлен в GRUB меню, и он не интерпретируется оболочкой. Другими
словами, все, что находится между cat << EOF и EOF, является командами GRUB.
Мы можем использовать ряд различных команд в этом скрипте. Некоторые из них мы встречали
раньше в GRUB legacy, но появились новые, незнакомые команды.
Не беспокойтесь, есть полный список команд, который включает все команды и даже аналогичные
команды GRUB legacy. Некоторые команды были заменены на другие. Для получения дополнительной
информации, пожалуйста, посмотрите GRUB 2 command list.
Обновление GRUB
Новый скрипт создан и размещен, но GRUB меню (grub.cfg) не изменилось. Вам необходимо
запустить команду update-grub, она выполнит обновление меню.
$ update-grub
Это пример из конфигурации двойной загрузки, которую мы
рассмотрим подробнее позже. Я добавил две конфигурации Kubuntu и одну
Ubuntu в GRUB меню Ubuntu. Я сделал это, чтобы исключить конфигурацию по
умолчанию 10_linux, которая неприглядная и использует в заголовке имя
универсального ядра, что вносит путаницу в обозначение и одинаково для
Ubuntu и Kubuntu.
Давайте рассмотрим подробнее. Наша первая задача - это добавить
новые скрипты. После мы увидим, что они загружаются хорошо и удалим
дубликаты.
После перезагрузки, мы получим вот это. Прошу прощения за некрасивый скриншот.
Один раз мы использовали новые скрипты и загрузка прошла удачно. Теперь можно выполнить команду chmod -x для
скрипта 10_linux и исключить generic (универсальные) 2.6.31-14
конфигурации, что позволит содержать наше меню в превосходном состоянии.
Изменение порядка загрузки скрипта с помощью изменения номеров
Вы также можете изменить номера скриптов, если хотите. Например,
я изменил конфигурацию Kubuntu 08 и 09 и сделал, чтобы они загружались
первыми до конфигурации по умолчанию и собственного скрипта Ubuntu.
Замена загрузочной конфигурации по умолчанию
Это можно сделать примерно так же, как показывалось выше. Для
проверки правильно ли загружаются ваши новые скрипты, можно обратиться к
рабочему примеру файла grub.cfg и проверить правильность написания
linux и initrd строк.
Вот пример, который есть у меня:
И соответственно, я создал новый скрипт:
OS Prober (поиск загрузочных конфигураций)
OS Prober может тоже помочь вам. Он найдет дополнительные
конфигурации на вашем жестком диске и добавит их в меню. Вы можете
использовать его для добавления информации в созданные вами скрипты.
Для получения дополнительной информации снова обратимся к файлу
grub.cfg, раздел os-prober.
Переустановка GRUB
GRUB 2 может быть установлен даже во время работы операционной системы, когда она загружена.
Для этого вам не нужно выходить из среды операционной системы. Просто запустите команду grub-install с указанием устройства или необходимого вам раздела.
$ grub-install <target>
<target> может быть /dev/hda, /dev/sdb, /dev/sdc4, и так далее.
Важно, чтобы вы уделили внимание результатам работы этой
команды. Если вы имеете внешние диски, которые подключены во время
работы команды, то она добавит эти диски в список отображаемых
устройств. В этом нет большого вреда, потому что, если конфигурации
окажутся нерабочими, то она их удалит.
grub-install сообщения о нерабочих устройствах
Вот пример, этого:
Вам нужно открыть файл /boot/grub/device.map, удалить неверные
данные, в нашем случае это /dev/sdb и заново выполнить команду grub-install.
Промежуточный итог
Это то, что нам нужно на данный момент. У вас есть инструменты,
которые необходимы для начала работы.
До сих пор я старался делать вещи более понятными, поэтому я подготовил
краткий обзор, который завершает введение и применение основных
разделов. Отсюда мы и начнем.
GRUB 2 имеет три основные части:
- /etc/default/grub - файл содержащий установки меню GRUB 2.
- /etc/grub.d/ - директория, содержащая скрипты, создающие GRUB 2 меню.
- /boot/grub/grub.cfg - GRUB 2 не редактируемый конфигурационный файл.
Команда update-grub считывает директорию /etc/grub.d и
просматривает в ней исполняемые скрипты. Скрипты считываются в порядке
их нумерации и записываются в файл grub.cfg вместе с установками меню,
которые считываются из файла /etc/default/grub.
Загрузочные конфигурации образуются из нескольких источников: по
умолчанию это дистрибутив, другие операционные системы, найденные на
доступных дисках и скрипты, записанные пользователем в соответствии с
требуемыми правилами. Скрипты записываются как shell (sh - оболочка).
Вы можете добавить/удалить конфигурации. Просто выполните команду chmod
для нужного скрипта, поэтому можно не удалять неиспользуемые скрипты.
GRUB 2 может быть переустановлен в любое время, даже во время работы
операционной системы, когда она загружена.
Уже хорошо? Отлично. Вы видите, это довольно просто.
Сейчас давайте рассмотрим несколько реальных случаев. Позже мы
будем настраивать GRUB 2 и узнаем как восстановить его после серьезных
ошибок и ошибок в конфигурациях.
Реальные случаи мультизагрузки
В этом разделе мы рассмотрим несколько общих случаев мультизагрузки, с которыми может столкнуться обычный пользователь.
Некоторые эксперименты были проведены на действительно существующих физических
системах, и некоторые скриншоты загрузочных меню представлены в виде фотографий. Поэтому они слегка
искривлены и не так хорошо выглядят, как остальные скриншоты. Это сделано чтобы убедить вас, что
работа с GRUB 2 также проста, как и другие административные задачи. Они просто требуют немного
терпения и внимания.
Двойная загрузка: две операционные системы с GRUB 2
Это, наверное, простейшая конфигурация двойной загрузки. Обе
операционные системы используют GRUB 2, таким образом, они могут легко
взаимодействовать друг с другом. В нашем случае это две системы Ubuntu
9.10 и Kubuntu 9.10 с одинаковой файловой системой Ext4.
Ubuntu была установлена первой, GRUB 2 установлен в главную
загрузочную запись (MBR) на диске /dev/sda. Kubuntu установлена второй,
ее загрузчик также установлен в MBR, который перезаписал предыдущий
экземпляр GRUB 2. Однако, скрипт OS probe обнаружил и добавил Ubuntu в
конфигурационные файлы.
Если вы читали мое руководство по Kubuntu,
то вы знаете, что загрузочная конфигурация Kubuntu также обозначается
как и Ubuntu. Это может внести путаницу, если у вас несколько различных
Ubuntu конфигураций на вашей машине.
В этом разделе мы сделаем следующее:
- Узнаем как редактировать существующие конфигурации и как сделать их более презентабельными.
- Добавим новые конфигурации и перенумеруем существующие.
Это даст нам первоначальную информацию о работе GRUB 2 и о том,
что нужно делать пользователям для обеспечения правильного
функционирования. После этого мы проверим загрузку систем с GRUB 2 из
GRUB legacy и наоборот. И после этого мы добавим Windows.
Частично мы видели это ранее. Заменим имеющуюся конфигурацию по
умолчанию, которая выглядит не столь привлекательно, как нам бы
хотелось.
Поэтому обратимся к файлу grub.cfg. Проверим синтаксис
10_linux и скопируем из него некоторые данные в новые скрипты, которые
мы назвали 08_9_10_kubuntu и 09_9_10_kubuntu_recovery. Подобное мы
делали раньше.
После этого нам необходимо сделать скрипты исполняемыми с помощью команды chmod +x и обновить GRUB. Очень просто.
После перезагрузки и проверки работы системы мы можем заменить 10_linux конфигурацией с собственными скриптами.
Работа сделана, все очень просто!
Двойная загрузка: две операционные системы с GRUB legacy и GRUB 2
Это интересный случай. Предположим, вы имеете две операционные
системы подобные Ubunty 9.10, которые используют новый загрузчик GRUB 2 и
загружаются из раздела с файловой системой Ext4, и классический
дистрибутив подобный openSUSE 11.2, который тоже использует Ext4
файловую систему, но загружается с помощью старой версии GRUB.
Вот что мы узнаем:
- Как загрузить Ubuntu из среды openSUSE GRUB.
- Как загрузить openSUSE из среды Ubuntu GRUB.
- Как редактировать конфигурации в обоих системах, чтобы они оставались рабочими.
Давайте, сделаем это.
Решение: какую систему сделать системой по умолчанию?
Это то, что вам необходимо решить. У вас имеется два варианта загрузки. и вам нужно выбрать один по умолчанию.
Если бы вы спросили меня ранее, то я бы порекомендовал вам
использовать GRUB legacy в качестве загрузчика по умолчанию, потому что
это качественный продукт и имеет известные официальные каналы поддержки.
Запуск GRUB 2 для вас будет не так важен.
Таким образом, если для загрузки вы используете GRUB legacy, то вам необходимо сделать следующее:
- Установить GRUB в главную загрузочную запись (MBR) во время
установки дистрибутива, например, openSUSE, как в нашем примере.
Обратите на это внимание, когда устанавливаете дистрибутив!
- Установить GRUB 2 в корневой раздел, в который установлен
используемый дистрибутив, в этом случае Ubuntu. Уделите этому внимание,
когда устанавливаете дистрибутив!
Другими словами, если вы планируете использовать GRUB 2, как загрузчик по умолчанию, вам необходимо сделать наоборот.
Если вы не полностью уверены, посмотрите таблицу разделов.
В нашем примере, Ubuntu была установлена первой с корневой
директорией в /dev/sda6 и домашней директорией home в /dev/sda7.
openSUSE была установлена следующей в /dev/sda1. Так как мы хотим
использовать загрузчик GRUB legacy, тогда нужно сделать следующее:
- Загрузчик Ubuntu необходимо установить в /dev/sda6.
- Загрузчик openSUSE нужно установить в MBR (/dev/sda).
Когда это выполнено, загрузите систему и посмотрите, что получилось.
После установки openSUSE вы заметите, что зеленое меню GRUB содержит только конфигурацию
openSUSE. Причина этого в том, что GRUB legacy не знает, как интерпретировать структуру GRUB 2,
поэтому не может найти дополнительные конфигурации меню. Вы должны добавить их вручную.
Загрузите openSUSE и откройте в текстовом редакторе файл menu.lst. Вначале сделайте его резервную копию!
В действительности мы не знаем как работать с GRUB 2
конфигурациями из GRUB legacy. Поэтому мы будем конфигурировать его так
же как Windows. Настроим последовательную загрузку (chainload) другой операционной системы, когда управление передается другому загрузчику.
Будет ли это работать? Я не знаю, но давайте проверим!
Воспользуемся нашим опытом работы с GRUB и попробуем его применить к
новый ситуации.
Для тех кто не видит, что показано на изображении, мы добавили в файл menu.lst следующие строки:
title Ubuntu 9.10 Karmic Koala root (hd0,5) chainloader (hd0,5)+1
После загрузки вы увидите меню (снова неважный скриншот):
Продолжение (часть 2)
http://rus-linux.net/MyLDP/boot/GRUB2-full-tutorial.html
|