Os prober не видит linux
В этом блоге публикуются заметки и решения, найденные в процессе работы, освоения и жизни в дистрибутиве Debian GNU/Linux.
5/21/2012
Возможности настройки GRUB2 в Linux: от серьезных параметров до бесполезных украшательств
Эта статья является вольным переводом GNU GRUB Manual, структурированной выжимкой по интересующей нас теме. Мы не будем рассматривать вопрос установки и запуска GRUB'ом той или иной операционной системы. Мы посмотрим, какие возможности предоставляет GRUB2 версии 1.99 для собственной настройки. Ведь, как известно, "в Линукс можно настроить абсолютно все! И вы будете настраивать абсолютно все!"
Чем же GRUB2 лучше, чем GRUB Legacy? Да, собственно, для большинства пользователей практически ничем. Потенциально, он более гибок, в нем раньше появляются некоторые новые возможности (как, например, поддержка ext4). У GRUB2 более продвинутая поддержка таблицы разделов GPT и загрузка с (U)EFI. Нужно это, если жёсткий диск имеет объём более 2ТБ. Но если вы обычный пользователь и у вас уже установлен GRUB Legacy, то нет практического смысла менять его на GRUB2, по крайней мере, я его не вижу. Если же вы ставите систему с нуля, то все же стоит отдать предпочтение GRUB2 как более перспективной (и уже стабильно работающей) разработке.
Что нужно знать
Собственно конфигурационный файл находится в /boot/grub/grub.cfg, но его редактирование особого смысла не имеет. Дело в том, что этот файл создается автоматически утилитой update-grub на основе файла настроек /etc/default/grub и скриптов, находящихся в /etc/grub.d/. Таким образом, если вы не хотите, чтобы ваши изменения терялись, например, при обновлении ядра, правильным способом настройки будет редактирование файла настроек, а при отсутствии требуемого параметра в файле настроек, редактирования конфигурационных скриптов. Чтобы изменения вступили в силу необходимо запустить update-grub.
При настройке нам может понадобится выйти в командную строку GRUB. Для этого в меню выбора ОС необходимо нажать 'c', для возврата - 'esc'. Командная строка поддерживает автодополнение по Tab.
Чтобы в процессе работы в командной строке получить доступ к файлу, находящемуся не в корневой файловой системе (получить доступ к файлу, находящемуся в корневой файловой системе можно как обычно /path/to/file), необходимо знать наименование устройств и разделов. Например:
означает первый жесткий диск (устройства нумеруются с 0) и на нем первый раздел (разделы нумеруются с единицы), что соответствует /dev/sda1.
Если при наборе команды, например:
то вам будет предложен список разделов на первом жестком диске. Ну и для набранной команды
будет предложен список файлов на данном разделе.
Так же при настройке GRUB может оказаться полезной команда grub-mkconfig, которая позволяет посмотреть предварительный вариант файла grub.cfg без изменения реального конфигурационного файла. Собственно, update-grub выполняет grub-mkconfig с параметром вывода в файл /boot/grub/grub.cfg.
GRUB использует unicode, т.е. создание пункта меню на русском языке проблем вызвать не должно.
Простейший пример настроек
Рассмотрим простейший пример файла настроек. Если вам захочется чего-то большего, чем описано в этом разделе, обратите внимание на раздел "Параметры /etc/default/grub".Большинству пользователей, к коим я отношу и себя, понадобится всего несколько параметров для настройки функциональности GRUB2. Мой файл настроек выглядит так (за вычетом неинтересных комментариев):
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
GRUB_GFXMODE=1280x768
GRUB_GFXPAYLOAD_LINUX=keep
GRUB_BACKGROUND="/root/picture.jpg"
Наиболее востребованы бывают первые два параметра, отвечающие за пункт меню по умолчанию и время ожидания выбора. Если у вас установлена всего одна ОС, то можете вместо 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 вводим команду
и смотрим на параметр gfxmode. Список поддерживаемых разрешений можно получить командой vbeinfo. Теперь загружаемся в дебиан, находим в конфигурационном файле /etc/default/grub параметр GRUB_GFXMODE, (раскомментируем его, если он закомментирован и добавляем, если его нет) и назначаем его: GRUB_GFXMODE=1280x768 или GRUB_GFXMODE=1280x768x32 (цветность можно не указывать). Не забываем выполнить update-grub, перезагружаемся, получаем:
Для того, чтобы разрешение экрана до запуска иксов оставалось таким же, как в GRUB, можно установить параметр:
GRUB_GFXPAYLOAD_LINUX=true
Теперь попробуем поставить красивую картинку в качестве фона. Для начала можно посмотреть как она будет выглядеть. В консоли GRUB сначала подгружаем нужные модули командой
Тут помним, что смонтирован только корневой раздел. До остальных можно добраться указав идентификатор раздела, например, (hd0,1)/path/to/picture.jpg.
Установить картинку в качестве фона можно несколькими способами, опишем два из них. Самый простой - скопировать картинку в /boot/grub/ и как всегда не забыть запустить update-grub. Второй способ (и он является для GRUB'а более приоритетным) - установить параметр: GRUB_BACKGROUND="/path/to/picture.jpg". Можно не беспокоиться, что картинка находится где-то, куда GRUB не сможет добраться во время загрузки - если он это поймет, то скопирует ее себе в буфер. Итак, получаем:
На фоне такой картинки серый цвет надписей смотрится как-то уныло. К сожалению, поменять цвет шрифта в файле настроек нельзя, поэтому нам придется лезть в настроечные скрипты, к счастью, в данном случае это совсем просто. Файл /etc/grub.d/40_custom предназначен для пользовательской настройки. Добавляем в конец:
set menu_color_normal=red/black
set menu_color_highlight=yellow/black
set color_normal=yellow/black
Получаем:
Установить можно четыре параметра: 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
Как и в случае с фоновым изображением, цвета текста можно предварительно опробовать используя командную строку GRUB. Достаточно ввести команду
set one_of_4_color_parametrs first-color/second-color
Так же, GRUB поддерживает более сложный механизм настройки внешнего вида. Можно установить параметр GRUB_THEME="path/to/theme.file". Впрочем, вопрос создания своих файлов с темами для GRUB мы пока рассматривать не будем.
Редактирование скриптов
Расскажем немного про редактирование скриптов формирования конфигурационного файла. Нам уже приходилось влезать в скрипты создания конфигурационного файла GRUB, теперь сделаем это подробнее. При редактировании скриптов удобно пользоваться командой grub-mkconfig, чтобы не портить существующий файл конфигурации.
- 00_header отвечает за загрузку основных параметров и библиотек;
- 05_debian_theme отвечает за оформление внешнего вида;
- 10_linux отвечает за формирование записей в меню, соответствующих ОС-linux, в которой стоит GRUB;
- 20_linux_xen - аналогично предыдущему;
- 30_os-prober отвечает за обнаружение и включение в список остальных ОС;
- 40_custom и 41_custom - пользовательские скрипты.
Объяснить GRUB, что не надо формировать запись меню для определенного раздела, достаточно просто. В цикле перебора установленных ОС:
Тогда никакая информация об ОС на /dev/sda2 в конфигурационный файл не попадет. Теперь сами прописываем информацию о нашей системе до вышеозначенного цикла, заменяя параметры, которые нам не подходят. При этом опираемся на то, как формируются аналогичные записи в цикле. Результат будет выглядеть так (изменения выделены жирным шрифтом):
DEVICE="/dev/sda2"
LINUX="`linux-boot-prober $ 2> /dev/null | tr ' ' '^' | paste -s -d ':'`"
prepare_boot_cache=
LROOT="`echo $ | cut -d ':' -f 1`"
LBOOT="`echo $ | cut -d ':' -f 2`"
LLABEL="`echo $ | cut -d ':' -f 3 | tr '^' ' '`"
LKERNEL="`echo $ | cut -d ':' -f 4`"
LINITRD="`echo $ | cut -d ':' -f 5`"
LPARAMS="`echo $ | cut -d ':' -f 6 | tr '^' ' '`"
При помощи команды grub-mkconfig проверяем, что конфигурационный файл не содержит ошибок, запускаем update-grub, получаем:
Параметры /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.jpg" - установить фоновую картинку.
GRUB_THEME="path/to/theme.file" - установить файл тем.
- возможность отключить использование 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-mkpasswd-pbkdf2, а в скриптах прописать соответственно команду:
password_pbkdf2 root grub.pbkdf2.sha512.10000.mnogobukv
Все эти команды лучше всего дописать в скрипт 40_custom.
Для того, чтобы определенный пользователь мог запускать определенную ОС, он должен быть прописан в списке в соответствующем пункте меню в ключе --users:
Заключение
Как мы видим, GRUB2 предоставляет массу возможностей по собственной настройке. И хотя механизм скриптов может кому-то показаться достаточно сложным, он позволяет гибко реагировать на изменения в списке установленных ОС и изменения в возможностях загрузки конкретной ОС. К тому же, практически все важные параметры вынесены в отдельный конфигурационный файл, что позволяет настраивать GRUB2 практически так же легко, как и GRUB Legacy.
Накатил утром свежий пакет обновлений для манжаро. Grub2 перестал видеть винду (win7x64), хотя еще 8 часов назад все было в порядке и полтора года до этого момента все было в порядке.
os-prober видит запись
Found theme: /usr/share/grub/themes/manjaro/theme.txt
Found linux image: /boot/vmlinuz-5.4-x86_64
Found initrd image: /boot/amd-ucode.img /boot/initramfs-5.4-x86_64.img
Found initrd fallback image: /boot/initramfs-5.4-x86_64-fallback.img
Adding boot menu entry for UEFI Firmware Settings…
Found memtest86+ image: /boot/memtest86+/memtest.bin
done
За подсказки и помощь спасибо alexal9 и Agafron
Агафон вообще выручает часто, шикарный))
23 комментария
И Минт тоже перестала видеть, он тоже на отдельном ссд. Это проблема конкретно граба, так как стандартные способы перепробовал. Да и запуск биосом работает хорошо. Возможно кто-то решил что мы дофига олигархи и имеем ссд на 10 терабайт чтоб все на одном диске держать, например Kosh с его подходом владельца сервераОткатитесь на последний бекап. Это же не проблема.
P.S.
Бекап — это не проявление трусости.
И я не делаю.
Раз в неделю, вполне себе норм.
И хранить последние 3 версии.
Линукс очень дружелюбная система, но она очень тщательно выбирает себе друзей! Для ссд 120-240 это не сильно чтобы норм. У меня же набор программ довольно веский, я не токмо ютуб смотрю. На линь переехал давно и довольно плотно, винда чисто под фрутик и набор плагинов, чьи разраби ленятся запиливать бинарники и вшивают проверку лицензии в распаковщика .exe. А для ссд с хорошим объемом я не москвич еще чтоб выкладывать по 50 кусков за такоеДа, я можно сказать, москвич.
Общаюсь с вами с ноута 2008 года выпуска )))
Бекап бывает разный. Можно бекапить все, а можно выборочно.
Я бекаплю только систему, как раз на случай подобных сбоев и скрытые файлы хомяка. Из бекапа так же исключен кеш скачанных пакетов. В общем все занимает не особо много места на терабайтном HDD.
Это все конечно не отностится к вашему вопросу… Только дает тему для размышлений.
Линукс очень дружелюбная система, но она очень тщательно выбирает себе друзей! Ну опять же, терабайт не идет в сравнение с объемами массовых ссд. Заполнен он у меня примерно на 80 из 120, т.к. программ использую довольно много. А таймшифт почему-то упрямо отказывается закидывать снэпшоты на дополнительные харды в кучу файлов и кэша программ. Потому один бэкап для меня это норма и используется он при обновлении ядра. Ну и от граба такой подлянки не ожидаешь. Если он не видит — ну вбить ему ручками настройку и все ок. А то ведь система все видит, а граб конкретно не хочет и все тут. ЖутьTimeshift аккуратненько скадывает все ему нужное в одну папочку, на любом, даже внешнем диске. Попробуйте с ним подружиться.
Прошу вас простить разработчиков. Не ошибается тот, кто ничего не делает. Я уверен, они все поправят. Может через несколько дней, а может недель.
Все же пользуясь роллинг релизом, нужно страховаться и самому.
нажмите Alt + F2, чтобы открыть поле «Запустить приложение» gksudo nautilus в текстовое поле и нажмите «Ввод». Появится диалоговое окно с паролем. Введите пароль sudo, и он откроет nautilus с привилегиями root. Оттуда вы можете перемещать / копировать файлы без какой-либо ошибки разрешения.
Примечание. Просто убедитесь, что вы не удаляете и не заменяете какие-либо системные файлы.
Вы пытались добавить «custom» menuentry для загрузки Ubuntu, отредактировав grub.cfg ?
- Загрузите свою систему, используя 12.04 LiveCD.
- Установите раздел sda5 , на котором установлен Ubuntu. В этом примере я предполагаю, что sda5 был установлен на /mnt , используя, например, sudo mount -t ext4 /dev/sda5 /mnt .
- Определите, какое ядро (ы) вы установили, указав содержимое каталога /mnt/boot , Эта информация вам понадобится для завершения шага (5) ниже. Примечание. Команда ниже - это один из способов сделать это.
- Используйте sudo для редактирования файла /mnt/boot/grub/grub.cfg (т. е. файла grub.cfg на вашем разделе sda5 Ubuntu).
- Найдите строки ниже в файл. Они должны быть
Если вышеописанное предложение было выполнено, предложите попробовать следующее.
- С помощью sudo отредактируйте файл /etc/grub.d/40_cutom и добавьте команды menuentry с шага (5) в конец файла. Таким образом, запись меню не будет потеряна, если вы запустите update-grub . Предупреждение: не удалить две строки ниже! Они должны быть в начале файла 40_custom для update-grub для правильной работы.
- Попробуйте еще раз переустановить GRUB, используя приведенную ниже команду. (Почему бы и нет?)
Обновление ответа на комментарий о том, что файлы ядра отсутствуют в /boot
Я никогда не сталкивался с ситуацией где файлы ядра отсутствовали в /boot . Моя первая проблема заключалась в том, что если ваши файлы ядра отсутствуют, то с Ubuntu, установленным на sda5 , может быть что-то другое.
Предлагаю вам обновить свой вопрос и его заголовок, чтобы убедиться, что в файле /boot нет файлов ядра. Это увеличивает ваши шансы получить лучший ответ от кого-то другого.
Я искал AskUnbuntu по аналогичному вопросу, но все, что я нашел, было тем, что было показано ниже. Как восстановить систему после случайного удаления всех ядер?
Лучший ответ на этот вопрос был в chroot , а затем попробуйте переустановить ядро, которое, как вы говорите, уже пробовал. Единственное изменение, которое я мог бы предложить, - это повторить попытку с помощью этих команд. (Примечание: sudo не использовался ниже, потому что, если вы chroot , вы уже являетесь root .)
- Примечание: если указано выше для работы, вероятно, безопаснее также запускать grub-install --recheck /dev/sda
. Справочная страница для update-initramfs также может помочь обеспечить некоторый контекст того, что происходит, когда ядро " установленный ".
В ретроспективе я должен был понять, что что-то не так, прочитав сводку BootInfo. Он заканчивается выдержкой ниже.
Но вместо ошибок выше я должен был ожидать увидеть что-то вроде выдержки из ниже резюме BootInfo, которое я создал в качестве примера .
В статье описывается приём, с помощью которого можно вернуть запись об операционной системе Windows, когда после появления загрузчика Grub вы вдруг обнаруживаете, что пропала Windows из списка установленных систем.
Всем привет, короткое эссе на тему как вернуть пропавшую запись об установленной Windows в Grub-загрузчик Кали Линукс. Такая беда подстерегла меня после очередного обновления Кали, и после перезагрузки на экране в меню загрузчика я заметил, что в нём чего-то не хватает:
Пропала Windows: возвращаем запись о Windows в Grub-загрузчик
Откроем окно терминала и вводим команду (если вы не root-пользователь, не забудьте вводит все команды через sudo):
Линукс прошерстит конфигурацию загрузчика, и, если вы не столкнулись с куда более серьёзными проблемами, он обязательно обнаружит запись о Windows:
Теперь закрепляем обнаруженную запись в загрузчике командой:
Перезагружаемся. У меня всё стало на свои места:
Пакет os-prober установлен, терминал ошибок не возвращает, однако запись о Windows всё не появляется. Давайте внесём запись о Windows в загрузчик вручную.
- Через терминал откроем документ текстовым редактором типа leafpad:
- Куда внесём строчки типа:
chainloader +1
Читайте также: