Восстановление загрузчика grub в ubuntu linux 16.04 /15.10 / 15.04
Содержание:
- Восстановление Grub2 с помощью LiveCD
- Как загрузчик управится с ОС Windows?
- Visual configuration
- Немного теории[править]
- Добавление дистрибутивов Windows XP
- Система Ubuntu не загружается
- Пользовательские параметры меню загрузки
- How to update grub
- Способ 2 – копируем файлы GRUB2 с уже установленного раздела
- Восстановление загрузки при повреждении MBR[править]
- Загрузка в Live-режиме
- Why would you need to update grub?
- Восстановление основного загрузчика[править]
- Загрузка из командной консоли GRUB
- Восстановление Grub в rescue mode
Восстановление Grub2 с помощью LiveCD
В этой статье мы рассмотрим, как выполняется восстановление Grub2 обоими способами. Начнем с более простого способа — с помощью LiveCD. Хотя и статья ориентирована на Linux Mint, но на самом деле подойдет абсолютно для любого дистрибутива, потому что во всех дистрибутивах загрузчик один и тот же, и команды такие же, только версии могут немного отличаться.
Начнем с того, что вам нужна LiveCD система, той же разрядности, что и ваша система Linux Mint, на которую был установлен Grub
Причем, неважно будет там графический интерфейс или нет. Обычно все необходимые инструменты поддерживаются всеми дистрибутивами
А нужны нам только утилиты fdisk, mount и chroot. Чтобы восстановить загрузчик grub2 просто следуйте описанным ниже шагам.
Шаг 1. Загрузка LiveCD
Сначала вставьте носитель с LiveCD системой в дисковод или порт USB, если это флешка. Для загрузки с носителя, возможно, вам сначала понадобится зайти в меню BIOS и выставить приоритет загрузки с внешнего устройства.
Для запуска BIOS нажмите Del, F2, F8 или Shift +F2. В открывшимся меню найдите раздел Boot, и в пункте Boot Device Priority или 1st Boot Device или Boot Option #1 выберите нужное устройство:
Дальше перейдите на вкладку Exit и выберите Exit & Save settings. Дальше начнется загрузка образа.
Шаг 2. Определение разделов
Перед тем как восстановить Grub2, нам нужно понять — на каком разделе установлена система, и на каком разделе были или должны быть файлы загрузчика. Самый простой способ это сделать — воспользоваться утилитой fdisk.
В выводе программы вы видите — разделы всех подключённых к компьютеру дисков, их размер, а также файловую систему. По этим данным вам и предстоит понять, какой раздел используется в качестве корня в вашей системе. Если вы делали разметку вручную, вам не составит труда понять где то, что нужно. Например, у меня корень — /dev/nvme0n1p5 — размером 37 гигабайт, а для загрузчика отдельный раздел не выделялся. Но обычно он тоже имеет файловую систему ext4 ил ext2, а размер до 500 мегабайт. В случае с обычным SSD или HDD диском имя раздела будет начинаться с /dev/sd*. Например: /dev/sda или /dev/sdb и так далее
Шаг 3. Монтирование файловой системы
Теперь вам предстоит смонтировать вашу корневую файловую систему в каталог /mnt:
Кроме того нужно смонтировать раздел boot. Например, если бы он у меня находился по адресу /dev/nvme0n1p1:
Шаг 4. Подготовка к входу в систему
Чтобы восстановить загрузчик Linux мы будем использовать вашу основную систему Linux, запущенную на ядре от LiveCD. Такую возможность предоставляет команда chroot. Но перед тем, как ее использовать нужно вручную подключить к вашей корневой ФС, смонтированной в /mnt все необходимые файловые системы взаимодействия с ядром — /dev, /sys, /proc:
Шаг 5. Вход в окружение системы
Для входа в окружение вашей системы используйте команду:
Первый параметр указывает папку, в которую была смонтирована корневая файловая система, а второй — оболочка, используемая для интерпретации команд пользователя.
Затем выполните эти команды для загрузки и обновления переменных профиля:
Теперь вы находитесь в Linux Mint, и можете выполнять почти все его программы, разумеется, недоступны сервисы, поскольку во время загрузки не использовалась система инициализации, а также как следствие, недоступно графическое окружение.
Шаг 6. Восстановление Grub2
Теперь восстановление Grub в Linux Mint. Просто выполните следующие команды. Первая, для переустановки загрузчика на жесткий диск:
Здесь /dev/sd* — имя вашего жесткого диска.
Теперь создадим новый конфигурационный файл:
Путь к конфигурационному файлу может немного отличаться, так что будьте внимательны.
Еще можно использовать команду:
Но она работает только в Ubuntu и основанных на ней дистрибутивах.
Как загрузчик управится с ОС Windows?
Напрямую, к сожалению, GRUB никоим образом не может загружать Windows x86 (64-битная версия также не исключение), из-за чего приходится создавать соответствующий цепной механизм запуска. Для этого в конфигурационном файле grub.cfg необходимо добавить несколько строк определённых команд:
— title Windows,
— rootnoverify (hd*,*),
— makeactive,
— chainloader +1,
— boot.
Пример и подробное описание последней как раз было приведено в таблице консольных команд. Теперь же настал тот самый практичный случай, когда она пригодится в работе. Однако до неё имеется ещё пара не менее важных для загрузки Windows строк:
rootnoverify (hd*,*) — тот же самый аналог set root. Она информирует GRUB о местоположении раздела, на котором находится следующая часть загрузочного кода, однако не монтирует его (по той ясной причине, что для GRUB это сделать невозможно)
Обратите в очередной раз внимание, что часть (hd*,*)- это номер диска и номер раздела соответственно, на котором установлена ОС Windows.
makeactive — команда предоставляет указанному корневому разделу статус загрузочного.
Теперь та самая команда chainloader +1,которое передаёт весь дальнейший контроль загрузки непосредственно загрузчику Windows.
Наконец, заключительная команда boot реализует старт загрузки, после чего вы сможете спокойно работать в выбранной операционной системе.
Случается и так, что на жёстком диске установлена не одна, а две или даже больше версий Windows. И тогда осуществить стабильный запуск без дополнительных команд скрытия/показа (hide/unhide) разделов просто нереально. Суть такова, что если в конфигурационном файле GRUB прописано скрытие какого-либо раздела накопителя, то Windows банально не сможет его прочесть. А если раздел видимый, то с него соответственно можно будет загрузиться.
При наличии нескольких операционных систем сначала определитесь, какой именно экземпляр вы желаете загрузить, затем проверьте её точное расположение — необходимо знать, на каком разделе жёсткого диска она установлена. К примеру, имеются две различные версии Windows, расположенных соответственно на первом и втором разделах одного накопителя, и пользователю нужно загрузить именно вторую. Для этого в файле menu.lst нужно внести следующие изменения:
— title Windows,
— hide (hd0,0),
— unhide (hd0,1),
— rootnoverify (hd0,1),
— makeactive,
— chainloader +1,
— boot.
В сравнении с предыдущим образцом кода были добавлены команды hide и unhide, благодаря которым пользователь сможет загрузить нужную операционную систему с заданного раздела жёсткого диска.
Visual configuration
In GRUB it is possible, by default, to change the look of the menu. Make sure to initialize, if not done already, GRUB graphical terminal, gfxterm, with proper video mode, gfxmode, in GRUB. This video mode is passed by GRUB to the linux kernel via ‘gfxpayload’ so any visual configurations need this mode in order to be in effect.
Setting the framebuffer resolution
GRUB can set the framebuffer for both GRUB itself and the kernel. The old way is deprecated. The preferred method is editing as the following sample to set width (pixels) x height (pixels) x color depth:
GRUB_GFXMODE=1024x768x32 GRUB_GFXPAYLOAD_LINUX=keep
Note:
- Only the modes supported by the graphics card via VESA BIOS Extensions can be used. To view the list of supported modes, install and run as root. Alternatively, enter the GRUB command line and run the command .
- Earlier versions of the NVIDIA proprietary driver (tested with GeForce GTX 970, driver: nvidia 370) accepts in format (e.g. , but not ). This does not appear to apply to newer cards and drivers. Pascal cards with more recent drivers (tested with GeForce GTX 1060 and nvidia 381.22) will not work with the suggested format and attempting to use it results in serious issues, including but not limited to system crashes and hard locks. The current driver and cards are best configured with in the standard format.
- Make sure to run after making changes.
If this method does not work for you, the deprecated method will still work. Just add it next to the line in for example: will give you a resolution.
915resolution hack
First you need to find a video mode which will be modified later. For that we need the GRUB command shell:
sh:grub> 915resolution -l
Intel 800/900 Series VBIOS Hack : version 0.5.3 Mode 30 : 640x480, 8 bits/pixel
Next, we overwrite the with resolution:
/etc/grub.d/00_header
915resolution 30 1440 900 # Inserted line set gfxmode=${GRUB_GFXMODE}
Lastly we need to set as described earlier, regenerate and reboot to test changes.
Background image and bitmap fonts
GRUB comes with support for background images and bitmap fonts in format. The unifont font is included in the package under the filename , or, as only ASCII characters under the name . Run to get the file paths.
Image formats supported include tga, png and jpeg, providing the correct modules are loaded. The maximum supported resolution depends on your hardware.
Make sure you have set up the proper .
Edit like this:
GRUB_BACKGROUND="/boot/grub/myimage" #GRUB_THEME="/path/to/gfxtheme" GRUB_FONT="/path/to/font.pf2"
Note: If you have installed GRUB on a separate partition, automatically becomes in .
to apply the changes. If adding the splash image was successful, the user will see in the terminal as the command is executed. If this phrase is not seen, the image information was probably not incorporated into the file.
If the image is not displayed, check:
- The path and the filename in are correct
- The image is of the proper size and format (tga, png, 8-bit jpg)
- The image was saved in the RGB mode, and is not indexed
- The console mode is not enabled in
- The command must be executed to place the background image information into the file
- The scripts will not quote the file name in so make sure it does not contain spaces
Theme
Here is an example for configuring Starfield theme which was included in GRUB package.
Edit :
GRUB_THEME="/usr/share/grub/themes/starfield/theme.txt"
to apply the changes. If configuring the theme was successful, you will see in the terminal.
Your splash image will usually not be displayed when using a theme.
Edit :
GRUB_COLOR_NORMAL="light-blue/black" GRUB_COLOR_HIGHLIGHT="light-cyan/blue"
One of the unique features of GRUB is hiding/skipping the menu and showing it by holding when needed. You can also adjust whether you want to see the timeout counter.
Edit as you wish. Here are the lines you need to add to enable this feature, the timeout has been set to five seconds and to be shown to the user:
GRUB_TIMEOUT=5 GRUB_TIMEOUT_STYLE='countdown'
is how many seconds before displaying menu.
Disable framebuffer
Users who use NVIDIA proprietary driver might wish to disable GRUB’s framebuffer as it can cause problems with the binary driver.
To disable framebuffer, edit and uncomment the following line:
GRUB_TERMINAL_OUTPUT=console
Another option if you want to keep the framebuffer in GRUB is to revert to text mode just before starting the kernel. To do that modify the variable in :
GRUB_GFXPAYLOAD_LINUX=text
Немного теории[править]
DOS Partition Tableправить
Загрузчик ОС может находиться как в Master Boot Record (MBR), так и в boot record раздела. Если загрузчик находится в BR раздела, этот раздел должен быть помечен как активный, а в MBR должен находиться стандартный загрузчик, который находит активный раздел и запускает следующий загрузчик оттуда.
Рекомендуемые средстваправить
Действия, описанные в разделе «Восстановление загрузки при повреждении MBR», можно сделать из любой ОС любыми имеющимися там средствами. Для действий, описанных в разделе «Подготовка к восстановлению основного загрузчика» и далее требуется любой LiveCD с Linux, соответствующий по архитектуре установленной на восстанавливаемой системе (но x86_64 может быть применён для i586). Во многих образах ALT Linux присутствует возможность загрузиться в режиме восстановления (rescue). Как правило, в этих образах присутствуют две полезные утилиты — fixmbr и mount-system. Кроме того, существует специализированный LiveCD ALT Linux Rescue.
Добавление дистрибутивов Windows XP
При работе можно использовать утилиту WinSetupFromUSB 1.0 beta 7. С помощью данного приложения необходимо сделать вторую флешку загрузочной. Предварительно нужно распаковать образы ОС XP. Далее требуется открыть программу. Затем следует отметить в приложении вторую флешку и распакованный образ.
После нажатия на кнопку Go программа выдаст сообщение о том, что задача выполнена. То же самое нужно проделать с другими распакованными дистрибутивами. При этом флешку форматировать не стоит. Далее необходимо перенести папку c файлами программы на первый USB-накопитель и прописать дистрибутивы в menu.lst. Впоследствии с помощью Grub4Dos Windows XP будет загружена с флешки.
Система Ubuntu не загружается
Рассмотрим, с чем в первую очередь может быть связана проблема с загрузкой системы. Вот список наиболее вероятных причин:
- Первое самое очевидное — у вас сломался жесткий диск, на который установлена система. Тут все ясно и починить вряд ли что-то получится. Надо менять диск и переустанавливать на новый диск систему. Далее не буду рассматривать этот случай.
- Возникли проблемы с загрузчиком grub, который запускается перед загрузкой основной системы. Вы в него попадаете, но дальше видите какие-то ошибки, чаще всего связанные с тем, что не найден корневой раздел системы, поэтому загрузка невозможно. С этими же проблемами вы можете оказаться в режиме recovery mode, где можно выполнить какие-то действия.
- У вас поврежден загрузчик, с которого начинается загрузка системы после старта компьютера. Это небольшая область в начальных секторах жесткого диска. Если с загрузчиком проблемы, то загрузка даже не начинается и вы сразу получаете ошибку на тему того, что с данного жесткого диска невозможно загрузиться.
Далее я отдельно рассмотрю второй и третий случаи. Начнем со стандартного режима восстановления grub.
Пользовательские параметры меню загрузки
Системный загрузчик GRUB 2 использует большое количество конфигурационных переменных. В данном разделе описаны некоторые из этих переменных, которые вы скорее всего захотите модифицировать в процессе рассмотрения содержимого файла конфигурации /etc/default/grub. Переменная GRUB_DEFAULT позволяет указать элемент меню загрузки, который будет выбран по умолчанию. в качестве ее значений могут использоваться числа, такие, как число 0, соответствующее первому элементу меню, а также строка «saved» позволяющая автоматически выбирать элемент меню, использованный в процессе прошлой загрузки компьютера. Переменная GRUB_TIMEOUT позволяет задать длительность периода ожидания перед загрузкой с использованием выбранного по умолчанию элемента меню, а переменная GRUB_CMDLINE_LINUX позволяет задать список параметров, который будет передаваться каждому из ядер Linux при использовании соответствующих элементов меню загрузки.
В том случае, если переменная GRUB_DISABLE_RECOVERY имеет значение true, элементы меню загрузки для восстановления системы не будут генерироваться. Эти элементы позволяют загружать дистрибутивы в однопользовательском режиме, в котором вы можете использовать любые доступные инструменты с интерфейсом командной строки для восстановления системы. Еще одной полезной переменной является переменная GRUB_GFXMODE, позволяющая задать разрешение экрана, которое будет установлено при показе меню загрузки. В качестве значения данной переменной может использоваться любое описание разрешения, поддерживаемого вашей графической картой.
How to update grub
Ubuntu and many other Linux distributions provide a handy command line utility called update-grub.
To update grub, all you have to do is to run this command in the terminal with sudo.
You should see an output like this:
You may see a similar command called update-grub2. No need to be alarmed or confused between update-grub and update-grub2. Both of these commands do the same action.
Around ten years ago, when grub2 was just introduced, update-grub2 command was also introduced. Today, update-grub2 is just a symbolic link to update-grub and both update grub2 configuration (because grub2 is the default).
Can’t find update-grub command? Here’s what to do in that case
It’s possible that your Linux distribution might not have update-grub command available.
What do you do in that case? How do you update grub on such a Linux distribution?
There is no need to panic. The update-grub command is simply a stub for running ‘grub-mkconfig -o /boot/grub/grub.cfg’ to generate grub2 config file.
Which means that you can update grub with the following command on any Linux distribution:
Of course, remembering update-grub command is a lot easier than the above command and this is the reason why it was created in the first place.
Способ 2 – копируем файлы GRUB2 с уже установленного раздела
Что же это за способ? Этот способ подразумевает под собой, что GRUB2 установлен корректно, но не на тот раздел, на который следовало бы (как пример, Ubuntu установлена второй системой рядом с Windows, причем Windows находится на одном диске (sda), а Ubuntu на другом (sdb)). Посему мы будем копировать файлы из /boot/grub на выбранный нами диск и MBR.
1. Загружаемся с LiveCD и выбираем пункт “Запустить Ubuntu без установки на компьютер”
2. Монтируем раздел с установленной Ubuntu. Для этого, в меню “Places”, кликаем на необходимый нам раздел (в данном случае выбранный нами раздел, автоматически примонтируется в /media).
3. Раздел примонтирован. Теперь переустановим GRUB2. Делается это так:
sudo grub-setup -d /media/XXXX/boot/grub /dev/sdX
*примечание: XXXX – ваш UUID или метка тома, sdX – где X – диск в системе на который мы будем перезаписывать GRUB2(sda, sdb, sdc и т.д.).
Переписывать UUID крайне не удобно, поэтому можно упростить себе жизнь следующим образом. В меню “Places” выбираем наш диск, после чего слева нажимаем иконку с изображением карандаша, выделяем и копируем (CTRL-SHIFT) в адресной строке адрес, и вставляем (CTRL-SHIFT-V) в Терминал.
Пример:
sudo grub-setup -d /media/7848138a-41a0-4eba-8aed-d1b625ac8759/boot/grub /dev/sda
Если при выполнении данной команды вам выдаст ошибку “error: Cannot open /boot/grub/device.map”, в таком случае следует добавить ключ -m и указать путь к файлу device.map
sudo grub-setup -d /media/XXXXX/boot/grub -m /media/XXXXX/boot/grub/device.map /dev/sdX
Пример:
sudo grub-setup -d /media/7848138a-41a0-4eba-8aed-d1b625ac8759/boot/grub -m /media/7848138a-41a0-4eba-8aed-d1b625ac8759/boot/grub/device.map /dev/sda
Если вам опять выкинуло ошибку “error: Cannot open /boot/grub/device.map”, не отчаивайтесь, просто теперь вам надо перезагрузить компьютер.
4. Если вы не перезагружали компьютер, тогда это следует сделать сейчас.
5. После перезагрузки не забываем обновить GRUB2 командой sudo update-grub
Восстановление загрузки при повреждении MBR[править]
Если основной загрузчик располагался в BR и не был повреждён, а проблема только с MBR и/или сбиты настройки активного раздела, исправить это можно с помощью fixmbr или lilo. Если же повреждён основной загрузчик, можно переходить сразу к пункту «Восстановление основного загрузчика».
с помощью fixmbrправить
Можно попробовать воспользоваться утилитой fixmbr из rescue-режима:
без параметров. В большинстве случаев этого достаточно — программа найдёт первый раздел, содержащий загрузчик, сделает его активным и восстановит MBR.
с помощью liloправить
Можно также воспользоваться lilo. Это не только загрузчик, но и утилита для манипулирования MBR и активными разделами. Допустим, мы знаем, что у нас загрузчик (не обязательно LILO) находится на разделе 2.
Восстанавливаем стандартный загрузчик в MBR (можно выбрать mbr или ext, последний допускает загрузку с логических разделов):
lilo -M /dev/sda mbr
Убираем все метки активных разделов (если единственная метка переехала или если меток стало больше одной):
lilo -A /dev/sda 0
Делаем активным раздел 2:
lilo -A /dev/sda 2
Загрузка в Live-режиме
Теперь нужно загрузиться с созданного диска или флешки.
Чтобы это сделать сначала нужно в BIOS выбрать приоритет загрузки с CD/DVD или с USB (если вы используете флешку).
На современных компьютерах, где используется BIOS/UEFI, для входа в BIOS нужно при включении компьютера удерживать специальную клавишу. У разных производителей клавиша может быть разной. Обычно это: F2, Del, F10, Esc, F11 или F3.
На старых компьютерах, где используется классический BIOS, чтобы войти в BIOS нужно при загрузке компьютера, в самом начале, когда появляется логотип материнской платы, нажать специальную клавишу. Для разных материнских плат клавиша может быть разной. Обычно это одна из клавиш: Del, F1, F2, F8, F10 или какая-нибудь другая, или даже сочетание клавиш. Подробности: Настройка BIOS для загрузки с CD/DVD-диска или с USB-носителя
Why would you need to update grub?
There could be a number of scenarios when you need to update grub.
Suppose you changed the grub config file (/etc/default/grub) to change the default boot order or reduce the default boot time. Your changes won’t take into effect unless you update the grub.
Another scenario is when you have multiple Linux distributions installed on the same system.
For example, on my Intel NUC, I have two disks. The first disk had Ubuntu 19.10 and then I installed Ubuntu 18.04 on it. The second OS (Ubuntu 18.04) also installed its own grub and now the grub screen is controlled by Ubuntu 18.04 grub.
On the second disk, I installed MX Linux but I didn’t install grub this time. I want the existing grub (controlled by Ubuntu 18.04) to handle all the OS entries.
Now, in this scenario, the grub on Ubuntu 18.04 needs to be updated so that it can see MX Linux.
As you can see in the image above, when I update the grub, it finds various Linux kernels installed on 18.04 along with Ubuntu 19.10 and MX Linux on different partition.
If I want MX Linux to control the grub, I can install grub on MX Linux with grub-install command and then the grub on MX Linux will start controlling the grub screen. You get the gist, right?
Using a GUI tool like Grub Customizer is a simpler way to make changes in grub.
In the end…
Initially, I had intended to keep it a short article as a quick tip. But then I thought of explaining a few things associated with it so that (relatively) new Linux users could learn more than just a simple command.
Did you like it? Do you have some questions or suggestions? Please feel free to leave a comment.
Восстановление основного загрузчика[править]
Основной загрузчик чаще всего бывает повреждён на компьютерах с несколькими операционными системами, если он расположен в MBR. Это связано с тем, что некоторые ОС переписывают содержимое MBR при установке, что делает невозможным загрузку других ОС. Следует понимать, что возврат старого загрузчика, в свою очередь, может сделать недоступной установку той самой «другой ОС». Иной способ повредить загрузчик — передвинуть разделы. Например, lilo грузит ядро и initrd, ориентируясь на абсолютное расположение файлов на носителе, заданное посекторно при установке загрузчика.
Процесс состоит из двух этапов. Первый — это сбор дерева файловой системы в произвольной точке монтирования и выполнение команды chroot в эту точку. В результате этой операции получается рабочая (ранее недоступная) система. Надо заметить, что восстановление загрузчика — не единственное применение chroot. Второй этап — собственно работы по переустановке (с возможным переконфигурированием) нужного загрузчика, выполняемые во временно реанимированной посредством chroot системе.
Подготовка chrootправить
Загрузитесь с установочного диска ALT Linux в режиме «Rescue». После загрузки мы получаем терминал с командной оболочкой от имени суперпользователя root.
В автоматическом режимеправить
Воспользуйтесь утилитой mount-system, находящейся, как и fixmbr, в rescue-образе. Как и fixmbr, она запускается без параметров. В случае успешного выполнения достаточно будет выполнить chroot в указанную точку монтирования (для первой обнаруженной системы это может быть /mnt/system1). В противном случае потребуется сделать то же самое в ручном режиме.
chroot /mnt/system1
В ручном режимеправить
Ручная подготовка chroot состоит из следующих этапов:
- Уточняем информацию о том, на каком устройстве находится корневой раздел. Для этого можно воспользоваться утилитой fdisk (или своей памятью, или заранее заготовленными записями). Если будет обнаружено несколько разделов c Linux, возможно, придётся проверять их подряд. Для определённости будем считать, что корневой раздел находится на /dev/sda1
- Монтируем корневой раздел с жёсткого диска к файловой системе RescueCD:
mount /dev/sda1 /mnt
Убеждаемся, что смонтировали действительно тот раздел
ls /mnt/
Монтируем виртуальные ФС (потребуются для установки загрузчика либо иных задач по прямой работе с диском):
mount --bind /proc /mnt/proc mount --bind /dev /mnt/dev mount --bind /sys /mnt/sys
Выполняем chroot в собранную ФС:
chroot /mnt
Примечание: Дальнейшие операции будут выполняться относительно нового корня и будут требовать как минимум наличие /dev, про который было написано ранее
Если есть отдельный раздел с /boot, монтируем его в точку /boot
mount /dev/sda2 /boot
Вместо предыдущего пункта можно использовать
mount -a
это смонтирует все ФС, которые описаны в /etc/fstab, включая отдельный /boot
Восстановлениеправить
liloправить
Восстановление lilo, как правило, сводится к запуску команды lilo без параметров (иногда требуется предварительная правка файла /etc/lilo.conf):
/sbin/lilo
grubправить
После того как проведены подготовительные действия и сделан сhroot, необходимо перегенерировать конфиг grub:
grub-mkconfig -o /boot/grub/grub.cfg
после чего, если используется обычный BIOS-режим, следует заново установить GRUB в MBR:
grub-install /dev/sda # заменить /dev/sda на то устройство, куда хочется установить GRUB
если же используется EFI-режим, может потребоваться восстановить загрузчик в ESP-разделе (EFI System Partition), который монтируется в /boot/efi:
mount -a # достаточно смонтировать точку монтирования /boot/efi grub-efi-autoupdate
Загрузчик grub обладает очень широкими возможностями. Вероятно, нелишним будет почитать про него предварительно.
Загрузка из командной консоли GRUB
Иногда бывает так, что GRUB установлен, но в результате каких-либо сбоев его рабочая конфигурация была повреждена и загрузка ОС в штатном режиме невозможна. Обычно в таких случаях в меню GRUB появляются сообщения об ошибках с приглашением перейти в режим командной консоли загрузчика по нажатию клавиши «C». В этом режиме GRUB предоставляет довольно большой набор полезных команд. С помощью которых можно, в частности произвести ручную загрузку системы. Эти же команды, кстати, выполняются загрузчиком при чтении его файла конфигурации.
Рис. 2: Внешний вид командной консоли GRUB.
Итак, первое, что нужно сделать после входа в командную консоль GRUB – это выполнить команду ls. В результате будет выведен список всех доступных в системе дисков и разделов.
Определение и выбор раздела загрузки
Однако, обозначает GRUB разделы по-своему. Например вместо привычного sda4 будет (hd0,gpt2), а вместо sdb1 будет (hd1,gpt3). Таким образом, как можно видеть, устройства в формате GRUB нумеруются цифрами, так же как и разделы. Но разделы нумеруются в обратном порядке. Например на устройстве sda с пятью разделами, разделу sda2 в формате GRUB будет соответствовать запись (hd0,gpt4), sda1 – (hd0,gpt5) и т. д. Этот принцип можно и нужно брать на вооружение при работе с разделами в командной консоли GRUB. Ведь для ручной загрузки системы необходимо правильно определить и указать корневой раздел или раздел /boot .
Если известно, что /boot находится на разделе sda2, у которого пять разделов. То с большой степенью вероятности это будет (hd0,4) в формате GRUB. Префикс «gpt» для раздела можно не указывать. Ну а если же изначальную структуру разделов вспомнить или определить не представляется возможным. То остаётся только перебирать или угадывать. Команда ls выведет примерно следующее:
Эта информация и должна помочь быстрее угадать, на каком разделе находится /boot .
Ручная загрузка ядра
Подключение модулей для работы с ФС Ext2/3/4:
Для других типов ФС нужно подключать соответствующие модули: bfs, xfs или zfs. Подключение модуля normal для полноценного запуска и работы GRUB:
Если после этих команд штатная загрузка не начнётся, то остаётся её продолжить вручную. Для этого нужно попытаться найти доступные ядра и выбрать нужное для загрузки. Для этого следует ввести команду linux /boot/vmlinuz и нажать клавишу :
Рис. 3: Определение доступных ядер и выбор нужного для загрузки с помощью команды «linux».
Как можно видеть, команда linux обнаружила в системе два ядра. И автоматически подготовила следующую команду для выбора нужного. Остаётся только дописать «1-generic», если нужно загрузить ядро версии 4.18.0-21-generic. Указать корневой раздел и выполнить команду:
Важно заметить, что указывается тот же корневой раздел, что и в команде set root, только уже в классическом формате. Далее, нужно указать соответствующий образ ядра
В котором содержится всё необходимое для инициализации и создания программной среды для его работы, с помощью команды initrd:
Далее, нужно указать соответствующий образ ядра. В котором содержится всё необходимое для инициализации и создания программной среды для его работы, с помощью команды initrd:
Теперь всё готово, можно выполнить загрузку:
Если всё сделано правильно и выбран нужный раздел загрузки, то будет загружена «родная» система так, как это происходит в штатном режиме. Ведь всё, что было проделано вручную — это основной набор команд, хранящихся в файле /boot/grub/grub.cf g и выполняемых GRUB автоматически.
Далее, в загруженной системе нетрудно восстановить работу загрузчика с помощью инструкций, приведенных выше.
Восстановление Grub в rescue mode
Если по каким-то причинам у вас нет доступа к LiveCD/USB-носителю, а также к компьютеру, с помощью которого этот самый носитель можно было бы сделать, то этот способ для вас.
Само восстановление проходит таким образом: сначала мы подгружаем все модули, чтобы открыть доступ ко всей функциональной части Grub, после чего запуститься с нужного раздела. Надо понимать, что Grub состоит из двух частей:
Одна из этих частей (первая) записана в MBR диска. В ней присутствует базовый функционал и ничего больше (консоль в rescue mode).
Стало быть, нам нужно определить, в каком разделе находится вторая часть Grub (находится в каталоге /boot/grub), и после чего подгрузить все недостающие модули. А вот уже после этого мы сможем запустить загрузчик с нужного раздела. В rescue mode есть всего четыре команды:
Для начала вводим следующую команду:
В выводе будет что-то подобное:
В некоторых случаях Grub неправильно опеределяет файловые системы находящиеся на разделах дисков. В данном примере загрузчик показывает их как msdos. Мы должны попытаться угадать диски, которые видим. В примере доступно два диска. Диск с индексом 0 содержащий три раздела, и диск с индексом 1 содержащий два раздела. Если вы знаете структуру своих дисков, определить нужный труда не составит.
В загрузчике Grub разделы нумеруются в обратном исчислении. Не очень ясно какой именно из разделов назван, к примеру (hd0,msdos3). Чтобы было более понятно, можно использовать вид (hd0,1). Если в грабе отсчет дисков идет с 0, а разделов с 1, то можно определить, что операционная система установлена в первый раздел первого раздела — (hd0,1). Используем следующую команду:
С помощью этих команд мы приказываем системе использовать какой-то конкретный диск, для выполнения всех остальных операций (в нашем случае, это диск (hd0,1)). Чтобы проверить есть ли на данном диске загрузчик, введем эту команду:
Если в выводе будет список файлов и папок, значит мы все сделали правильно. Теперь можно загрузить все необходимые модули. Для этого выполним команды:
После выполнения команд Grub загрузится в полнофункциональном режиме. Будут найдены все операционные системы, которые установлены на компьютере, после чего будет показано стандартное меню загрузки.
Чтобы закрепить результат (и не проделывать все то же самое после перезапуска ПК), нужно зайти в терминал своего дистрибутива Linux, где с root правами выполнить следующую команду:
sdX — диск, на который должен быть установлен Grub.
Если операционная система расположена на разделе с файловой системой btrfs, то нам необходимо выполнить следующие команды:
И подгрузить модули:
Ну и теперь запустить GRUB: