Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Linux From Scratch (version 6.8)
Назад Глава 8. Делаем систему LFS загружаемой Вперед

8.4. Использование загрузчика GRUB для настройки процесса загрузки

8.4.1. Введение

Загрузка системы может оказаться сложной, поэтому предварим ее несколькими предостережениями. Ознакомьтесь с загрузчиком, используемым в данный момент, а также со всеми другими операционными системами, присутствующими на жестком диске (дисках), которые должны быть загружены. Убедитесь в том, что подготовлен аварийный загрузочный диск, с помощью которого можно "спасти" компьютер в случае, если он станет неработоспособным (перестанет загружаться).

Процедура представляет собой запись некоторых специальных файлов GRUB в определенные места на жестком диске. Мы настоятельно рекомендуем создать загрузочную дискету с GRUB в качестве резервной. Вставьте чистую дискету и запустите следующие команды:

cd /tmp
grub-mkrescue --output=grub-img.iso
dd if=grub-img.iso of=/dev/fd0 bs=1440 count=1

Кроме того, можно создать загрузочный компакт диск, записав с помощью программы записи на компакт-диски на чистый компакт-диск имеющййся в хост системе образ grub-img.iso.

GRUB использует свою собственную структуру именования дисков и разделов в виде (hdn,m), где n является номером жесткого диска, а m - номером раздела. Номера жестких дисков начинаются с нуля, а номера разделов начинаются с единицы для обычных разделов и с пяти — для расширенных разделов. Отметим, что имеются отличия от более ранних версий, в которых обе нумерации начинались с нуля. Например, раздел sda1 для GRUB будет (hd0,1), а sdb3 - (hd1,3). В отличие от Linux, GRUB не рассматривает диски CD-ROM как жесткие диски. Например, если в качестве hdb используется компакт-диск, а в качестве hdc - второй жесткий диск, то второй жесткий диск все равно будет обозначаться как (hd1).

Вы можете определить в GRUB ваши дисковые устройства, запустив следующую команду:

grub-mkdevicemap --device-map=device.map
cat device.map

Расположение загрузочного раздела может выбрать пользователь, что отразится на конфигурировании. Одна из рекомендаций — использовать отдельный небольшой (предлагаемый размер - 100 МБ) раздел, предназначенный для хранения только загрузочной информации. Тогда любая сборка, будь то система LFS или какой-нибудь коммерческий дистрибутив, сможет получить доступ к одним тем же загрузочным файлам и доступ к ним будет возможен из любой загруженной системы. Если вы решили сделать именно так, то вам нужно смонтировать отдельный раздел, переместить в новый раздел все файлы из текущего директория /boot (например, ядро linux, которое вы только что собрали в предыдущем разделе). Затем вам потребуется размонтировать раздел и перемонтировать его как /boot. Если вы это сделаете, то не забудьте обновить таблицу /etc/fstab.

Можно воспользоваться текущим разделом lfs, но конфигурирование загрузки нескольких систем станет сложнее.

8.4.2. Общая настройка конфигурации

Воспользуйтесь приведенными выше сведениями и выберите подходящее название для корневого раздела (или загрузочного раздела, если используется отдельный раздел). В следующем примере предполагается, что корневым разделом (или отдельным загрузочным разделом) является раздел sda2.

Установите файлы GRUB в директорий /boot/grub:

grub-install --grub-setup=/bin/true /dev/sda

Мы сейчас используем --grub-setup=/bin/true для того, чтобы предотвратить обновление главной загрузочной записи Master Boot Record (MBR). Таким образом, мы можем проверить нашу систему перед тем, как вносить изменения, которые трудно будет отменить.

Создайте файл /boot/grub/grub.cfg:

grub-mkconfig -o /boot/grub/grub.cfg

Команда grub-mkconfig для создания этого файла использует файлы из директория /etc/grub.d/. Конфигурационный файл будет выглядеть приблизительно следующим образом:

#
# 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
#

### BEGIN /etc/grub.d/00_header ###
set default=0
set timeout=5
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###
menuentry "GNU/Linux, Linux 2.6.37-lfs-6.8" {
        insmod ext2
        set root=(hd0,2)
        search --no-floppy --fs-uuid --set 915852a7-859e-45a6-9ff0-d3ebfdb5cea2
        linux   /boot/vmlinux-2.6.37-lfs-6.8 root=/dev/sda2 ro
}
menuentry "GNU/Linux, Linux 2.6.37-lfs-6.8" (recovery mode)" {
        insmod ext2
        set root=(hd0,2)
        search --no-floppy --fs-uuid --set 915852a7-859e-45a6-9ff0-d3ebfdb5cea2
        linux   /boot/vmlinux-2.6.37-lfs-6.8 root=/dev/sda2 ro single
}
menuentry "GNU/Linux, Linux 2.6.28-11-server" {
        insmod ext2
        set root=(hd0,2)
        search --no-floppy --fs-uuid --set 6b4c0339-5501-4a85-8351-e398e5252be8
        linux   /boot/vmlinuz-2.6.28-11-server root=UUID=6b4c0339-5501-4a85-8351-e398e5252be8 ro
        initrd  /boot/initrd.img-2.6.28-11-server
}
menuentry "GNU/Linux, Linux 2.6.28-11-server (recovery mode)" {
        insmod ext2
        set root=(hd0,2)
        search --no-floppy --fs-uuid --set 6b4c0339-5501-4a85-8351-e398e5252be8
        linux   /boot/vmlinuz-2.6.28-11-server root=UUID=6b4c0339-5501-4a85-8351-e398e5252be8 ro single
        initrd  /boot/initrd.img-2.6.28-11-server
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

Замечание

  • Даже если есть предупреждение не редактировать этот файл, вы можете делать это, пока не перезапустите команду grub-mkconfig.
  • Строки search, как правило, не используются в системе LFS, поскольку с их помощью можно задать значения только для внутренней переменной GRUB, используемой при поиске образа ядра. Те же самые возможности без накладных расходов на поиск можно получить с помощью команды set root.
  • Команды set root и insmod ext2 можно вынести из разделов menuentry с тем, чтобы они были применимы сразу ко всем разделам файла. В результате раздел становится проще:
  • menuentry "Linux 2.6.37-lfs-6.8" {
    linux   /boot/vmlinux-2.6.37-lfs-6.8 root=/dev/sda2 ro
    }
    
  • Для передачи идентификатора UUID в ядро требуется начальный диск RAM (Initrd), который не собирается в системе LFS.
  • Если раздел /boot устанавливается на отдельный раздел, в строках linux и initrd в именах файлах не должен использоваться префикс /boot
  • В этом примере в /boot также находятся файлы ядра системы Ubuntu.

8.4.3. Тестирование конфигурации

Образ core загрузчика GRUB также является мультизагрузочным ядром, так что если у вас уже есть загруженный старый вариант GRUB Legacy, вы можете с помощью вашего старого загрузчика загрузить GRUB-1.98. Для этого вам потребуется сейчас выйти из среды chroot, а затем в следующих разделах книги войти в эту среду обратно, чтобы завершить оставшуюся часть проекта.

/sbin/reboot
...
grub> root (hd0,1)
grub> kernel /boot/grub/core.img
grub> boot

Обратите внимание, что в командах GRUB, приведенных выше, предполагается, что используется вариант загрузчика GRUB Legacy. Появится подсказка GRUB (очень похожая на GRUB Legacy), и вы можете исследовать интерфейс или загрузить одну из систем, указанную в файле в grub.cfg.

8.4.4. Изменение главной загрузочной записи

Если вы протестировали конфигурацию GRUB так, как указано выше, то заново войдите в среду chroot.

Предупреждение

Следующая команда перезапишет текущий загрузчик. Не выполняйте команду, если это нежелательно, например, при использовании стороннего менеджера загрузок, который использует главную загрузочную запись Master Boot Record (MBR).

Измените MBR следующим образом:

grub-setup '<DEVICE>'

Вместо значения DEVICE, приведенного выше, укажите ваш загрузочный диск, как правило, '(hd0) ' или /dev/sda. Если используется (hd0), то удалите скобки с обратными слешами или одинарными кавычками с тем, чтобы командная оболочка не интерпретировала их как обращение к подоболочке.

Эта программа по умолчанию использует следующие значения:

  • образ boot - boot.img
  • образ core - core.img
  • директорий - /boot/grub
  • отображение устройств - device.map
  • значение root, устанавливаемое по умолчанию – ищется автоматически

Замечание

Если в файле grub.cfg нет инструкции 'set root', то раздел root ищется автоматически. Это тот раздел, где должно быть ядро linux и другие вспомогательные файлы. Это не тот раздел, что указан в "'root=' параметр" в конфигурационной строке 'linux'. Раздел, указанный как этот параметр, монтируется как '/ '. В примере grub.cfg, приведенном выше, оба значения указывают на / dev/sda2, но если есть отдельный загрузочный раздел, эти значения будут различными.


Предыдущий раздел: Оглавление Следующий раздел:
Пакет Linux-2.6.37   Глава 9. Завершение