Настройка начального загрузчика

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Handbook:AMD64/Installation/Bootloader and the translation is 100% complete.
AMD64 Handbook
Установка
Об установке
Выбор подходящего источника для установки
Настройка сети
Подготовка дисков
Установка stage3
Установка базовой системы
Настройка ядра
Настройка системы
Установка системных утилит
Настройка загрузчика
Завершение
Работа с Gentoo
Введение в Portage
USE-флаги
Возможности Portage
Система сценариев инициализации
Переменные окружения
Работа с Portage
Файлы и каталоги
Переменные
Смешение ветвей программного обеспечения
Дополнительные утилиты
Дополнительные репозитории пакетов
Расширенные возможности
Настройка сети
Начальная настройка
Расширенная настройка
Модульное построение сети
Беспроводная сеть
Добавляем функциональность
Динамическое управление



Выбор загрузчика

Когда ядро Linux настроено, системные утилиты установлены и конфигурационные файлы отредактированы, настало время для установки последней важной части системы Linux: загрузчика.

Загрузчик отвечает за запуск ядра Linux во время загрузки — без него система не будет знать, как действовать после нажатия кнопки питания.

Для amd64, мы описали настройку либо GRUB, либо LILO для систем на базе BIOS, и GRUB или efibootmgr для UEFI-систем.

В этом разделе Руководства было сделано разделение между установкой пакета (emerge) загрузчика и установкой загрузчика на системный диск. Термин установка пакета (emerge) будет использоваться для установки пакета в систему с помощью пакетного менеджера Portage. Термин установка загрузчика на системный диск будет означать копирование файлов загрузчика или физическое изменение соответствующих разделов диска для того, чтобы активировать и подготовить к работе загрузчик для следующей перезагрузки.

По умолчанию: GRUB

По умолчанию, большинство систем Gentoo на данный момент используют GRUB (из пакета sys-boot/grub), который является прямым продолжателем GRUB Legacy. Без дополнительных настроек GRUB поддерживает старые системы BIOS ("pc"). С небольшими настройкам, которые нужно выполнить до сборки, GRUB может поддерживать более чем полутора десятка дополнительных платформ. Для получения более подробной информации смотрите раздел Предварительные требования статьи GRUB.

Emerge

Если используется старая материнская плата, BIOS которой поддерживает только таблицу разделов MBR, для установки GRUB не нужно никаких дополнительных настроек:

root #emerge --ask --verbose sys-boot/grub

Заметка для пользователей UEFI: запущенная команда выведет включенные значения в переменной GRUB_PLATFORMS, перед компиляцией. Если используется более новая UEFI-совместимая материнская плата, пользователям сперва нужно убедиться, что GRUB_PLATFORMS="efi-64" включено (обычно это уже сделано по умолчанию). Если это не так, добавьте GRUB_PLATFORMS="efi-64" в файл /etc/portage/make.conf до компиляции GRUB, что позволит собрать пакет с поддержкой EFI:

root #echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf
root #emerge --ask sys-boot/grub
Если GRUB был каким-то образом был установлен до включения GRUB_PLATFORMS="efi-64", то добавьте строку (из примера выше) в make.conf, после чего повторно переопределите зависимости для для набора пакетов world с помощью emerge --update --newuse:
root #emerge --ask --update --newuse --verbose sys-boot/grub

GRUB теперь установлен в системе, но еще не активирован.

Установка

Далее установим необходимые для GRUB файлы в каталог /boot/grub/ с помощью команды grub-install. Если предположить, что первый диском (тот, с которого будет загружаться система) является /dev/sda, то одна из следующих команд сделает это:

  • При использовании BIOS:
root #grub-install /dev/sda
  • При использовании UEFI:
Важно
Убедитесь, что системный раздел EFI был смонтирован перед запуском grub-install. grub-install может установить файл GRUB EFI (grubx64.efi) в неправильном каталоге без каких-либо сообщений, о том, что использовался неправильный каталог.
root #grub-install --target=x86_64-efi --efi-directory=/boot
Заметка
Измените параметр --efi-directory на корневой каталог системного раздела EFI. Это необходимо, если раздел /boot не был отформатирован как FAT.
Важно
Если grub-install возвращает ошибку наподобии Could not prepare Boot variable: Read-only file system, необходимо перемонтировать специальную точку монтирования efivars в режим чтения-записи:
root #mount -o remount,rw,nosuid,nodev,noexec --types efivarfs efivarfs /sys/firmware/efi/efivars

Некоторые производители материнских плат поддерживают только каталог /efi/boot/ для расположения файла .EFI в системном разделе EFI (ESP). Установщик GRUB может выполнить эту операцию автоматически, если использовать параметр --removable. Убедитесь, что ESP смонтирован до запуска следующих команд. Предполагая, что ESP смонтирован в /boot (как было предложено ранее), выполните:

root #grub-install --target=x86_64-efi --efi-directory=/boot --removable

Это создает каталог по умолчанию, определенный спецификацией UEFI, а затем скопирует файл grubx64.efi в каталог EFI «по умолчанию», определенный той же спецификацией.

Настройка

Далее, нужно сгенерировать конфигурационный файл GRUB на основе настроек пользователя, указанных в файле /etc/default/grub и сценариях /etc/grub.d. В большинстве случаев ничего не нужно настраивать, так как GRUB автоматически определяет, какое ядро есть для загрузки (самый высокий приоритет у /boot/) и какая файловая система у rootfs. Здесь также можно добавить параметры ядра в /etc/default/grub, используя переменную GRUB_CMDLINE_LINUX.

Для создания окончательной конфигурации GRUB, запустите команду grub-mkconfig:

root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-5.15.52-gentoo
Found initrd image: /boot/initramfs-genkernel-amd64-5.15.52-gentoo
done

Вывод команды должен содержать по крайней мере один образ Linux, так как он необходим для загрузки системы. Если используется initramfs или ядро создавалось с помощью genkernel, также должен быть указан правильный образ initrd. Если это не так, перейдите в /boot/ и проверьте содержимое, используя команду ls. Если файлы действительно отсутствуют, вернитесь к инструкции по настройке и установке ядра.

Совет
Для обнаружения других операционных систем на других диска можно использовать утилиту os-prober. Она может обнаруживать Windows 7, 8.1, 10, и другие дистрибутивы Linux. Для таких систем с двойной загрузкой необходимо установить пакет sys-boot/os-prober и затем перезапустить команду grub-mkconfig (как было показано выше). Если появятся проблемы, полностью перечитайте статью GRUB до того, как спрашивать у сообщества Gentoo поддержки.

Альтернатива 1: LILO

Emerge

LILO, или LInuxLOader, это проверенная временем рабочая лошадка среди загрузчиков Linux. Однако, по сравнению с GRUB ей явно не хватает функционала. LILO всё ещё используется на системах, где GRUB не может работать. Конечно, он также используется, потому что некоторые люди знают LILO лучше и хотят использовать его. В любом случае, Gentoo поддерживает оба загрузчика.

Установить LILO можно очень быстро; просто используйте emerge.

root #emerge --ask sys-boot/lilo

Настройка

Для настройки LILO сперва создайте /etc/lilo.conf:

root #nano -w /etc/lilo.conf

Конфигурационный файл разбит на разделы для обозначения загрузочного ядра. Убедитесь, что известен путь до файла ядра (вместе с версией) и путь до initramfs файлов, так как они должны быть указаны в этом конфигурационном файле.

Заметка
Если корневая файловая система — JFS, добавьте строку append="ro" после каждого варианта загрузки, поскольку JFS необходимо пересматривать журнал перед монтированием на чтение-запись.
ФАЙЛ /etc/lilo.confПример конфигурации LILO
boot=/dev/sda             # Установка LILO в MBR
prompt                    # Дать пользователю возможность выбрать другой вариант
timeout=50                # Ждать 5 (пять) секунд перед загрузкой варианта по умолчанию
default=gentoo            # После тайм аута загружать вариант "gentoo"
compact                   # Это значительно сокращает время загрузки и сохраняет маленький размер файла map; может работать некорректно на некоторых системах
image=/boot/vmlinuz-5.15.52-gentoo
  label=gentoo            # Имя этого варианта
  read-only               # При старте корень только для чтения. Не менять!
  root=/dev/sda3          # Расположение корневой файловой системы
  
image=/boot/vmlinuz-5.15.52-gentoo
  label=gentoo.rescue     # Имя этого варианта
  read-only               # При старте корень только для чтения. Не менять!
  root=/dev/sda3          # Расположение корневой файловой системы
  append="init=/bin/bb"   # Запуск встроенной оболочки восстановления Gentoo
  
# Следующие две строки нужны для двойной загрузки с системой Windows.
# В этом примере, Windows находится на /dev/sda6.
other=/dev/sda6
  label=windows
Заметка
Если схема разделов и/или используемый образ ядра другие, то внесите соответствующие корректировки.

Если необходим initramfs, то измените конфигурацию, указав файл initramfs и сообщив ему, где находится корневое устройство:

ФАЙЛ /etc/lilo.confДобавление информации о initramfs в загрузочную запись
image=/boot/vmlinuz-5.15.52-gentoo
  label=gentoo
  read-only
  append="root=/dev/sda3"
  initrd=/boot/initramfs-genkernel-amd64-5.15.52-gentoo

Если необходимо передать ядру дополнительные параметры используйте оператор append. Например, добавьте оператор video, чтобы включить кадровый буфер:

ФАЙЛ /etc/lilo.confДобавление параметра video к загрузочным параметрам
image=/boot/vmlinuz-5.15.52-gentoo
  label=gentoo
  read-only
  root=/dev/sda3
  append="video=uvesafb:mtrr,ywrap,1024x768-32@85"

При использовании genkernel необходимо помнить, что ядро использует параметры загрузки так же, как и установочный CD. Например, если необходимо разрешить поддержку устройств SCSI, добавьте doscsi как параметр ядра.

Теперь сохраните файл и выйдите из редактора.

Установка

Для завершения запустите исполняемый файл /sbin/lilo, что бы LILO смог применить для системы настройки из /etc/lilo.conf (то есть установить себя на диск). Помните, что /sbin/lilo должен исполняться каждый раз, когда устанавливается новое ядро или был изменен файл lilo.conf для загрузки системы, если имя файла ядра было изменено.

root #/sbin/lilo

Альтернатива 2: efibootmgr

На UEFI-системах, с прошивкой UEFI (другими словами, основным загрузчиком), можно напрямую управлять загрузочными записями UEFI. Таким системам не требуется дополнительный (также известный как вторичный) загрузчик, такой как GRUB, который помогает загрузить систему. Учитывая сказанное, использование дополнительного EFI-загрузчика типа GRUB имеет смысл лишь в том, чтобы расширить функциональность UEFI во время загрузки. Использование efibootmgr подойдёт больше для тех, кто хочет получить больше минимализма (хотя это сложнее) при загрузке системы; использование GRUB проще для большинства пользователей, так как он предлагает более гибкий подход для загрузки UEFI-систем.

Помните, sys-boot/efibootmgr — это не загрузчик; это средство для взаимодействия с прошивкой UEFI и обновления её настроек, для того, чтобы можно было загрузить установленное ядро Linux с дополнительными параметрами (если необходимо) или организовать несколько загрузочных записей. Это взаимодействие осуществляется через переменные EFI (что требует поддержки переменных EFI со стороны ядра).

Перед тем, как продолжить, обязательно прочитайте всю статью EFI stub. В ядре должны быть включены определенные параметр, чтобы ядро могло загрузится напрямую с системной прошивкой UEFI. Это может потребовать пересборки ядра. Также взгляните на статью efibootmgr.

Заметка
Повторим еще раз, efibootmgr не является обязательным требованием для загрузки из UEFI. Ядро Linux может загружаться сразу же, а дополнительные параметры ядра могут быть встроены в само ядра (в конфигурации ядра есть параметр CONFIG_CMDLINE, который позволяет пользователю определить параметры загрузки). Даже initramfs может быть встроен в ядро.

Тем, кто решил применить такой подход, необходимо установить программное обеспечение:

root #emerge --ask sys-boot/efibootmgr

Создайте каталог /boot/efi/boot/ и затем скопируйте в него ядро, назвав его bootx64.efi:

root #mkdir -p /boot/efi/boot
root #cp /boot/vmlinuz-* /boot/efi/boot/bootx64.efi

Далее, сообщите прошивке UEFI создать загрузочную запись и называть её "Gentoo", в которой будет свежее ядро с EFI stub:

root #efibootmgr --create --disk /dev/sda --part 2 --label "Gentoo" --loader "\efi\boot\bootx64.efi"

Если используется файловая система инициализации, размещаемая в оперативной памяти (initramfs), добавьте соответствующий загрузочный параметр:

root #efibootmgr -c -d /dev/sda -p 2 -L "Gentoo" -l "\efi\boot\bootx64.efi" initrd='\initramfs-genkernel-amd64-5.15.52-gentoo'
Заметка
Символ \, применяемый для разделения каталогов, является обязательным при использовании определений UEFI.

После внесения изменений и перезагрузки системы появится загрузочная запись под именем «Gentoo».

Альтернатива 3: syslinux

Syslinux — ещё один альтернативный загрузчик для архитектуры amd64. Он поддерживает MBR, а с версии 6.00 поддерживает загрузку EFI. Также поддерживаются загрузка через PXE (по сети) и менее известные возможности. Хотя Syslinux является популярным загрузчиком для многих, он не поддерживается в данном Руководстве. Более подробную информацию по установке и настройке этого загрузчика смотрите в статье о Syslinux.


Перезагрузка системы

Выйдите из изолированной среды и размонтируйте все смонтированные разделы. Затем введите ту самую волшебную команду, которая запускает последний, настоящий тест: reboot.

root #exit
cdimage ~#cd
cdimage ~#umount -l /mnt/gentoo/dev{/shm,/pts,}
cdimage ~#umount -R /mnt/gentoo
cdimage ~#reboot

Не забудьте вынуть загрузочный компакт-диск, иначе он загрузится снова вместо новой системы Gentoo.

Перезагрузившись во вновь установленную систему, переходите к завершению установки Gentoo.