Андрей Смирнов
Время чтения: ~24 мин.
Просмотров: 20

Настройка запуска меню загрузчика GRUB при установке Linux с Windows на один компьютер с таблицей разделов GPT

Привет, Хабр! Сегодня мы рассмотрим ситуацию, когда при двойной установке Linux & Windows загрузчик GRUB не стартует, давая возможность выбрать ОС, а автоматически загружается Windows. Немного теории: Значит с теорией мы немного разобрались (думаю этого будет достаточно), теперь же рассмотрим, какие бывают подводные камни, при установке Dual Boot Windows и Linux на одном компьютере. 1d7e1735dabf9ff6dea1fbde62790e83.png Эксперимент производился на рабочей станции со следующими характеристиками:Base Board Information

  • Manufacturer: Acer
  • Product Name: Aspire XC600

Memory Device

  • Size: 4096 MB
  • Type: DDR3
  • Speed: 1333 MHz
  • Manufacturer: Kingston
  • Rank: 2

HDD

  • product: ST500DM002-1BD14
  • vendor: Seagate
  • physical id: 0.0.0
  • bus info: scsi@0:0.0.0
  • logical name: /dev/sda
  • size: 465GiB (500GB)
  • capabilities: gpt-1.00 partitioned partitioned:gpt

Доказано, что проблем с установкой Debian 8.6 Jessie совместно с Windows 10 не обнаружено. Debian корректно прописывается в автозагрузке, GRUB запускается без ошибок и две ОС также работают нормально. Но, как показала практика, не со всеми дистрибутивами такое происходит. При установке Ubuntu 16.04.1 вместо Debian на ту же рабочую станцию вылез первый подводный камень — GRUB не стартовал, и Windows 10 автоматом шла на загрузку. Решение проблемы было найдено спустя недели три-четыре (тогда уже надоело считать, сколько времени убито на решение проблемы). Оно оказалось неожиданным, но в тоже время вся система заработала. Значит, если вы столкнулись с такой же проблемой, приведенная ниже инструкция может вам пригодится и сэкономить кучу времени.Важно! До начала выполнения инструкции нужно подготовить LiveCD с дистрибутивом Linux Mint — все операции мы будем выполнять на нем (я выбрал этот дистрибутив из-за того, что на него спокойно можно установить Midnight Commander, что сложно сделать на LiveCD с Ubuntu, так мы получаем больше пространства для маневров). Также стоит заметить, что команда из под консоли update-grub вам не поможет, так как она рассчитана на случай, когда GRUB запускается, но не видит другие ОС кроме Линукса. Также рекомендую создавать резервные копии файлов/каталогов, над которыми вы осуществляете хоть малейшие изменения.

  1. Через терминал, с правами root смонтировать раздел с EFI в папку /mnt. В моем случае, это была команда mount /dev/sda2 /mnt.
  2. Введите команду sudo -s и подтвердите пароль (он пустой по умолчанию) для последующих операций (многие советуют не делать этого, а вводить sudo и команду для выполнения — я поддерживаю это мнение, но инструкция рассчитана на опытных пользователей системы Linux, которые понимаю, что делают все на свой страх и риск).
  3. Запустить Midnight Commander командой mc.
  4. Находим файл /boot/grub/grub.cfg в файловой системе установленного Линукса. Открываем его для редактирования. Внутри него находим слово «Microsoft» в контексте строки, начинающейся с «chainloader» и заменяем это слово (должно быть только одно вхождение и именно в строке с «chainloader», так что не ошибетесь) на название каталога, в который мы переименовали Microsoft (т.е. на Microsoft2 в нашем примере). Сохраняем изменения в файле.

Также, в этом файле вы можете поменять названия в списке, который выводит GRUB. Например, вместо openSUSE Leap 42.2 27.01 в части кода:

menuentry 'openSUSE Leap 42.2 27.01'  --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-996b3ed5-150f-4de3-a40c-6d385e27d6de' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set root='hd0,gpt6' if [ x$feature_platform_search_hint = xy ]; then   search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6  996b3ed5-150f-4de3-a40c-6d385e27d6de else   search --no-floppy --fs-uuid --set=root 996b3ed5-150f-4de3-a40c-6d385e27d6de fi echo'Загружается Linux 4.4.36-8-default …' linuxefi /boot/vmlinuz-4.4.36-8-default root=UUID=996b3ed5-150f-4de3-a40c-6d385e27d6de ro  resume=/dev/sda7 splash=silent quiet showopts echo'Загружается начальный виртуальный диск …' initrdefi /boot/initrd-4.4.36-8-default }

Написать openSUSE The best choice!:):

menuentry 'openSUSE The best choice!:)'  --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-996b3ed5-150f-4de3-a40c-6d385e27d6de' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set root='hd0,gpt6' if [ x$feature_platform_search_hint = xy ]; then   search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6  996b3ed5-150f-4de3-a40c-6d385e27d6de else   search --no-floppy --fs-uuid --set=root 996b3ed5-150f-4de3-a40c-6d385e27d6de fi echo'Загружается Linux 4.4.36-8-default …' linuxefi /boot/vmlinuz-4.4.36-8-default root=UUID=996b3ed5-150f-4de3-a40c-6d385e27d6de ro  resume=/dev/sda7 splash=silent quiet showopts echo'Загружается начальный виртуальный диск …' initrdefi /boot/initrd-4.4.36-8-default }

Хоть мелочь, а приятно! Остальное в коде советую не трогать. Если трудно разобраться с управлением Midnight Commander (в этом нет ничего страшного, у меня тоже в первый раз были проблемы с этой программой), все операции можно выполнить в файловом менеджере Nautilus (или в другом, не суть важно), но изначально запустив его под правами пользователя root. После этого идем на перезагрузку и радуемся результату. Но, как оказывается, такая проблема есть и у дистрибутива OpenSUSE Leap 42.2. Как показала практика, если на компьютере установлен дистрибутив OpenSUSE с Windows 10, то приведенная выше инструкция не поможет. Точнее, она поможет, но только ее нужно дополнить. После выполнения основной части выполняем следующие шаги:

  1. После выполнения всех операций заходим в папку /EFI/opensuse/x86_64-efi/ (название итоговой папки x86_64-efi может быть другим в зависимости от архитектуры ПК)
  2. Копируем файл grub.efi (если у вас включена опция Secure Boot, там будет еще файл shim.efi, тогда советую скопировать их вместе)
  3. Заходим в папку /EFI/Boot и удаляем все файлы, которые там есть (при обновлении загрузчика они снова появятся, но в этом нет ничего страшного)

P.S. Если же у вас все хорошо, GRUB с OpenSUSE запускается, но не видит Windows, радуйтесь — проблема решается всего одной командной: grub2-mkconfig -o /boot/grub2/grub.cfg, а если у вас стоит Ubuntu, нужно выполнить просто update-grub. Для тех же, кого заинтересовала данная тема, рекомендую прочитать статью: «Начальный загрузчик GRUB 2 — полное руководство».

300xNxgrub2-cli-large.png.pagespeed.ic._OYTszmnoO.png

Любите экспериментировать? Наверняка вы когда-либо пытались произвести какие-то действия со своей Linux-системой, причем не так важно какие были цели: изучение и познание новых возможностей или же какая-то более конкретная цель, в виде исправления той или иной ошибки. В любом случае, при работе с дистрибутивами Linux, для загрузки которых, в большинстве случаев, и используется Grub, с последним могут возникать неприятные проблемы, ввиду которых дальнейшая эксплуатация системы просто-напросто невозможна. В этой статье вы узнаете, что делать, если не загружается Linux. Как вести себя в подобной ситуации и какие действия производить, чтобы починить загрузчик Grub. Пожалуй, начнем.

Что такое Grub

xGRUB_screenshot.png.pagespeed.ic.ocS1SdqB_7.png

Grub (или GRand Unified Bootloader) — загрузчик операционных систем с открытым исходным кодом. Распространяется он под лицензией GNU GPL, в полностью свободном виде. С помощью этого замечательного лоадера можно сделать много всего — основная же функция не ограничивается загрузкой лишь одной операционной системы. Вы можете иметь куда больше операционных систем на своем ПК, загружая любую из них с помощью Grub. На скриншоте выше вы можете видеть как примерно Grub выглядит. Кстати говоря, если вы захотите установить Ubuntu 18.04 рядом с Windows, вам определенно понадобится помощь Grub.

Grub используется в большинстве дистрибутивов Linux в качестве загрузчика по-умолчанию. Разумеется и с ним иногда возникают проблемы. Этим самые проблемы чреваты полным отказом операционной системы. Поэтому для починки Grub нам понадобятся дополнительные инструменты. Какие именно — узнаете далее.

От чего могут возникнуть проблемы

Одна из самых распространенных причин — это неправильный порядок установки двух операционных систем (Linux и Windows). Допустим, если вы захотите установить две этих операционных системы на свой ПК — вам непременно стоит знать правильную последовательность:

  • Сначала устанавливаем Windows
  • И только потом уже Linux

Если, например, сделать наоборот, то как раз-таки Grub будет поврежден; система будет грузиться напрямую в Windows, а дистрибутив Linux останется недоступным.

Grub может сломаться и по другим причинам. Например, из-за попыток ручного изменения параметров запуска (при недостатке опыта), в таком случае нужно будет либо вручную убирать лишнее, либо полностью переустанавливать Grub.

Восстановление Grub с помощью LiveCD/USB

Для этого способа нам понадобится флешка с дистрибутивом Linux на борту. Подойдет любой: от Ubuntu, Arch или даже Linux Mint. Здесь нужен только терминал, поэтому подойдет даже версия без графической оболочки.

Как создать LiveCD/USB

Само собой, нам понадобится носитель, на который мы временно (а может и нет) запишем систему. Сохраните все важные файлы, которые были на этом носителе, после чего (имеется ввиду на другом ПК, желательно под управлением Windows) запишите загруженный образ дистрибутива на носитель. В качестве примера мы будем использовать дистрибутив Ubuntu.

Идем на официальную страницу загрузки. Загружаем любую понравившуюся версию (лучше взять новейшую для десктопа), после чего записываем ее на USB/CD.

С помощью Rufus:

Последняя версия приложения доступна на официальном сайте. Сразу после загрузки и запуска/установки мы увидим такое окно:

xrufus_ru.png.pagespeed.ic.qXn8vBihPg.png

Вставляем носитель, выбираем его в соответствующем меню. Далее выбираем нужную схему раздела и тип системного интерфейса, и после уже открываем файловый менеджер с помощью этой кнопки:

xrufus_ru1.png.pagespeed.ic.u5nuChU27l.png

Находим загруженный образ через менеджер, после чего жмем «Старт».

С помощью Etcher:

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

Ну а теперь, собственно, можно переходить к восстановлению Grub. Вставляем флешку в наш ПК (где сломан загрузчик), после чего перезагружаем его с этой самой флешки. Как только мы войдем в лайв-систему, сразу открываем терминал, после чего проделываем следующие действия:

Открываем таблицу разделов с помощью команды:

sudo fdisk -l

Примерно такая таблица будет выведена на экран:

/dev/sda1 27 7683 66999082+ 83 Linux /dev/sda2 * 8450 13995 45430855 7 HPFS/NTFS /dev/sda3 11885 16574 6503497 5 Extended

По этой таблице мы видим, что Linux, в нашем случае, расположен на разделе /dev/sda1.

С помощью следующей команды мы смонтируем этот раздел в /mnt:

sudo mount /dev/sda1 /mnt

Теперь, для записи grub в MBR, нужно ввести следующую команду:

sudo grub-install --root-directory=/mnt /dev/sda

Если нужно только восстановить MBR диска (после переустановки Windows, к примеру), то этих действий будет вполне достаточно.

Если же необходимо обновить и меню grub (после установки Windows), то нужно выполнить еще и эту команду:

sudo update-grub --output=/mnt/boot/grub/grub.cfg

Вот и все, восстановление закончено!

Восстановление с помощью chroot

Помимо вышеописанного способа, при восстановлении Grub с помощью LiveCD можно использовать и этот. Тут мы будем использовать утилиту chroot.

Здесь нам, опять же, понадобится таблица разделов. Вводим уже известную команду:

sudo fdisk -l

В выводе снова будет эта таблица. Теперь нам надо присмотреться к ней еще внимательнее.

/dev/sda1 27 7683 66999082+ 83 Linux /dev/sda2 * 8450 13995 45430855 7 HPFS/NTFS /dev/sda3 11885 16574 6503497 5 Extended

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

sudo mount /dev/sda1 /mnt sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys  /mnt/sys

Обратите внимание, что если если разделы /boot или /var находятся отдельно, то Вам нужно будет примонтировать их в /mnt/boot и /mnt/var.

Далее мы переходим в окружающую среду chroot с помощью команды:

sudo chroot /mnt

И теперь, наконец-таки переустанавливаем Grub с помощью следующей команды:

grub-install /dev/sda

Если вы на этом этапе получаете какие-то сообщения об ошибках, то попробуйте использовать эти команды:

grub-install --recheck /dev/sda

или:

grub-install --recheck --no-floppy /dev/sda

Если все прошло успешно, выходим из chroot, используя команду:

exit

Далее нужно отмонтировать все разделы. Для этого вводим в терминал:

sudo umount /mnt/dev sudo umount /mnt/proc sudo umount /mnt/sys sudo umount /mnt

В случае, если вы монтировали раздел /boot введите команду:

sudo umount /mnt/boot

Теперь перезагружаем систему с помощью:

sudo reboot

Можно также обновить меню Grub, используя команду:

sudo update-grub

Восстановление Grub в rescue mode

Если по каким-то причинам у вас нет доступа к LiveCD/USB-носителю, а также к компьютеру, с помощью которого этот самый носитель можно было бы сделать, то этот способ для вас.

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

Одна из этих частей (первая) записана в MBR диска. В ней присутствует базовый функционал и ничего больше (консоль в rescue mode).

Стало быть, нам нужно определить, в каком разделе находится вторая часть Grub (находится в каталоге /boot/grub), и после чего подгрузить все недостающие модули. А вот уже после этого мы сможем запустить загрузчик с нужного раздела. В rescue mode есть всего четыре команды:

 ls set unset insmod

Для начала вводим следующую команду:

 ls

В выводе будет что-то подобное:

(hd0) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1) (hd1) (hd1,msdos2) (hd1,msdos1)

В некоторых случаях Grub неправильно опеределяет файловые системы находящиеся на разделах дисков. В данном примере загрузчик показывает их как msdos. Мы должны попытаться угадать диски, которые видим. В примере доступно два диска. Диск с индексом 0 содержащий три раздела, и диск с индексом 1 содержащий два раздела. Если вы знаете структуру своих дисков, определить нужный труда не составит.

В загрузчике Grub разделы нумеруются в обратном исчислении. Не очень ясно какой именно из разделов назван, к примеру (hd0,msdos3). Чтобы было более понятно, можно использовать вид (hd0,1). Если в грабе отсчет дисков идет с 0, а разделов с 1, то можно определить, что операционная система установлена в первый раздел первого раздела — (hd0,1). Используем следующую команду:

set prefix=(hd0,1)/boot/grub  set root=(hd0,1)

С помощью этих команд мы приказываем системе использовать какой-то конкретный диск, для выполнения всех остальных операций (в нашем случае, это диск (hd0,1)). Чтобы проверить есть ли на данном диске загрузчик, введем эту команду:

ls /boot/grub

Если в выводе будет список файлов и папок, значит мы все сделали правильно. Теперь можно загрузить все необходимые модули. Для этого выполним команды:

insmod ext2 insmod normal normal 

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

Чтобы закрепить результат (и не проделывать все то же самое после перезапуска ПК), нужно зайти в терминал своего дистрибутива Linux, где с root правами выполнить следующую команду:

grub-install /dev/sdX

sdX — диск, на который должен быть установлен Grub.

Если операционная система расположена на разделе с файловой системой btrfs, то нам необходимо выполнить следующие команды:

set prefix=(hd0,1)/@/boot/grub set root=(hd0,1)

И подгрузить модули:

insmod btrfs insmod normal

Ну и теперь запустить GRUB:

normal

Восстановление Grub с помощью утилиты Boot repair

x1335260967.png.pagespeed.ic.ThVjxv5p-L.png

С помощью этой замечательной утилиты вы сможете восстановить загрузчик всего в пару кликов. Как видно из скриншота, утилита имеет собственный GUI, ее использование не вызовет трудностей.

Чтобы установить boot repair, вы можете воспользоваться одним из приведенных способов:

  • Запись и установка специального образа диска Boot Repair (и дальнейшая загрузка с него)
  • Установка Boot repair из PPA-репозитория в LiveCD/USB дистрибутиве.

Если с первым способом все понятно: нужно просто скачать и записать образ с помощью соответствующих инструментов. То во втором уже нужно знать конкретные команды, которые выглядят следующим образом:

sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt-get update && sudo apt-get install -y boot-repair

В утилите будет доступно два варианта на выбор:

Recommended repair исправляет большую часть известных ошибок, которые могли бы возникнуть при запуске. С его помощью вы сможете пофиксить и загрузчик Grub.

Create a BootInfo summary создает Boot-Info-Script – скрипт, который позволяет диагностировать большинство проблем при загрузке.

Здесь же есть и Advanced options. Он включает в себя варианты для восстановления и настройки загрузчика Grub2 (загрузка по-умолчанию, опции загрузки ядра, отображение или скрытие GRUB при загрузке, удаление GRUB). С помощью этих же инструментов, вы можете восстановить MBR и т.д.

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

Выводы

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

Возможно вас заинтересуют и другие похожие материалы про починку загрузчика Grub2. Например, в этом материале вы узнаете, как починить GRUB2 если Ubuntu не хочет загружаться. Там более подробно рассказывается, как фиксить груб с помощью утилиты Boot Repair, возможно вам стоит заглянуть туда, если вы не поняли что-то из этого материала. Что же, ну а на сегодня это все. Надеюсь, что данный материал помог вам разобраться в ошибках. Что, в свою очередь, поможет вам их решить.

VDS и выделенные серверы с последней версией Ubuntu от Timeweb: https://timeweb.com/

Эта статья является вольным переводом GNU GRUB Manual, структурированной выжимкой по интересующей нас теме. Мы не будем рассматривать вопрос установки и запуска GRUB’ом той или иной операционной системы. Мы посмотрим, какие возможности предоставляет GRUB2 версии 1.99 для собственной настройки. Ведь, как известно, «в Линукс можно настроить абсолютно все! И вы будете настраивать абсолютно все!» Чем же GRUB2 лучше, чем GRUB Legacy? Да, собственно, для большинства пользователей практически ничем. Потенциально, он более гибок, в нем раньше появляются некоторые новые возможности (как, например, поддержка ext4). У GRUB2 более продвинутая поддержка таблицы разделов GPT и загрузка с (U)EFI. Нужно это, если жёсткий диск имеет объём более 2ТБ. Но если вы обычный пользователь и у вас уже установлен GRUB Legacy, то нет практического смысла менять его на GRUB2, по крайней мере, я его не вижу. Если же вы ставите систему с нуля, то все же стоит отдать предпочтение GRUB2 как более перспективной (и уже стабильно работающей) разработке.grub0.png Так нас обычно встречает компьютер унылой менюшкой GRUB2. Мало того, что картинка не балует жизнерадостностью, так она еще и не совсем соответствует действительности — в моем случае, установленный BackTrack был опознан как Ubuntu. Посмотрим, как все это можно исправить.Что нужно знать Собственно конфигурационный файл находится в /boot/grub/grub.cfg, но его редактирование особого смысла не имеет. Дело в том, что этот файл создается автоматически утилитой update-grub на основе файла настроек /etc/default/grub и скриптов, находящихся в /etc/grub.d/. Таким образом, если вы не хотите, чтобы ваши изменения терялись, например, при обновлении ядра, правильным способом настройки будет редактирование файла настроек, а при отсутствии требуемого параметра в файле настроек, редактирования конфигурационных скриптов. Чтобы изменения вступили в силу необходимо запустить update-grub. При настройке нам может понадобится выйти в командную строку GRUB. Для этого в меню выбора ОС необходимо нажать ‘c’, для возврата — ‘esc’. Командная строка поддерживает автодополнение по Tab. Чтобы в процессе работы в командной строке получить доступ к файлу, находящемуся не в корневой файловой системе (получить доступ к файлу, находящемуся в корневой файловой системе можно как обычно /path/to/file), необходимо знать наименование устройств и разделов. Например:

(hd0,1)

означает первый жесткий диск (устройства нумеруются с 0) и на нем первый раздел (разделы нумеруются с единицы), что соответствует /dev/sda1. Если при наборе команды, например:

set root=(

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

set root=(hd0,

то вам будет предложен список разделов на первом жестком диске. Ну и для набранной команды

set root=(hd0,1)/

будет предложен список файлов на данном разделе. Так же при настройке GRUB может оказаться полезной команда grub-mkconfig, которая позволяет посмотреть предварительный вариант файла grub.cfg без изменения реального конфигурационного файла. Собственно, update-grub выполняет grub-mkconfig с параметром вывода в файл /boot/grub/grub.cfg. GRUB использует unicode, т.е. создание пункта меню на русском языке проблем вызвать не должно.Простейший пример настроек Рассмотрим простейший пример файла настроек. Если вам захочется чего-то большего, чем описано в этом разделе, обратите внимание на раздел «Параметры /etc/default/grub». Большинству пользователей, к коим я отношу и себя, понадобится всего несколько параметров для настройки функциональности GRUB2. Мой файл настроек выглядит так (за вычетом неинтересных комментариев): Наиболее востребованы бывают первые два параметра, отвечающие за пункт меню по умолчанию и время ожидания выбора. Если у вас установлена всего одна ОС, то можете вместо GRUB_TIMEOUT=3 раскомментировать следующие три строчки — в этом случае выбор меню GRUB2 отображаться не будет, если вы не нажмете Esc. На это у вас будет одна секунда (или столько, сколько вы зададите параметром GRUB_HIDEN_TIMEOUT). После изменения этих настроек не забываем выполнить update-grub. Если вы хотите изменить имя вашей операционной системы в меню выбора GRUB2, можете воспользоваться для этого параметром GRUB_DISTRIBUTOR. Для управления списком параметров, передаваемых ядру Linux, GRUB2 предоставляет команды GRUB_CMDLINE_LINUX и GRUB_CMDLINE_LINUX_DEFAULT. Мы не будем вдаваться в подробности и описывать разные параметры, поскольку это относится уже к теме загрузки Linux. Последние три параметра отвечают за настройку внешнего вида GRUB2. Если вы любите красоту во всем, даже в меню загрузчика, то можете ознакомится с предоставляемыми для этого возможностями в следующей части.Настройка внешнего вида В этой части мы посмотрим, как можно улучшить вид GRUB2. Для начала поменяем разрешение экрана. Чтобы узнать текущее разрешение, в командной строке GRUB2 вводим команду

set

и смотрим на параметр gfxmode. Список поддерживаемых разрешений можно получить командой vbeinfo. Теперь загружаемся в дебиан, находим в конфигурационном файле /etc/default/grub параметр GRUB_GFXMODE, (раскомментируем его, если он закомментирован и добавляем, если его нет) и назначаем его: GRUB_GFXMODE=1280×768 или GRUB_GFXMODE=1280x768x32 (цветность можно не указывать). Не забываем выполнить update-grub, перезагружаемся, получаем:grub1.png Для того, чтобы разрешение экрана до запуска иксов оставалось таким же, как в GRUB, можно установить параметр:GRUB_GFXPAYLOAD_LINUX=true Теперь попробуем поставить красивую картинку в качестве фона. Для начала можно посмотреть как она будет выглядеть. В консоли GRUB сначала подгружаем нужные модули командой

insmode jpeg

(или png, tga) и можем устанавливать фон:

background_image /path/to/picture.jpeg

Тут помним, что смонтирован только корневой раздел. До остальных можно добраться указав идентификатор раздела, например, (hd0,1)/path/to/picture.jpeg. Установить картинку в качестве фона можно несколькими способами, опишем два из них. Самый простой — скопировать картинку в /boot/grub/ и как всегда не забыть запустить update-grub. Второй способ (и он является для GRUB’а более приоритетным) — установить параметр: GRUB_BACKGROUND=»/path/to/picture.jpeg». Можно не беспокоиться, что картинка находится где-то, куда GRUB не сможет добраться во время загрузки — если он это поймет, то скопирует ее себе в буфер. Итак, получаем:grub2.png На фоне такой картинки серый цвет надписей смотрится как-то уныло. К сожалению, поменять цвет шрифта в файле настроек нельзя, поэтому нам придется лезть в настроечные скрипты, к счастью, в данном случае это совсем просто. Файл /etc/grub.d/40_custom предназначен для пользовательской настройки. Добавляем в конец: Получаем:grub3.png Установить можно четыре параметра: color_highlight, color_normal, menu_color_highlight, menu_color_normal. Все они должны быть вида color-foreground/color-background, устанавливается, соответственно, цвет текста и цвет фона. Допустимы цвета:

  • blue
  • green
  • cyan
  • red
  • magenta
  • brown
  • light-gray
  • dark-gray
  • light-blue
  • light-green
  • light-cyan
  • light-red
  • light-magenta
  • yellow
  • white
  • black

Если в качестве фона установлен black, то фон будет прозрачным. Как и в случае с фоновым изображением, цвета текста можно предварительно опробовать используя командную строку GRUB. Достаточно ввести команду

set one_of_4_color_parametrs first-color/second-color

Так же, GRUB поддерживает более сложный механизм настройки внешнего вида. Можно установить параметр GRUB_THEME=»path/to/theme.file». Впрочем, вопрос создания своих файлов с темами для GRUB мы пока рассматривать не будем.Редактирование скриптов Расскажем немного про редактирование скриптов формирования конфигурационного файла. Нам уже приходилось влезать в скрипты создания конфигурационного файла GRUB, теперь сделаем это подробнее. При редактировании скриптов удобно пользоваться командой grub-mkconfig, чтобы не портить существующий файл конфигурации. При создании конфигурационного файла используются все скрипты из директории «/etc/grub.d/», запускаются они в алфавитном порядке. В Debian там находятся:

  • 00_header отвечает за загрузку основных параметров и библиотек;
  • 05_debian_theme отвечает за оформление внешнего вида;
  • 10_linux отвечает за формирование записей в меню, соответствующих ОС-linux, в которой стоит GRUB;
  • 20_linux_xen — аналогично предыдущему;
  • 30_os-prober отвечает за обнаружение и включение в список остальных ОС;
  • 40_custom и 41_custom — пользовательские скрипты.

Для наглядности поставим себе задачу заменить надпись «Ubuntu» в меню загрузки на «BackTrack Linux», убрать для него recovery режим и поставить выше Windows. Поставленная нами задача относится к скриптам 30_os-prober. Объяснить GRUB, что не надо формировать запись меню для определенного раздела, достаточно просто. В цикле перебора установленных ОС:

for OS in ${OSPROBED} ; do

где-нибудь после определения параметра DEVICE надо добавить строчки: Тогда никакая информация об ОС на /dev/sda2 в конфигурационный файл не попадет. Теперь сами прописываем информацию о нашей системе до вышеозначенного цикла, заменяя параметры, которые нам не подходят. При этом опираемся на то, как формируются аналогичные записи в цикле. Результат будет выглядеть так (изменения выделены жирным шрифтом):

DEVICE=»/dev/sda2″LINUX=»`linux-boot-prober ${DEVICE} 2> /dev/null | tr ‘ ‘ ‘^’ | paste -s -d ‘:’`» prepare_boot_cache= LROOT=»`echo ${LINUX} | cut -d ‘:’ -f 1`» LBOOT=»`echo ${LINUX} | cut -d ‘:’ -f 2`» LLABEL=»`echo ${LINUX} | cut -d ‘:’ -f 3 | tr ‘^’ ‘ ‘`» LKERNEL=»`echo ${LINUX} | cut -d ‘:’ -f 4`» LINITRD=»`echo ${LINUX} | cut -d ‘:’ -f 5`» LPARAMS=»`echo ${LINUX} | cut -d ‘:’ -f 6 | tr ‘^’ ‘ ‘`» if [ -z «${LLABEL}» ] ; then   LLABEL=»${LONGNAME}» fi if [ «${LROOT}» != «${LBOOT}» ]; then   LKERNEL=»${LKERNEL#/boot}»   LINITRD=»${LINITRD#/boot}» fi cat << EOF menuentry «BackTrack Linux» —class gnu-linux —class gnu —class os { EOF save_default_entry | sed -e «s/^/t/» if [ -z «${prepare_boot_cache}» ]; then    prepare_boot_cache=»$(prepare_grub_to_access_device ${LBOOT} | sed -e «s/^/t/»)» fi printf ‘%sn’ «${prepare_boot_cache}» cat << EOF linux ${LKERNEL} ${LPARAMS} EOF if [ -n «${LINITRD}» ] ; then    cat << EOF        initrd ${LINITRD}    EOF fi cat << EOF } EOF

При помощи команды grub-mkconfig проверяем, что конфигурационный файл не содержит ошибок, запускаем update-grub, получаем:grub4.pngПараметры /etc/default/grub Рассмотрим более подробно большинство параметров, которые можно задать для настройки GRUB2.GRUB_DEFAULT отвечает за то, какой пункт загружать по умолчанию. Может быть равен номеру (GRUB_DEFAULT=0 — в нашем случае будет загружать Debian в обычном режиме), точному названию (GRUB_DEFAULT=»Microsoft Windows XP Professional (on /dev/sda1)» — будет, как это не удивительно, загружать Windows), в паре с GRUB_SAVEDEFAULT указанию, что надо загружать предыдущий выбор (GRUB_DEFAULT=keep, также это значение нужно установить для использования команд grub-set-default и grub-reboot).GRUB_SAVEDEFAULT=true в паре с GRUB_DEFAULT=keep указывает GRUB, что по умолчанию нужно ставить предыдущий выбор.GRUB_TIMEOUT — время в секундах, в течении которого GRUB ждет выбора, прежде чем загрузить значение по умолчанию. Можно установить равным 0, чтобы GRUB не показывал экран выбора ОС, или любое отрицательное значение для отключения таймера.GRUB_HIDDEN_TIMEOUT указывает сколько секунд ждать перед тем, как показать экран загрузки, если не нажата клавиша. Учитывается, только когда  не установлены другие ОС. Если GRUB_HIDDEN_TIMEOUT_QUIET=true, то во время ожидания не показывается таймер.GRUB_DISTRIBUTOR — название текущего дистрибутива, используется при формировании соответствующей записи в меню выбора ОС.GRUB_CMDLINE_LINUX, GRUB_CMDLINE_LINUX_DEFAULT — список параметров, используемых при запуске ядра Линукс. Параметры GRUB_CMDLINE_LINUX используются как для обычного режима загрузки, так и для recovery. Параметры GRUB_CMDLINE_LINUX_DEFAULT используются только обычным режимом. Аналогично используются параметры GRUB_CMDLINE_NETBSD, GRUB_CMDLINE_NETBSD_DEFAULT GRUB_CMDLINE_XEN, GRUB_CMDLINE_XEN_DEFAULT для систем NetBSD и Xen.GRUB_DISABLE_RECOVERY=true — тип загрузки recovery не будет создаваться.GRUB_DISABLE_OS_PROBER=true — убрать проверку наличия других установленных ОС.GRUB_GFXMODE=1280x768x32 — установить разрешение экрана. Третий параметр (цветность) можно опустить. Список доступных разрешений можно посмотреть командой vbeinfo в командной строке GRUB2.GRUB_GFXPAYLOAD_LINUX=keep — разрешение экрана будет сохранено при передаче загрузки ядру Linux.GRUB_BACKGROUND=»/path/to/picture.jpeg» — установить фоновую картинку.GRUB_THEME=»path/to/theme.file» — установить файл тем. Кроме того, GRUB имеет ряд специфических возможностей, которые вряд ли пригодятся обычному пользователю, но на всякий случай кратко опишем их:

  • возможность отключить использование GRUB’ом специальной системы идентификаторов для определения корневой файловой системы (GRUB_DISABLE_LINUX_UUID);
  • возможность исключать поврежденные блоки памяти (GRUB_BADRAM);
  • возможность загружать дополнительные модули (GRUB_PRELOAD_MODULES);
  • возможность управлять терминалами ввода и вывода (GRUB_TERMINAL_INPUT, GRUB_TERMINAL_OUTPUT, GRUB_TERMINAL, GRUB_SERIAL_COMMAND);
  • возможность воспроизводить звуковой сигнал при запуске (GRUB_INIT_TUNE).

Настройка безопасности Мало кому такая возможность может понадобиться, но она есть и заслуживает того, чтобы о ней рассказали. GRUB предоставляет возможность разграничения прав доступа. Можно создавать обычных пользователей, которые могут загружать разрешенные им ОС, а так же суперпользователей, которые могут загружать любую ОС, редактировать существующие записи и вызывать командную строку. Список суперпользователей задается командой

set superusers=»root»

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

password user 123

Той же командой можно создать пароль суперпользователю. Для создания зашифрованного пароля нужно воспользоваться программой grub-mkpasswd-pbkdf2, а в скриптах прописать соответственно команду:

password_pbkdf2 root grub.pbkdf2.sha512.10000.mnogobukv

Все эти команды лучше всего дописать в скрипт 40_custom. Для того, чтобы определенный пользователь мог запускать определенную ОС, он должен быть прописан в списке в соответствующем пункте меню в ключе —users:Заключение Как мы видим, GRUB2 предоставляет массу возможностей по собственной настройке. И хотя механизм скриптов может кому-то показаться достаточно сложным, он позволяет гибко реагировать на изменения в списке установленных ОС и изменения в возможностях загрузки конкретной ОС. К тому же, практически все важные параметры вынесены в отдельный конфигурационный файл, что позволяет настраивать GRUB2 практически так же легко, как и GRUB Legacy.Используемые источники:

  • https://habr.com/post/321374/
  • https://omgubuntu.ru/nie-zaghruzhaietsia-linux-chinim-zaghruzchik-grub/
  • http://mydebianblog.blogspot.com/2012/05/grub2-linux.html

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации