Настройка параметров ядра в grub

Установка Grub на флешку

Если вы устанавливаете на фшелку дистрибутив, то у вас не возникнет никаких проблем с установкой загрузчика. Он устанавливается так же, как и при установке на жесткий диск. Вам достаточно перейти в chroot окружение новой системы, подключить все ее разделы, а затем просто установить загрузчик командой:

И создать конфигурационный файл:

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

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

Второе, что важно заметить, фшелку желательно отформатировать в файловую систему fat32. Это важно, чтобы там можно было разместить файлы Grub. Потому что если флешка будет форматирована в NTFS, то ничего не выйдет, а в ext4 — то вы не сможете подключить ее в Windows и использовать для обмена файлами.

Далее подключите флешку в какую-нибудь папку, например, mnt:

Имя устройства /dev/sdb1 — это адрес первого раздела на вашей флешке. Обычно там есть только один раздел, так и должно быть. Если больше, то берите первый. А имя флешки может отличаться — sdb, sdc, sdd или другие. Смотрите как флешка называется у вас с помощью fdisk:

Когда устройство подключено мы можем перейти к установке загрузчика:

Здесь мы указываем параметр —root-directory, это та папка, которая будет считаться корнем системы, и откуда будут браться файлы загрузчика при старте. Установщик автоматически скопирует их туда. Устройство /dev/sdc — ваша флешка. После того, как установка будет завершена, можно перейти к настройке пунктов меню. Забегая наперед, если эта команда не работает, используйте опцию —boot-directory вместе с —root-directory, разные версии Grub работают по разному:

Теперь нужно создать конфигурационный файл. Если вы используете grub-mkconfig, то получите такое же меню, как в вашей основной системе. Меня это вполне устраивает, только укажите правильное расположение файла, в папке /mnt:

Теперь нам осталось протестировать как все работает. Для этого лучше использовать qemu:

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

Создание дополнительного меню загрузки

Суть в том, что вместо уже знакомого «grub.cfg» можно загрузить свой файл настройки загрузочного меню со своей конфигурацией. Это позволяет создать дополнительное меню с другими пунктами, настройками, оформлением и т.д. Итак, создадим наш новый файл конфигурации. Создавать с нуля не будем, а скопируем «grub.cfg», дав новое имя:

sudo cp /boot/grub/{grub,custom}.cfg

Поскольку файл скопируется с правами 444, выставим ему права на запись:

sudo chmod 744 /boot/grub/custom.cfg

Теперь открываем его в любимом текстовом редакторе и изменяем:

sudo gedit /boot/grub/custom.cfg

Если вы в достаточной мере знаете структуру «grub.cfg» и понимаете, какие строки что делают, можно значительно сократить свой файл, убрав лишнее и привести его к более удобочитаемому виду.

  • задаем пункт меню по умолчанию, указав или его номер или точное название.
  • здесь задается разрешение экрана в привычном формате WxH. Можно также указать глубину цвета, например «1024x768x32». можно указать несколько вариантов, при этом если первый не сможет быть установлен, будет загружен второй, если и он не сработает — третий и т.д. Например:

    set gfxmode=1024x768x32,1024x768x24,1024x768
  • Теперь зададим время отображения меню, для этого ищем строку , и устанавливаем значение -1 для отключения таймера.

Для задания фонового изображения найдем строку с (подразумевается, что в вашем «grub.cfg» используется фоновое изображение. Если нет — смотрите пример файла в конце раздела). После команды прописан путь к файлу картинки, поменяйте его на нужный файл.

Обратите внимание, что разрешение картинки должно соответствовать заданному выше разрешению экрана!

Строкой ниже мы можем задать цвета текста. Изменяются они так же, как и в »/etc/grub.d/05_debian_theme« (см. Настройка внешнего вида загрузчика GRUB). Можно проделать один интересный трюк: уберите строки с и теперь настройка будет такой:

  • задает цвет/фон текста сверху и снизу (версия grub и комментарии) и текста в консоли
  • отвечает за цвет пунктов меню и фон прямоугольника, в котором они находятся
  • задает цвет/фон выделенного пункта меню.

Закончив с настройкой, перейдем к пунктам меню, они идут ниже. Измените их, удалите ненужные и добавьте новые, пересортируйте на свой вкус.

Настроив свой файл, сохраните его Ctrl+Shift и закройте.

Теперь необходимо добавить дополнительное меню. Для этого в файле »/etc/grub.d/40_custom« добавим запись такого вида:

menuentry "Название меню"{
configfile /boot/grub/custom.cfg
}

Если ваш путь к файлу отличается — исправьте его.

Если вы используете отдельный boot-раздел, путь будет таким: »/grub/custom.cfg«.
Также учтите, что «40_custom» должен заканчиваться пустой строкой!

Если вы хотите, чтобы ваше новое меню загружалось вместо стандартного «grub.cfg», установите новый пункт в качестве пункта по умолчанию, но перед этим проверьте новое меню на работоспособность.

Обновите свой «grub.cfg» выполнив команду:

sudo update-grub

Теперь пункт перехода в дополнительное меню появится в главном, для того чтобы выйти обратно в главное меню, достаточно нажать Esc

В качестве образца пример файла «custom.cfg» (файл урезан до необходимого минимума):

have_grubenv=true
load_env
 
### выбранный пункт по умолчанию
set default=0
### таймаут меню
set timeout=2
### разрешение
set gfxmode=800x600x32,800x600x24,800x600
 
insmod ext2
search -u 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 -s
insmod gfxterm
insmod vbe
if terminal_output gfxterm ; then true ; else terminal gfxterm; fi
insmod png
 
### фоновое изображение
background_image /usr/share/images/grub/yellow.png
### настройка цветов
set color_normal=black/black
set menu_color_normal=green/light-blue
set menu_color_highlight=red/blue
 
menuentry "9.10 @ 2.6.32" {
search -u 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 -s
linux /boot/vmlinuz-2.6.32-020632-generic root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro quiet splash
initrd /boot/initrd.img-2.6.32-020632-generic
}
menuentry "9.10 @ 2.6.32 (recovery)" {
search -u 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 -s
linux /boot/vmlinuz-2.6.32-020632-generic root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro single 
initrd /boot/initrd.img-2.6.32-020632-generic
}
menuentry "windooz"{
search -u AC9C75E59C75AA8A -s
chainloader +1
}

Combining the use of UUIDs and basic scripting

If you like the idea of using UUIDs to avoid unreliable BIOS mappings or are struggling with GRUB’s syntax, here is an example boot menu item that uses UUIDs and a small script to direct GRUB to the proper disk partitions for your system. All you need to do is replace the UUIDs in the sample with the correct UUIDs for your system. The example applies to a system with a boot and root partition. You will obviously need to modify the GRUB configuration if you have additional partitions:

menuentry "Arch Linux 64" {
    # Set the UUIDs for your boot and root partition respectively
    set the_boot_uuid=ece0448f-bb08-486d-9864-ac3271bd8d07
    set the_root_uuid=c55da16f-e2af-4603-9e0b-03f5f565ec4a

    # (Note: This may be the same as your boot partition)

    # Get the boot/root devices and set them in the root and grub_boot variables
    search --fs-uuid $the_root_uuid --set=root
    search --fs-uuid $the_boot_uuid --set=grub_boot

    # Check to see if boot and root are equal.
    # If they are, then append /boot to $grub_boot (Since $grub_boot is actually the root partition)
    if  ; then
        set grub_boot=($grub_boot)/boot
    else
        set grub_boot=($grub_boot)
    fi

    # $grub_boot now points to the correct location, so the following will properly find the kernel and initrd
    linux $grub_boot/vmlinuz-linux root=/dev/disk/by-uuid/$the_root_uuid ro
    initrd $grub_boot/initramfs-linux.img
}

внешние ссылки

Практические инструкции и устранение неполадок

Вики-сайты по распространению предлагают множество решений для типичных проблем и пользовательских настроек, которые могут вам помочь:

  • Fedora / GRUB_2
  • Gentoo / GRUB2

Технические детали

  • Единый расширяемый интерфейс прошивки (прошивка UEFI, распространена с 2012 года)
  • Таблица разделов GUID (GPT) — обрабатывает жесткие диски размером более 2 ТиБ и более 4 разделов
  • Основная загрузочная запись, используемая с прошивкой BIOS (материнские платы примерно до 2012 года)
  • SysLinux (IsoLinux) — часто используемый загрузчик на CD, DVD
  • NTLDR (BOOTMGR) — загрузчик Windows
  • Сравнение загрузчиков

Восстановление в Boot Repair

Наверное самый простой способ восстановить загрузчик Grub — это использовать утилиту Boot Repair. Для её запуска вам понадобится LiveCD с Ubuntu или другим дистрибутивом. Сначала загрузитесь в Live среду, как описано в первом методе, затем добавьте PPA к системе:

После этого установите утилиту:

Для запуска выполните:

sudo boot-repair

Далее для восстановления загрузчика достаточно нажать кнопку Рекомендуемый способ восстановления:

Затем просто дождитесь завершения процесса восстановления:

После этого компьютер можно перезагружать и всё будет работать.

Что такое GRUB?

Загрузчик или менеджер загрузки

Я не хочу запутать вас на этом этапе, но эта тема нуждается в разъяснении перед тем, как мы продолжим. Разница между менеджером загрузки и загрузчиком весьма размыта.

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

Ядро Linux версии 3.3 включает в себя встроенный загрузчик EFI. Фактически, любая операционная система, способная работать с EFI включает в себя загрузчик EFI. В системах с поддержкой EFI системная прошивка считывает системный раздел EFI (ESP) для обнаружения файлов EFI на загрузочном разделе.

GRUB — это одновременно загрузчик и менеджер загрузки. Через секунду я вернусь к GRUB. Сначала давайте взглянем на другие GRUB — подобные программы.

Примечание: GRUB — это аббревиатура для GRand Unified Bootloader (большой объединённый загрузчик).

2. Какие существуют загрузчики, похожие на GRUB?

GRUB — наиболее популярный загрузчик для Linux. Но не единственный. Есть ещё менеджер загрузки rEFInd, который нравится некоторым пользователям Linux.

Персонализированный экран менеджера загрузки rEFInd

Существует также текстовый менеджер загрузки systemd-boot . Вы можете догадаться, что он предназначен только для дистрибутивов, основанных на systemd. Некоторые дистрибутивы, как Pop OS, используют systemd-boot.

systemd-boot в Pop OS

Про другие загрузчики читайте в статье Лучшие загрузчики для Linux.

3. Доступ к опциям и настройкам GRUB

Обычный экран GRUB, который вы видите — это интерфейс меню. Он позволяет вам выбрать, какую операционную систему загрузить, если на вашей машине более одной ОС. Вы также можете выбрать другое ядро для вашего дистрибутива Linux, если у вас установленно более одного.

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

Вы также можете войти в командную строку GRUB используя кнопку C в меню GRUB.

4. Файл настроек GRUB

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

Стандартный файл настроек GRUB находится в /etc/default/grub. Также есть папка /etc/default/grub.d. Вы можете редактировать файл /etc/default/grub напрямую, однако рекомендуется сохранять дополнительные изменения в вышеуказанной папке.

Стандартный файл настроек GRUB

Вы должны обновить GRUB для того, чтобы ваши изменения стали действовать. Фактически, когда бы вы ни установили дополнительный дистрибутив Linux на ваш компьютер, он попытаться переписать существующие настройки GRUB своими. Подробнее о настройках Grub читайте здесь.

5. GRUB customizer для лёгкой настройки GRUB

Если редактирование файла текстовым редактором в терминале — не то, что вам нравится, то вы можете использовать графическую утилиту, называющуюся GRUB Customizer. Она позволяет вам менять порядок загрузки, задержку загрузки и т.п. Вы также можете изменить фон GRUB на обои по своему усмотрению.

GRUB Customizer может быть установлен в Ubuntu 20.04 из репозитория Universe и через PPA в Ubuntu 18.04. Он также доступен через AUR в дистрибутивах, основанных на Arch Linux. Подробнее про использование Grub Customizer рассказано в этой статье.

Определение разделов

Теперь нужно определить раздел диска, на котором был установлен GRUB.

Выведем список разделов, для этого выполняем команду (в конце команды стоит строчная буква L):

Вывод fdisk для BIOS

Пример вывода команды:

В моем случае мы видим 2 диска: /dev/sda (SSD диск) и /dev/sdb (флешка, с которой сейчас загружена Live-система).

Нас интересует диск /dev/sda. На диске /dev/sda создано несколько разделов. В моем случае /dev/sda4, на котором установлен Windows, а также 4 раздела с пометкой Linux (см. последний столбец таблицы). У вас скорее всего может быть один раздел Linux (корневой раздел) или два раздела (корневой и home). На одном из этих разделов установлен GRUB.

То есть из таблицы вы должны определить какой раздел является корневым, на нем скорее всего у вас установлен GRUB. В моем случае GRUB установлен в раздел /dev/sda2. Далее по тексту я буду его использовать (вы должны будете указывать свой раздел).

Иногда бывает, что для загрузчика GRUB выделен отдельный раздел (он называется boot-раздел). Если это так, то на следующем шаге вам нужно будет примонтировать корневой раздел и раздел с загрузчиком.

Вывод fdisk для UEFI

Для новых компьютеров с UEFI вывод команды fdisk -l может быть примерно следующим:

Нам нужно определить, на каком разделе установлен Linux (корневой раздел), а также определить EFI-раздел. В моем случае это разделы: /dev/nvme0n1p5 и /dev/nvme0n1p1, которые расположены на диске /dev/nvme0n1.

Настройка Grub через конфигурационные файлы

Сразу нужно сказать, что существует два способа настройки Grub Ubuntu, через конфигурационные файлы. Первый — через конфигурационный файл утилиты grub-mkconfig, который позволяет задать общие параметры для загрузчика и ручное редактирование /boot/grub/grub.cfg.

Первый — рекомендованный, и с помощью него можно настроить большинство параметров, в этом случае настройки не собьются, когда вы обновите ядро или загрузчик. Второй вариант еще более гибкий, но после любого обновления вы потеряете свои настройки. Так что то что можно настроить через /etc/default/grub настраиваем через него, все остальное — через /boot/grub/grub.cfg. Сначала рассмотрим первый вариант.

Настройка Grub через /etc/default/grub

Как я уже сказал, настройка загрузчика через файл /etc/default/grub, на основе которого будет автоматически создан /boot/grub/grub.cfg более желательна. Давайте рассмотрим параметры, которые вы можете здесь настроить.

  • GRUB_DEFAULT — указывает какой пункт нужно загружать по умолчанию. Может быть указан номер, или полное название или же строка saved, которая значит, что нужно загрузить пункт, указанный с помощью grub-reboot;
  • GRUB_SAVEDEFAULT — загружать последнюю использованную запись по умолчанию;
  • GRUB_HIDDEN_TIMEOUT — сколько секунд ждать перед тем, как вывести меню;
  • GRUB_HIDDEN_TIMEOUT_QUIET — если установлено true, то меню не будет показано;
  • GRUB_TIMEOUT — сколько секунд будет показано меню;
  • GRUB_CMDLINE_LINUX — добавить опции ядра для всех ядер, как обычных, так и режима восстановления;
  • GRUB_CMDLINE_LINUX_DEFAULT — добавить опции ядра только для обычных ядер;
  • GRUB_CMDLINE_LINUX_RECOVERY — опции ядра, только для режима восстановления;
  • GRUB_BADRAM — указать адреса оперативной памяти, которые не нужно использовать;
  • GRUB_TERMINAL — модуль терминала для Grub. Можно использовать console, только для текстового режима или gfxterm с поддержкой графики;
  • GRUB_GFXMODE — разрешение экрана в Grub, лучшие использовать auto, чтобы система выбрала сама то что ей нужно.
  • GRUB_DISABLE_RECOVERY — не включать в меню пункты восстановления;
  • GRUB_DISABLE_OS_PROBER — не искать другие операционные системы;
  • GRUB_BACKGROUND — адрес картинки для фона, должна находиться в той же папке что и файлы grub;
  • GRUB_THEME — устанавливает тему Grub.

Например, можно использовать такую конфигурацию:

Но как вы могли понять, этим способом вы не можете настроить порядок пунктов загрузки, а также некоторые другие параметры, поэтому давайте рассмотрим настройку непосредственно конфигурационного файла Grub.

Как однократно выполнить загрузку произвольного пункта меню?[править]

Иногда бывает удобно загрузиться с произвольным пунктом меню, но не менять текущий вариант. Это удобно, например, для тестирования нового ядра, когда надо иметь возможность вернуть старое ядро простой перезагрузкой. Для этого надо настроить Grub в соответствии со способом 1 предыдущего пункта, после чего можно задать пункт меню для следующей загрузки командой grub-reboot и запустить команду reboot. В момент начала загрузки конфигурация Grub автоматически вернётся в исходное состояние, и следующая загрузка компьютера произойдёт по-старому. Это аналогично использованию опции -R загрузчика Lilo.

Как отучить GRUB2 запоминать последний выбранный пункт?[править]

Способ 1править

В файле /etc/sysconfig/grub2 изменить значение GRUB_SAVEDEFAULT на false, перегенерировать конфиг grub:

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

посмотреть имеющийся список вариантов загрузки утилитой grub-entries:

grub-entries

например

0       ALT p8 starter kit
1>0     Advanced options for ALT p8 starter kit>ALT p8 starter kit, vmlinuz
1>1     Advanced options for ALT p8 starter kit>ALT p8 starter kit, vmlinuz (recovery mode)
1>2     Advanced options for ALT p8 starter kit>ALT p8 starter kit, 4.14.97-un-def-alt0.M80P.1
1>3     Advanced options for ALT p8 starter kit>ALT p8 starter kit, 4.9.154-std-def-alt0.M80P.1
2       Memtest86+-5.01

задать нужный вариант загрузки:

grub-set-default "Advanced options for ALT p8 starter kit>ALT p8 starter kit, 4.14.97-un-def-alt0.M80P.1"

или

grub-set-default "1>2"

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

Способ 2править

В файле /etc/sysconfig/grub2 изменить строку

 GRUB_DEFAULT='saved'

на

 GRUB_DEFAULT=n

где n номер пункта меню, либо на

 GRUB_DEFAULT='точное название пункта меню'

Вариант с названием предпочтительнее, поскольку после обновления ядра количество пунктов в меню увеличится и нумерация некоторых пунктов изменится

Внимание! Нумерация пунктов начинается с 0.
Список пунктов можно получить по команде

grep menuentry /boot/grub/grub.cfg | nl -v0

Например, пусть мы имеем следующие пункты меню (этот пример не учитывает текущее состояние с подменю; оставлено в качестве примера, удобнее использовать grub-entries, как в первом варианте):

# grep menuentry /boot/grub/grub.cfg | nl -v0
0	menuentry "ALT Linux 6.0.1 KDesktop" --class gnu-linux --class gnu --class os {
1	menuentry "ALT Linux 6.0.1 KDesktop (failsafe mode)" --class gnu-linux --class gnu --class os {
2	menuentry "ALT Linux 6.0.1 KDesktop, 3.0.8-std-def-alt0.M60P.1" --class gnu-linux --class gnu --class os {
3	menuentry "Windows Vista (loader) (on /dev/sda1)" --class windows --class os {
4	menuentry "Memtest86+-4.20" {
# 

и хотим, чтобы по умолчанию грузился Windows. Тогда в /etc/sysconfig/grub2 пишем

 GRUB_DEFAULT='Windows Vista (loader) (on /dev/sda1)'

Потом в терминале от пользователя root:

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

Перезагрузка. Так как в GRUB_DEFAULT задано конкретное значение, а не ‘saved’, переменная GRUB_SAVEDEFAULT значения не имеет.

Grub Customizer

Grub Customizer — это программа, позволяющая настраивать различные параметры загрузчика Grub. В том числе и положение и очередность пунктов загрузки. Установить программу можно из официальных репозиториев. Например, в Ubuntu нужно использовать ppa:

Для запуска программы откройте терминал (Ctrl + Alt + T) и наберите grub-customizer:

Для работы программы необходимы права root, в некоторых системах возможно придется использовать такую команду:

Также программу можно запустить из главного меню. Главное окно выглядит вот так:

Несколько секунд после запуска программа будет сканировать установленные операционные системы, затем в этом же окне мы сможем перенести загрузку Windows на первое место. Для этого кликните на нужном пункте правой кнопкой чтобы открылось контекстное меню:

В меню выберите пункт Переместить вверх. Это действие нужно будет повторить несколько раз, пока Windows не будет первой в списке. Теперь будет выполняться загрузка windows по умолчанию grub.

Если потом вы захотите опустить Windows обратно вниз, есть обратное действие — Переместить вниз.

Для сохранения настроек просто нажмите кнопку Сохранить. Готово. Можете перезагружать компьютер и смотреть что получилось.

Но я хочу затронуть еще пару настроек, которые могут быть полезны. Вместо того чтобы делать загрузку Windows первой в Grub, можно изменить пункт запускаемый по умолчанию. Перейдите на вкладку Основные настройки:

Здесь для выбора пункта по умолчанию используемого по умолчанию есть список Задействовать:

Кроме того, можно загружать по умолчанию последнюю загруженную ОС, для этого есть галочка:

Не забудьте снова нажать кнопку сохранить.

Navigation menu

Восстановление MBR с использованием LiveCD Ubuntu

Вам понадобиться всего лишь LiveCD с Ubuntu (обычный диск Ubuntu Desktop, в принципе, любой версии до 9.04 включительно). Загрузите компьютер с него, в появившемся при загрузке меню выберите пункт Загрузить Ubuntu без установки на компьютер, дождитесь окончания загрузки.

Теперь откройте терминал, он находится в меню Приложения→Стандартные→Терминал в русской версии или в меню Applications→Accessories→Terminal в английской версии.

В открывшемся терминале наберите:

sudo grub

Вы увидите нечто похожее на:

       [ Minimal BASH-like line editing is supported.   For
         the   first   word,  TAB  lists  possible  command
         completions.  Anywhere else TAB lists the possible
         completions of a device/filename. ]
grub>

Это значит, что вы попали в программу управления grub. Теперь нам надо выяснить, где на вашем компьютере храниться основная часть загрузчика GRUB, для этого наберите:

find /boot/grub/stage1

Если вы по каким-то причинам при установке Ubuntu сделали /boot отдельным разделом, то команда будет выглядеть так:

find /grub/stage1

Кроме того, если у вас стоит несколько ОС Linux с загрузчиками GRUB Legacy, то возможно вы получите несколько результатов — выбирайте нужный вам.

В результате выполнения этой команды вы увидите нечто типа:

grub> find /boot/grub/stage1
find /boot/grub/stage1
 (hd0,0)

Нас интересует строчка «(hd0,0)». Это раздел, на котором программа нашла установленный GRUB Legacy. Первая цифра (после hd) — номер винчестера, вторая — номер раздела на нём. Теперь для восстановления GRUB Legacy выполняем следующие команды, подставив вместо «(hdX,Y)» и «(hdX)» полученные ранее вами значения (в моём случае это были «(hd0,0)» и «(hd0)»):

root (hdX,Y)
setup (hdX)
quit

Будьте внимательны, рядом с «setup» надо писать в скобках только часть, относящуюся к винчестеру, т.е. «(hdX)». Если вы напишите так же, как и в «root» — «(hdX,Y)», то во-первых не добьётесь нужного результата, а во-вторых вполне можете повредить ФС на разделе «(hdX,Y)».

Всё, теперь можно перезагрузиться, при загрузке вы снова сможете попасть в свою Ubuntu. Правда, если вы устанавливали Windows, то он не появится волшебным образом в меню загрузки, см. ниже пункт про добавление в меню опций загрузки Windows и других ОС.

Alternative installation methods

Install to external USB stick

BIOS

Assume your USB stick’s first partition is FAT32 and its partition is /dev/sdy1

# mkdir -p /mnt/usb
# mount /dev/sdy1 /mnt/usb
# grub-install --target=i386-pc --debug --boot-directory=/mnt/usb/boot /dev/sdy
# grub-mkconfig -o /mnt/usb/boot/grub/grub.cfg

Optionally backup configuration files of :

# mkdir -p /mnt/usb/etc/default
# cp /etc/default/grub /mnt/usb/etc/default
# cp -a /etc/grub.d /mnt/usb/etc
# sync; umount /mnt/usb

EFI

To have grub write its EFI image to , which the boot firmware will be able to find without any UEFI boot entry, use when you run .

Install to partition or partitionless disk

Warning: GRUB strongly discourages installation to a partition boot sector or a partitionless disk as GRUB Legacy or Syslinux does. This setup is prone to breakage, especially during updates, and is not supported by the Arch developers.

To set up grub to a partition boot sector, to a partitionless disk (also called superfloppy) or to a floppy disk, run (using for example as the partition):

# chattr -i /boot/grub/i386-pc/core.img
# grub-install --target=i386-pc --debug --force /dev/sdaX
# chattr +i /boot/grub/i386-pc/core.img

Note:

  • used for example only.
  • instructs to install for BIOS systems only. It is recommended to always use this option to remove ambiguity in grub-install.

You need to use the option to allow usage of blocklists and should not use (which is similar to simply generating ).

will give out warnings like which should give you the idea of what might go wrong with this approach:

/sbin/grub-setup: warn: Attempting to install GRUB to a partitionless disk or to a partition. This is a BAD idea.
/sbin/grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.
                        However, blocklists are UNRELIABLE and their use is discouraged.

Without you may get the below error and will not setup its boot code in the partition boot sector:

/sbin/grub-setup: error: will not proceed with blocklists

With you should get:

Installation finished. No error reported.

The workaround for this is to set the immutable flag on (using command as mentioned above) so that the sector locations of the file in the disk is not altered. The immutable flag on needs to be set only if GRUB is installed to a partition boot sector or a partitionless disk, not in case of installation to MBR or simple generation of without embedding any bootsector (mentioned above).

# mount /dev/sdxY /mnt        #Your root partition.
# mount /dev/sdxZ /mnt/boot   #Your boot partition (if you have one).
# arch-chroot /mnt

Now, install , then:

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

Generate core.img alone

To populate the directory and generate a file without embedding any GRUB bootsector code in the MBR, post-MBR region, or the partition bootsector, add to :

# grub-install --target=i386-pc --grub-setup=/bin/true --debug /dev/sda

Note:

  • used for example only.
  • instructs to install for BIOS systems only. It is recommended to always use this option to remove ambiguity in grub-install.

You can then chainload GRUB’s from GRUB Legacy or syslinux as a Linux kernel or as a multiboot kernel (see also ).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector