Миграция на GRUB2

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page GRUB2 Migration and the translation is 100% complete.

Other languages:
English • ‎español • ‎français • ‎polski • ‎português do Brasil • ‎čeština • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어

Цель данной статьи - предоставить читающему возможность простой миграции с GRUB Legacy на GRUB2.

Основы

Что такое GRUB?

GRUB это один из самых частоиспользуемых загрузчиков, который используется на всех компьютерах с Linux, кроме встраиваемых. Роль GRUB состоит в загрузке ядра Linux с диска в память, а также передаче ему управления.

Зачем переходить?

Прежде всего, GRUB Legacy больше не поддерживается, и, поэтому, больше не обновляется. GRUB Legacy был создан в то время, когда разработчики могли сделать несколько предположений при разработке, которые сегодня являются ложными. Например, GRUB Legacy не может загружаться с дисков, размером больше, чем 2 Тб, и предполагает, что никакие новые файловые системы не заменят /boot.

GRUB2 стремится быть более ясным, более портируемым, более мощным, и имеет более чистую кодовую базу. GRUB2 поддерживает большее число конфигураций оборудования, большее число файловых систем, и большее число разметок диска, чем его предшественник.

Переход на GRUB2

Переход на GRUB2 достаточно прост: он будет установлен в процессе обычного обновления системы пакетным менеджером. Если он не будет загружен автоматически, его всегда можно установить командой sys-boot/grub:2:

root #emerge --ask sys-boot/grub:2

Загрузочный диск

Первая важная часть состоит в том, чтобы понять, какой диск загрузочный. Для тех, кто делал установку по Gentoo Handbook, это будет /dev/sda. Если не уверены, то простой способ это проверить это посмотреть настройки установленного GRUB Legacy. Проверка файла /boot/grub/grub.conf это основное место для проверки.

Заметка
Убедитесь, что раздел /boot смонтирован, чтобы эти файлы были доступны. Просто выполните команду
root #mount /boot

Файл grub.conf должен выглядеть примерно так:

Файл /boot/grub/grub.conf
default 0
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
  
title Gentoo Linux 3.2.12
root (hd0,0)
kernel /boot/kernel-3.2.12-gentoo root=/dev/sda3 quiet dolvm
initrd /boot/initramfs-genkernel-x86_64-3.2.12-gentoo

На основании данного файла, можно узнать, что (hd0) это устройство загрузки, но нам нужно преобразовать его в настоящее устройство. Чтобы узнать это, просмотрите файл /boot/grub/device.map. Пример такого файла приведен ниже.

Файл /boot/grub/device.map
(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb
Заметка
Если подозреваете, что файл /boot/grub/device.map неправилен, запустите следующую команду, чтобы пересоздать его:
root #grub-install --recheck /dev/sda

На основании вышеприведенного файла, мы знаем, что /dev/sda это устройство загрузки.

Установка и конфигурация GRUB2

Следующим шагом будет установка и конфигурация GRUB2 в раздел /boot без удаления GRUB Legacy из Master Boot Record (MBR). Пример ниже использует /dev/sda — замените его на корректный путь к загрузочному диску.

Сперва установите необходимые файлы GRUB2 в каталог /boot/grub.

root #grub-install --grub-setup=/bin/true /dev/sda
Installation finished. No error reported.
Предупреждение
Параметр --grub-setup=/bin/true сообщает grub-install, чтобы он не устанавливал GRUB2 в MBR. Если этот параметр опущен, GRUB Legacy будет перезаписан и запуск GRUB2 из GRUB Legacy в дальнейшем будет невозможен.

Теперь мы можем просканировать доступные ядра и сгенерировать соответствующий конфигурационный файл /boot/grub/grub.cfg. Пропустите этот шаг, если делали ручную настройку.

root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/kernel-3.2.12-gentoo
Found initrd image: /boot/initramfs-genkernel-x86_64-3.2.12-gentoo
done
Предупреждение
GRUB2 использует файл конфигурации /boot/grub/grub.cfg, в то время как GRUB Legacy использует /boot/grub/grub.conf, поэтому, пожалуйста, удостоверьтесь, что по ошибке не используется старый файл, например, при использовании автодополнения по tab, если, конечно, старые файлы уже не стерты.
Заметка
grub-mkconfig имеет строгие требования к названиям образов ядра и initramfs. Ядро должно называться kernel-${version} или vmlinuz-${version}, а initramfs должен называться initramfs-${version}.img, initramfs-genkernel-${version}, initramfs-genkernel-${arch}-${version}, initrd-${version}.img, initrd.img-${version}, initrd-${version}.gz, либо initrd-${version}. Эти файлы должны находиться в /boot.
Заметка
Файл /etc/default/grub контролирует работу grub-mkconfig. Если необходимо передать ядру параметр (например при использовании genkernel и загрузке с LVM или RAID-массива), необходимо отредактировать данный файл перед генерацией /boot/grub/grub.cfg. Например, это можно сделать так:
root #nano /etc/default/grub
Посмотрите статью о настройке GRUB2 на Gentoo Wiki, либо официальное руководство по GRUB2, чтобы решить, как правильно модифицировать файл. Большинству пользователей понадобится изменить GRUB_CMDLINE_LINUX, чтобы указать параметры, передаваемые в командной строке ядра.

Запуск GRUB2 из GRUB Legacy для тестирования настроек

Так как из-за неправильной конфигурации GRUB вы можете получить незагружающуюся систему, давайте проверим конфигурацию GRUB2, прежде чем сделаем ее постоянной. Чтобы это сделать, мы запустим GRUB2 из GRUB Legacy. Это можно сделать, добавив новый раздел к файлу /boot/grub/grub.conf. Пример показан ниже.

Заметка
Заметьте, что корневая система может быть и не на (hd0,0), который мы использовали в примере. Удостоверьтесь, что она совпадает со значением из конфигурационного файла /boot/grub/grub.conf.
Файл /boot/grub/grub.conf
default 0
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
  
title GRUB2 Chainload
root (hd0,0)
kernel /boot/grub/i386-pc/core.img
boot
  
title Gentoo Linux 3.2.12
root (hd0,0)
kernel /boot/kernel-3.2.12-gentoo root=/dev/sda3 quiet dolvm
initrd /boot/initramfs-genkernel-x86_64-3.2.12-gentoo

Теперь необходимо перезагрузить компьютер, и выбрать GRUB2 Chainload из меню GRUB, когда машина начнет загрузку. Отобразится другое меню GRUB, которое должно назваться как GRUB 2.0.0, или выше, в верхней части экрана, и показать существующие ядра для загрузки. Если это не заработает, просто перезагрузите систему, и выберите нормальную опцию загрузки, вместо GRUB2 Chainload.

Замена и удаление GRUB Legacy

Если все хорошо работает, можно заменить GRUB Legacy, и удалить его из системы.

Предупреждение
Так как система была только что перезагружена, необходимо снова смонтировать /boot. Проверьте, что используете именно правильное загрузочное устройство, и не /dev/sda, хотя это всего лишь пример. Если /boot не смонтирован до запуска grub-install, то система может стать не загружаемой.
Заметка
Как ранее упоминалось, если GRUB2 был установлен с USE-флагом multislot, то будет использоваться grub2-install заместо grub-install. В этом случае после удаления GRUB Legacy в следующем шаге, GRUB2 должен быть переустановлен без USE-флага multislot, так чтобы grub-install и grub-mkconfig стали командами GRUB2.
root #grub-install /dev/sda
Installation finished. No error reported.

Сейчас можно воспользоваться пакетным менеджером, чтобы удалить sys-boot/grub:0.

root #emerge -avC "=sys-boot/grub-0.97*"

Миграция теперь завершена.

Поддержка GRUB2

После установки нового ядра, нужно выполнить следующий шаг, чтобы удостовериться, что конфигурация GRUB2 определяет новое ядро (если только не используете ручную настройку).

Заметка
Убедитесь, что раздел /boot смонтирован до выполнения следующей команды.
root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/kernel-3.3.8-gentoo
Found initrd image: /boot/initramfs-genkernel-x86_64-3.3.8-gentoo
Found linux image: /boot/kernel-3.2.12-gentoo
Found initrd image: /boot/initramfs-genkernel-x86_64-3.2.12-gentoo
done

This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Cardoe
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.