Миграция на GRUB2
Данное руководство содержит инструкции по плавному переходу с GRUB Legacy на GRUB.
Основы
Что такое 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 должен выглядеть примерно так:
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. Пример такого файла приведен ниже.
(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
GRUB_CMDLINE_LINUX
, чтобы указать параметры, передаваемые в командной строке ядра.Последовательная загрузка GRUB2 из GRUB Legacy для тестирования настроек
Так как из-за неправильной конфигурации GRUB вы можете получить незагружающуюся систему, давайте проверим конфигурацию GRUB2, прежде чем сделаем ее постоянной. Чтобы это сделать, мы запустим GRUB2 из GRUB Legacy. Это можно сделать, добавив новый раздел к файлу /boot/grub/grub.conf. Пример показан ниже.
Заметьте, что корневая система может быть и не на
(hd0,0)
, который мы использовали в примере. Удостоверьтесь, что она совпадает со значением из конфигурационного файла /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 --ask -vc sys-boot/grub:0
Миграция теперь завершена.
Поддержка 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.