Системный загрузчик GRUB: восстановление, настройка, удаление

1. Введение

GRUB или Grand Unified Bootloader (Унифицированный системный загрузчик) является наиболее распространенным системным загрузчиком в среде Linux. Он занимает свое место по праву, ведь благодаря ему становится возможной загрузка практически всех актуальных операционных систем. Это все существующие дистрибутивы Linux, версии ОС Windows, версии DOS, версии BSD, версии Mac OS X, а также некоторые другие менее популярные операционные системы.

По сути, это небольшое технологическое чудо. Например, в течение некоторого времени на моем ноутбуке было установлено около 10 разных операционных систем, которые были доступны из меню системного загрузчика GRUB и отлично работали, не конфликтуя друг с другом.

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

2. Восстановление системного загрузчика

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

2.1. Когда приходится восстанавливать системный загрузчик

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

GRUB состоит из двух программных компонентов. Первым программным компонентом является сам системный загрузчик, который размещается в основной загрузчоной записи (Master Boot Record или MBR). Эта запись расположена в рамках первого сектора жесткого диска. Вторым программным компонентом является реализация меню загрузки и используемые ею дополнительные файлы. Они располагаются за пределами основной загрузочной записи, а именно, в директории boot корневого раздела Linux.

В вашем компьютере установлено несколько жестких дисков? В таком случае вам придется помнить и о том, что системный загрузчик должен располагаться в основной загрузочной записи жесткого диска, выбранного для загрузки в меню Boot Sequence BIOS. При восстановлении GRUB вам придется указывать путь к директории с файлами системного загрузчика.

2.2. Процесс восстановления системного загрузчика в системах с BIOS

Данное описание процесса восстановления системного загрузчика подойдет для систем с классической прошивкой BIOS (это системы с предустановленными ОС Windows XP или Windows Vista). Оно также подойдет для систем с прошивками UEFI, работающих в режиме совместимости с BIOS (это системы с предустановленной ОС Windows 7). При этом оно не подойдет для систем с прошивками UEFI, не поддерживающих режимы совместимости с BIOS (это системы с предустановленными ОС Windows 8.x и Windows 10). Если в вашей системе используется новейшая прошивка UEFI, не совместимая с BIOS, вам придется обратиться к следующему разделу.

Предположим, что нам нужно восстановить системный загрузчик, затертый системным загрузчиком ОС Windows.

A. В первую очередь следует загрузить дистрибутив Linux с загрузочного оптического диска или флеш-накопителя с интерфейсом USB. Нужно выбирать вариант загрузки системы без установки.

Примечание: вам придется использовать загрузочный носитель той версии системы, которая установлена на вашем жестком диске. Например, в том случае, если на вашем жестком диске установлена система Ubuntu 16.04, вы должны использовать загрузочный диск Ubuntu 16.04.

B. Теперь следует выяснить имя файла устройства раздела с корневой директорией установленной системы. Для этого можно воспользоваться приложением Диски, доступным в Linux Mint, Ubuntu и Fedora Workstation.

Примечание: для раздела с корневой директорией системы с большой вероятностью будет использоваться файловая система EXT4. Для раздела EFI будет использоваться файловая система FAT32, причем этот раздел будет иметь флаг загрузочного раздела.

В моем случае файл устройства раздела с корневой директорией имеет имя sda5. Я буду использовать имя этого файла устройства в данном руководстве, вам же придется изменить его на имя вашего файла устройства.

C. Теперь нужно открыть окно терминала.

D. Далее нужно скопировать и вставить в окно терминала следующую команду (напоминаю, что вы должны заменить sda5 на имя файла устройства раздела с корневой директорией установленной системы):

sudo mount /dev/sda5 /mnt

После окончания ввода команды следует нажать клавишу Enter для ее исполнения. В результате раздел с корневой директорией установленной системы будет смонтирован в директорию /mnt системы, загруженной с установочного диска.

E. Теперь нужно выполнить следующую последовательность команд с помощью терминала (в последней команде должно использоваться имя файла устройства корневого раздела установленной системы без его номера):

sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
sudo grub2-mkconfig -o /boot/grub/grub.cfg
sudo grub2-install /dev/sda

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

Примечание: в ходе исполнения двух последних команд может быть выведено предупреждение:

grub probe: error: failed to get canonical path of /cow
Installation finished. No error reported.

Оно никоим образом не повлияет на установку системного загрузчика.

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

exit
sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt/dev/pts
sudo umount /mnt/dev
sudo umount /mnt

После окончания ввода каждой из команд также следует нажимать клавишу Enter для ее исполнения.

G. Далее следует воспользоваться функцией перезагрузки системы и не забыть извлечь загрузочный накопитель. В последующем процессе загрузки вы должны увидеть меню загрузчика GRUB с пунктами для загрузки Linux и Windows. Если пункт для загрузки Windows не появился, следует загрузить Linux, открыть окно терминала и выполнить с помощью него следующую команду:

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

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

После перезагрузки пункт для загрузки Windows появится в меню загрузчика GRUB. При необходимости вы можете открыть меню системного загрузчика, зажав и удерживая клавишу Shift сразу же после исчезновения экрана загрузки BIOS.

2.3. Процесс восстановления системного загрузчика в системах с UEFI

Данное описание процесса восстановления системного загрузчика подойдет для систем с прошивкой UEFI (это системы с предустановленными ОС Windows 8.x или Windows 10). Например, после успешной установки одного из дистрибутивов Linux на такую систему в меню UEFI может не оказаться пункта для его загрузки. Кроме того, вы можете случайно привести раздел UEFI к оригинальному состоянию или обновить его содержимое, в результате чего загрузка Linux также станет невозможной. К счастью, данная проблема может быть решена без переустановки системы. Однако, вам придется неукоснительно следовать приведенным ниже инструкциям.

Примечание: данные инструкции подходят лишь для современных систем с прошивками UEFI, не работающих в режиме совместимости с BIOS. Обычно такие системы продаются с предустановленными ОС Windows 8.x или Windows 10. При этом они не подойдут для систем с классическими прошивками BIOS (это системы с предустановленными ОС Windows XP, Windows Vista и Windows 7). Если в вашей системе используется классическая прошивка BIOS, вам придется обратиться к предыдущему разделу.

На системы с прошивками UEFI традиционно устанавливаются 64-битные операционные системы, поэтому мы будем рассматривать случай «исчезновения» пункта для загрузки 64-битной Linux-системы из меню UEFI. Для решения аналогичной проблемы вам придется действовать следующим образом:

A. В первую очередь следует загрузить дистрибутив Linux с загрузочного оптического диска или флеш-накопителя с интерфейсом USB. Нужно выбирать вариант загрузки системы без установки.

Примечание: вам придется использовать загрузочный носитель той версии системы, которая установлена на вашем жестком диске. Например, в том случае, если на вашем жестком диске установлена система Ubuntu 16.04, вы должны использовать загрузочный диск Ubuntu 16.04.

B. Далее следует установить соединение с сетью Интернет. Оно необходимо для переустановки пакетов программного обеспечения.

C. Теперь нужно узнать имена файлов устройств двух разделов жесткого диска, а именно, раздела с корневой директорией системы (с системными файлами дистрибутива) и раздела EFI (содержащего загрузчики Linux и Windows). Для этого можно воспользоваться приложением Диски, доступным в Linux Mint, Ubuntu и Fedora Workstation.

Примечание: для раздела с корневой директорией системы с большой вероятностью будет использоваться файловая система EXT4. Для раздела EFI будет использоваться файловая система FAT32, причем этот раздел будет иметь флаг загрузочного раздела.

В моем случае файл устройства раздела с корневой директорией имеет имя sda5, а раздела EFI — имя sda2. Я буду использовать имена этих файлов устройств в данном руководстве, вам же придется изменить их на имена ваших файлов устройств.

D. Теперь нужно открыть окно терминала.

E. Далее нужно скопировать и вставить в окно терминала следующую команду (напоминаю, что вы должны заменить sda5 на имя файла устройства раздела с корневой директорией установленной системы):

sudo mount /dev/sda5 /mnt

После окончания ввода команды следует нажать клавишу Enter для ее исполнения. В результате раздел с корневой директорией установленной системы будет смонтирован в директорию /mnt системы, загруженной с установочного диска.

Пришло время сделать то же самое с разделом EFI. Вам придется скопировать и вставить в окно терминала следующую команду (напоминаю, что вы должны заменить sda2 на имя файла устройства раздела EFI установленной системы):

sudo mount /dev/sda2 /mnt/boot/efi

После окончания ввода команды также следует нажать клавишу Enter для ее исполнения. В результате раздел EFI установленной системы будет смонтирован в директорию /mnt/boot/efi системы, загруженной с установочного диска.

F. Теперь нужно выполнить следующую последовательность команд с помощью терминала:

sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo modprobe efivars
sudo chroot /mnt

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

G. Пришло время переустановить пакеты программного обеспечения, в результате чего пункт для загрузки дистрибутива Linux должен снова появиться в меню UEFI. Вам придется выполнить команду, актуальную для вашего дистрибутива.

Linux Mint/Ubuntu:

sudo apt-get install --reinstall grub-efi-amd64

Fedora Workstation:

sudo dnf reinstall grub2-efi grub2-efi-modules shim

После окончания ввода команды следует нажать клавишу Enter для ее исполнения. Процесс переустановка пакетов программного обеспечения может занять достаточно много времени, поэтому вам придется набраться терпения.

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

exit
sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt/dev/pts
sudo umount /mnt/dev
sudo umount /mnt/boot/efi
sudo umount /mnt

После окончания ввода каждой из команд также следует нажимать клавишу Enter для ее исполнения.

I. Далее следует воспользоваться функцией перезагрузки системы и не забыть извлечь загрузочный накопитель. В последующем процессе загрузки вы должны обнаружить пункт для загрузки установленной Linux-системы в меню UEFI. Если из этого меню исчез пункт для загрузки Windows, следует загрузить Linux, открыть окно терминала и выполнить с помощью него следующую команду:

Linux Mint/Ubuntu:

sudo grub2-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg

Fedora Workstation:

sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

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

Примечание: файл конфигурации GRUB в Linux Mint находится в директории ubuntu, так как дистрибутив Linux Mint основан на Ubuntu.

После перезагрузки пункт для загрузки Windows появится в меню UEFI.

3. Настройка GRUB

3.1. О сторонних приложениях

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

3.2. Перемещение Windows на первое место в меню системного загрузчика

В начале знакомства с Linux многим пользователям хочется, чтобы ОС Windows была выбрана и загружалась по умолчанию (рано или поздно это проходит!). Это не так сложно реализовать.

3.3. Использование изображения в качестве фона меню системного загрузчика

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

3.4. Изменение времени показа меню системного загрузчика

Для произвольного изменения времени показа меню системного загрузчика GRUB достаточно отредактировать файл конфигурации /etc/default/grub, изменив значение переменной GRUB_TIMEOUT, после чего обновить конфигурацию самого загрузчика. Обратите внимание на то, что установка значения 0 не даст никакого эффекта: будет использоваться стандартное значение, равное 10 секундам. Если же вы все же хотите установить минимальное время показа меню, вы можете использовать значение 0.1. Для обновления конфигурации системного загрузчика в системе с классической прошивкой BIOS следует воспользоваться следующей командой:

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

Если у вас система с современной прошивкой UEFI, вы можете использовать одну из следующих команд:

Linux Mint/Ubuntu:

sudo grub2-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg

Fedora Workstation:

sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

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

3.5. Использование дополнительных параметров конфигурации ядра ОС

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

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

A. В первую очередь следует открыть окно терминала и ввести в него следующую команду:

Linux Mint:

gksudo xed /etc/default/grub

Ubuntu/Fedora Workstation:

gksudo gedit /etc/default/grub

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

B. В открывшемся файле конфигурации GRUB следует найти следующую строку:

GRUB_CMDLINE_LINUX=""

В кавычках должны перечисляться параметры, которые будут передаваться ядру ОС. Для разделения параметров должен использоваться символ пробела. Например, в случае необходимости передачи ядру ОС параметра nomodeset следует привести эту строку к следующему виду:

GRUB_CMDLINE_LINUX="nomodeset"

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

C. Для обновления конфигурации системного загрузчика придется выполнить еще одну команду. В случае использования системы с классической прошивкой BIOS следует воспользоваться командой:

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

Если у вас система с современной прошивкой UEFI, вы можете использовать одну из следующих команд:

Linux Mint/Ubuntu:

sudo grub2-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg

Fedora Workstation:

sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

После окончания ввода команды следует нажать клавишу Enter для ее исполнения.

D. Наконец, следует перезагрузить компьютер.

3.5.1. Параметр nomodeset

В современных версиях ядра Linux реализован механизм установки параметров графических карт практически всех производителей. То есть, запись данных в регистры графических карт осуществляется на уровне ядра ОС, а не на уровне модуля графического сервера X.org после его запуска. Данный механизм позволяет использовать заставки с высоким разрешением при загрузке системы и избавиться от искажений при переходе от экрана загрузки к экрану входа в систему.

К сожалению при использовании некоторых видеокарт данный механизм работает ненадежно и может приводить к черному экрану после загрузки системы. Параметр nomodeset сообщает ядру ОС о том, что не нужно использовать механизм установки параметров графических карт до момента запуска графического сервера X.org. Однако, стоит учесть, что некоторые графические карты могут работать некорректно при передаче данного параметра, поэтому не стоит злоупотреблять им.

3.5.2. Параметры noacpi, noapic и nolapic

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

Стандарт ACPI (Advanced Configuration and Power Interface) описывает механизмы управления питанием. Старые системы могут не поддерживать его в полной мере, поэтому в некоторых случаях стоит сообщать ядру ОС об этом. Вы можете сделать это, передав параметр acpi=off или noacpi.

Стандарт APIC (Advanced Programmable Interrupt Controller) реализуется в более новых системах. Локальной версией данного стандарта является стандарт LAPIC. Данный стандарт описывает механизм генерации и обработки прерываний, то есть, сигналов, используемых аппаратным обеспечением компьютера. И снова, некоторые реализации APIC могут быть неполными в старых системах, поэтому стоит деактивировать их поддержку. Вы можете сделать это, передав параметры noapic и nolapic.

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

3.5.3. Параметры quet splash

Параметр splash позволяет отображать заставку при загрузке системы. Вместе с ним обычно используется параметр quet, скрывающий выводимые в процессе загрузки системы сообщения. Вы можете без каких-либо последствий убрать эти параметры в том случае, если хотите осуществить диагностику процесса загрузки системы.

4. Удаление GRUB из основной загрузочной записи (возврат к Windows)

Удаление GRUB является печальным событием, ведь это такой отличный инструмент! Однако, если вы хотите знать все о системном загрузчике GRUB, вы также должны знать о том, как удалить его. Если говорить максимально кратко, то можно сказать, что под удалением GRUB чаще всего подразумевается замена системного загрузчика GRUB из состава дистрибутива Linux на системный загрузчик NTLoader из состава ОС Windows в основной загрузочной записи. Это может быть сделано различными способами.

4.1. Удаление GRUB с помощью Ultimate Boot CD

Вы можете заменить системный загрузчик GRUB на системный загрузчик NTLoader с помощью загрузочного диска Ultimate Boot CD (UBCD). Образ этого загрузочного диска доступен на данном веб-сайте.

После окончания загрузки файла образа диска вам придется записать этот файл на оптический диск (используйте функцию записи образа диска). Далее нужно загрузить компьютер с этого диска (для этого нужно выбрать привод для чтения оптических дисков в качестве загрузочного устройства в BIOS).

Ultimate Boot CD содержит несколько инструментов, предназначенных для восстановления системного загрузчика NTLoader в основной загрузочной записи диска. Рассмотрим методику использования одного из них.

Сначала вам нужно будет с помощью меню выбрать жесткий диск, после чего выбрать действие Boot Management и, наконец, выбрать инструмент Super Grub Disk. После этого вам нужно будет снова нажать клавишу Enter для запуска Super Grub Disk. Далее нужно просто выбрать пункт:

Win => MBR &  !WIN!   :(((((((((((((((((((((((((((((((((

и нажать клавишу Enter.

Примечание: использование огромного количества круглых скобок является не моей идеей, а идеей автора Super Grub Disk...

И это все, что нужно было сделать! Теперь вы можете перезагрузить свой компьютер. После перезагрузки будет загружена ОС Windows.

4.2. Удаление GRUB с помощью FreeDOS

Для удаления системного загрузчика может также использоваться флеш-накопитель с интерфейсом USB. Вам понадобятся три приложения: Unetbootin, FreeDOS и Testdisk для DOS.

A. Для начала нужно загрузить приложение Unetbootin и создать с помощью него загрузочный флеш-накопитель. При запросе названия операционной системы следует выбрать FreeDOS.

B. Теперь нужно загрузить версию утилиты Testdisk для DOS/Win9x (версия для Windows не подойдет!).

C. Далее нужно извлечь файлы testdisk.exe и CWSDPMI.exe из архива утилиты Testdisk на загрузочный флеш-накопитель (прямо в корневую директорию, не создавая каких-либо поддиректорий).

D. Теперь нужно загрузить компьютер с созданного флеш-накопителя. При появлении начального окна достаточно нажать на клавишу Enter.

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

FreeDOS Safe Mode (don't load any drivers)

Для продолжения процесса загрузки следует нажать клавишу Enter.

F. После окончания процесса загрузки операционной системы нужно перейти в корневую директорию флеш-накопителя с помощью следующей команды:

C:

После окончания ввода команды следует нажать клавишу Enter для ее исполнения.

G. Теперь нужно запустить утилиту Testdisk с помощью следующей команды:

testdisk

После окончания ввода команды следует также нажать клавишу Enter для ее исполнения.

H. Утилита должна начать работу. Для начала следует выбрать режим без журналирования [No Log] и нажать клавишу Enter.

I. Далее следует выбрать нужный жесткий диск: обычно это второй диск в списке (первым диском является сам флеш-накопитель). После выбора диска нужно нажать на клавишу Enter.

J. Далее нужно выбрать вариант [Intel] и нажать клавишу Enter.

K. Наконец, нужно выбрать вариант [MBR Code] и нажать клавишу Enter. При запросе подтверждения следует ввести y (yes) и снова нажать клавишу Enter.

И это все, что нужно было сделать! Теперь вы можете перезагрузить свой компьютер. После перезагрузки будет загружена ОС Windows.

5. Хотите ознакомиться с дополнительными советами?

Хотите узнать о других настройках и приемах работы с Linux-системами? На данном веб-сайте размещено большое количество подобных материалов.