Конcоль GRUB: различия между версиями
Нет описания правки |
Нет описания правки |
||
(не показаны 24 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
Иногда, при сбое системы или диска, при включении компьютера вместо загрузки системы/отображения меню GRUB2 отображается консоль с приглашением {{cmd|grub>}}. | Иногда, при сбое системы или диска, при включении компьютера вместо загрузки системы/отображения меню GRUB2 отображается консоль с приглашением {{cmd|grub>}} или {{cmd|grub rescue>}}. | ||
Если вы попали в консоль Grub, то надо первым делом определить в какой тип консоли вы попали, а дальше действовать в соответствии с этим. | Если вы попали в консоль Grub, то надо первым делом определить в какой тип консоли вы попали, а дальше действовать в соответствии с этим. | ||
* Если вы видите приглашение | |||
grub> | |||
это нормальная консоль GRUB | |||
* Если вы видите приглашение | |||
grub rescue> | |||
это аварийная консоль GRUB | |||
Загрузчик GRUB2 выполняет свой файл конфигурации как шелл-подобный скрипт, состоящий из команд. Те же команды можно выполнять и в интерактивном режиме, с помощью консоли. | Загрузчик GRUB2 выполняет свой файл конфигурации как шелл-подобный скрипт, состоящий из команд. Те же команды можно выполнять и в интерактивном режиме, с помощью консоли. | ||
=== Нормальная консоль GRUB2 === | === Нормальная консоль GRUB2 === | ||
[[Файл:Classic boot console.png||альт=Классисеский вид нормальной консоли]] | |||
==== Причина попадания в нормальную консоль ==== | ==== Причина попадания в нормальную консоль ==== | ||
Строка 15: | Строка 27: | ||
* файл конфигурации найден и выполнен, но в ходе его выполнения так и не было создано меню, и не была выполнена команда boot (см. ниже), либо её выполнение завершилось неудачно; | * файл конфигурации найден и выполнен, но в ходе его выполнения так и не было создано меню, и не была выполнена команда boot (см. ниже), либо её выполнение завершилось неудачно; | ||
* в меню загрузчика нажата клавиша {{button|c}}.}} | * в меню загрузчика нажата клавиша {{button|c}}.}} | ||
==== Алгоритм загрузки из нормальной консоли (при неправильной загрузке) ==== | |||
* Поиск корневого каталога | |||
С помощью команды {{cmd|ls}} ищем корневой раздел (а при отдельном разделе /boot и eго) | |||
* Даём команду {{cmd|ls}} | |||
* Получаем перечень видимых в системе разделов | |||
* С помощью команды {{cmd|echo $root}} смотрим значение переменной root | |||
* Смотрим содержимое разделов, например содержимое четвертого раздела, ищем корневой раздел | |||
ls (hd0,gpt4)/ | |||
* Присваиваем правильное значение переменной root | |||
set root=(hd0,gpt3) | |||
[[Файл:Grub search root.png|альт=Поиск раздела root из нормальной консоли grub|Поиск раздела root из нормальной консоли grub]] | |||
* Загружаем ядро | |||
linux /boot/grub/vmlinuz | |||
* Задаём initrd | |||
initrd /boot/grub/initrd.img | |||
* загружаем систему | |||
boot | |||
[[Файл:Boot from grub2.png.png|альт=Заданине ядра, initrd и загрузка системы|Заданине ядра, initrd и загрузка системы]] | |||
==== Команды, полезные в консоли GRUB2 ==== | ==== Команды, полезные в консоли GRUB2 ==== | ||
В консоли GRUB2 могут пригодиться следующие команды: | В консоли GRUB2 могут пригодиться следующие команды: | ||
Строка 53: | Строка 99: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
probe -s UUID -u $root | probe -s UUID -u $root | ||
linux /boot/vmlinuz | linux /boot/vmlinuz rw root=UUID=$UUID | ||
initrd /boot/ | initrd /boot/initrd.img | ||
boot | boot | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 76: | Строка 122: | ||
probe -s UUID -u $root | probe -s UUID -u $root | ||
linux /boot/vmlinuz | linux /boot/vmlinuz rw root=UUID=$UUID | ||
initrd /boot/ | initrd /boot/initrd.img | ||
if sleep -vi $timeout | if sleep -vi $timeout | ||
Строка 84: | Строка 130: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
В этом примере GRUB2 загружает с диска образы ядра и {{cmd| | В этом примере GRUB2 загружает с диска образы ядра и {{cmd|initrd}}, ждёт 3 секунды, и запускает ядро. | ||
Если же в течении этих секунд пользователь нажмёт {{button|ESC}}, он попадёт в консоль загрузчика. Так как ядро уже загружено, для продолжения загрузки достаточно набрать команду {{cmd|boot}} в консоли. | Если же в течении этих секунд пользователь нажмёт {{button|ESC}}, он попадёт в консоль загрузчика. Так как ядро уже загружено, для продолжения загрузки достаточно набрать команду {{cmd|boot}} в консоли. | ||
Строка 90: | Строка 136: | ||
=== Аварийная консоль === | === Аварийная консоль === | ||
Если вместо меню или "шапки" нормальной консоли вы видите при старте загрузчика сообщение об ошибке и приглашение вида '''grub rescue> | Если вместо меню или "шапки" нормальной консоли вы видите при старте загрузчика сообщение об ошибке и приглашение вида '''grub rescue>''', значит вы попали в аварийную консоль. | ||
{{Note|Аварийная консоль GRUB2 встроена в стартовый образ загрузчика, и запускается в случаях, когда GRUB2 не может самостоятельно перейти в "нормальный" режим. Такое может случиться, если ядро GRUB2 при загрузке не нашло каталог со своими файлами и модулями по пути, указанному в переменной {{cmd|prefix}}.}} | {{Note|Аварийная консоль GRUB2 встроена в стартовый образ загрузчика, и запускается в случаях, когда GRUB2 не может самостоятельно перейти в "нормальный" режим. Такое может случиться, если ядро GRUB2 при загрузке не нашло каталог со своими файлами и модулями по пути, указанному в переменной {{cmd|prefix}}.}} | ||
Строка 146: | Строка 192: | ||
==Источники== | ==Источники== | ||
*[https://wiki.archlinux.org/title/GRUB_(Русский)#Консоль_GRUB2 Статья на ArchWiki] | *[https://wiki.archlinux.org/title/GRUB_(Русский)#Консоль_GRUB2 Статья на ArchWiki] | ||
[[Категория:HOWTO]] | |||
{{Category navigation|title=GRUB|category=GRUB|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 17:24, 24 августа 2024
Иногда, при сбое системы или диска, при включении компьютера вместо загрузки системы/отображения меню GRUB2 отображается консоль с приглашением grub> или grub rescue>.
Если вы попали в консоль Grub, то надо первым делом определить в какой тип консоли вы попали, а дальше действовать в соответствии с этим.
- Если вы видите приглашение
grub>
это нормальная консоль GRUB
- Если вы видите приглашение
grub rescue>
это аварийная консоль GRUB
Загрузчик GRUB2 выполняет свой файл конфигурации как шелл-подобный скрипт, состоящий из команд. Те же команды можно выполнять и в интерактивном режиме, с помощью консоли.
Нормальная консоль GRUB2
Причина попадания в нормальную консоль
Если вы видите в терминале GRUB2 приглашение вида grub> , значит вы попали в его нормальную консоль.
- при загрузке не найден файл конфигурации grub.cfg;
- файл конфигурации найден и выполнен, но в ходе его выполнения так и не было создано меню, и не была выполнена команда boot (см. ниже), либо её выполнение завершилось неудачно;
- в меню загрузчика нажата клавиша c.
Алгоритм загрузки из нормальной консоли (при неправильной загрузке)
- Поиск корневого каталога
С помощью команды ls ищем корневой раздел (а при отдельном разделе /boot и eго)
- Даём команду ls
- Получаем перечень видимых в системе разделов
- С помощью команды echo $root смотрим значение переменной root
- Смотрим содержимое разделов, например содержимое четвертого раздела, ищем корневой раздел
ls (hd0,gpt4)/
* Присваиваем правильное значение переменной root set root=(hd0,gpt3)
- Загружаем ядро
linux /boot/grub/vmlinuz
- Задаём initrd
initrd /boot/grub/initrd.img
- загружаем систему
boot
Команды, полезные в консоли GRUB2
В консоли GRUB2 могут пригодиться следующие команды:
- Переменная pager. Присвоение ей единицы командой pager=1 поможет вам полностью читать вывод следующих команд, если он не помещается на экран.
grub> pager=1
- Команда help. Без параметров выводит список всех поддерживаемых в текущей конфигурации команд загрузчика. При вызове вида help слово выводит справку по командам, в которых присутствует заданное слово. Например, команда help normal покажет справку по командам normal и normal_exit.
grub> help
grub> help init
- Команда ls без параметров выводит список дисков и разделов, доступных в данный момент загрузчику. С ключом -l показывает подробные сведения о каждом из них – размер, метку, UUID и тип файловой системы.
grub> ls
grub> ls -l
С ключами -lh выводит размеры в "человекочитаемом" виде. С параметром в виде диска или раздела выводит сведения только о нём, например ls (hd0,1) выведет сведения о первом разделе на нулевом диске.
grub> ls -lh
grub> ls (hd0,1)
Команда ls с параметром в виде полного пути к каталогу выводит содержимое каталога. С ключом -l показывает подробные ведения о каждом файле и каталоге, с ключами -lh выводит размеры и даты в "человекочитаемом" формате. К примеру, команда ls -lh /boot подробно выведет содержимое каталога /boot на текущем (в переменной root) разделе, а ls (hd0,1)/ покажет список файлов и каталогов в корневом каталоге раздела hd0,1.
grub> ls -lh /boot
grub> ls (hd0,1)/
- Команда set без параметров. Выводит список всех переменных со значениями.
grub> set
- Команда echo аналогична такой же команде обычного шелла, и выводит всё, что в ней написано. Может использоваться для вывода переменных, например echo $cmdpath $prefix $root покажет значения трёх самых важных переменных загрузчика.
grub> echo $root
- Команда cat аналогична одноимённой команде шелла, и выводит содержимое заданного файла в консоль. Так как перенаправления ввода-вывода GRUB2 не поддерживает, использовать её можно только для просмотра текстовых файлов, например, конфига самого загрузчика, fstab, и т.д.
grub> cat /boot/grub/grub.cfg
- Команда boot запускает образ ядра, другого загрузчика, или EFI-приложения, загруженный перед этим командами linux, initrd, ntldr, chainloader и некоторыми другими. В отличии от меню GRUB, где запуск загруженных образов происходит автоматически после завершения кода пункта меню, в консоли выполнение этой команды обязательно – без неё загруженный образ сам не запустится.
В нормальной консоли GRUB2 поддерживает возврат к предыдущим командам и автодополнение команд, каталогов и файлов по нажатию клавиши TAB, как в консоли Linux.
Загрузки из нормальной консоли Grub (пример)
Если вы успешно установили загрузчик в корневой раздел, но забыли создать конфиг загрузчика, вы увидите меню из дефолтного конфига, но оно не будет работать. Чтобы продолжить загрузку, вы можете войти в консоль, нажав клавишу c, и выполнить команды:
probe -s UUID -u $root
linux /boot/vmlinuz rw root=UUID=$UUID
initrd /boot/initrd.img
boot
Пример загрузки с внешнего диска из консоли
Во многих версиях BIOS нет специального интерфейса для однократной загрузки с флешки. Для этого можно создать отдельный пункт меню, но на один раз проще обойтись консолью GRUB:
root=hd1
chainloader +1
boot
Пример конфига с загрузкой без меню
grub.cfg:
set timeout=3
probe -s UUID -u $root
linux /boot/vmlinuz rw root=UUID=$UUID
initrd /boot/initrd.img
if sleep -vi $timeout
then boot
fi
В этом примере GRUB2 загружает с диска образы ядра и initrd, ждёт 3 секунды, и запускает ядро.
Если же в течении этих секунд пользователь нажмёт ESC, он попадёт в консоль загрузчика. Так как ядро уже загружено, для продолжения загрузки достаточно набрать команду boot в консоли.
Аварийная консоль
Если вместо меню или "шапки" нормальной консоли вы видите при старте загрузчика сообщение об ошибке и приглашение вида grub rescue>, значит вы попали в аварийную консоль.
Значение этой переменной обычно имеет вид (диск,раздел)/путь, например (hd0,msdos6)/boot/grub. Обозначение диска подставляется при старте загрузчика, а остальная часть (начиная с запятой) "зашивается" в стартовый образ ещё на этапе установки. Это значит, что после изменения любого из содержащихся в $prefix параметров (таблицы разделов, номера раздела, пути к файлам grub), загрузчик требуется переустанавливать, в противном случае он "вывалится" в аварийную консоль.
В режиме аварийной консоли GRUB2 понимает всего 4 команды:
- set
- unset
- ls
- insmod.
Повтор и автодополнение не поддерживаются, команда ls поддерживается в урезанном виде – без ключей и с выводом в сведениях о разделах только типа файловой системы, если она опознана.
По-умолчанию в стартовый образ загрузчика включается модуль для поддержки таблицы разделов и файловой системы только для того раздела, на который устанавливается GRUB2. Остальные модули должны загружаться уже из файлов, если загрузчику удастся их найти.
В некоторых случаях, когда встроенных в стартовый образ модулей достаточно для продолжения загрузки в изменившихся условиях, загрузку можно продолжить, изменив в аварийной консоли переменную $prefix.
Если вы попали в аварийную консоль, наберите для начала команду set. Вы увидите значения трёх главных переменных GRUB2.
- В переменной cmdpath будет обозначение диска, либо полный путь к EFI-файлу, из которого стартовал образ загрузчика.
- В переменной prefix будет тот путь, по которому должен был быть каталог с остальными файлами загрузчика.
- В переменной root будет текущий диск или раздел, скорей всего совпадающий с тем, что в $prefix.
Попробуйте команды:
ls
ls $root
ls $prefix
Если вы знаете, что делалось с диском перед тем, как GRUB показал ошибку, то возможно, вы уже догадываетесь, в чём ошибка и удастся ли её исправить.
Если в переменной $root оказался не тот или несуществующий раздел, можно проверять командами вида ls (диск,раздел)/ каждый раздел из тех, что вывела первая команда, пока не найдётся нужный. Если он нашелся – к примеру, оказался hd0,msdos5 вместо hd0,msdos6, и читается – запишите его в переменные:
root=hd0,5
prefix=($root)/boot/grub
Если раздел правильный, а неправильный каталог (команда ls $prefix выдаёт ошибку или не то, что нужно), запишите в переменную правильный путь, допустим такой:
prefix=($root)/grub
Если у вас получилось найти правильный диск, раздел и каталог, и вы успешно прописали из в переменные, остаётся загрузить модуль "normal" и выполнить одноимённую команду (она станет доступна после загрузки модуля), чтобы перейти в "нормальный" режим загрузчика:
insmod normal
normal