Возня с grub2
Всегда пользовался такими загрузчиками как lilo и extlinux, а тут решил вылезти из криокамеры и обратить внимание на использующийся во всех современных дистрибутивах загрузчик grub2.
Почитал руководства, такие как https://ru.wikibooks.org/wiki/Grub_2, погуглил. Есть вопросы:
1. Везде, в частности тут http://forum.ubuntu.ru/index.php?topic=194809.0 сказано, что grub нужно устанавливать в MBR. На раздел установить нельзя, то есть реально нельзя, я тоже попробовал — не получилось. Но я не понимаю почему нельзя. Вот grub грузится из MBR, а конфиг свой читает с раздела. Как он определяет с какого именно раздела вылавливать свой конфиг? Что произойдёт, если одновременно на нескольких разделах будет присутствовать файл boot/grub/grub.cfg?
2. grub не требует ручной настройки, даже основной конфиг /boot/grub/grub.cfg не предназначен для редактирования и должен создаваться автоматом, все ядра должны найтись сами и попасть в этот конфиг. При этом можно редактировать файл параметров /etc/default/grub, после редактирования которого нужно выполнить «grub2-mkconfig -o /boot/grub/grub.cfg». Так?
3. Кроме редактирования файла параметров можно ставить/снимать права выполнения со скриптов в /etc/grub.d или редактировать /etc/grub.d/40_custom. А как поменять параметры, генерируемые главным скриптом /etc/grub.d/10_linux. Вот у меня в меню загрузки два пункта:
Fedora (4.2.6-301.fc23.x86_64) 23 (Twenty Three) Fedora (0-rescue-be33690a1c684bf2a1d7e98cad7d2c7f) 23 (Twenty Three)
Не читай убунту форумы. Что там у чувака не так, не понятно. И весь тред народ гадает на кофейной гуще. Путь к файлам задается при установке. При нескольких грабах сначала загрузится MBR, потом как ты настроил.
Так. Еще есть /etc/grub.d/ с кучей настроек в нем.
Смотри /etc/grub.d/10_linux или как он у тебя называется.
Когда компьютер включается, программа из БИОС записывает первые 512 байт HDD в память по адресу 0x7C00.
Первые 446 байт из этих 512 и есть boot.img — первая часть grub`a, которая ну никак не может быть записана в раздел, и содержит jmp на основное ядро core.img grub’a, которое уже сцуко знает, как устроен твой диск, и в каком каталоге лежат его модули и конфигурационные файлы, основным из которых и является grub.cfg, который можно таки править в ручную, что часто и делается при установки оного загрузчика на сменные носители, но не рекомендуется, а в инструмент предлагают пользоваться grub-tools, утилитами для конфигурирования конфигурационного файла, конфигурационные файлы, которых находятся в /etc/default/ и /etc/grub.d
Помимо всего, уже довольно таки давно, для core.img в дисках с GPT не рекомендуют, а просто требуют создавать отдельный, специальный раздел.
Но это всё не для UEFI.
3. /etc/default/grub параметр GRUB_DISABLE_RECOVERY
наверное.
Пхоже, что Fedora (0-rescue-be33690a1c684bf2a1d7e98cad7d2c7f) создает такая штука как dracut при установке нового ядра.
Пока только нашел запись в /lib/dracut/dracut.conf.d/02-rescue.conf: dracut_rescue_image=«yes».
Короче есть несколько вариантов.
Удалить из /boot нафиг все файлы с имением 0-rescue-be33690a1c684bf2a1d7e98cad7d2c7f и затем, да grub2-mkconfig -o /boot/grub/grub.cfg
до следуещего нового ядра.
Или, закомментировать запись
menuentry 'Fedora ( (0-rescue-be33690a1c684bf2a1d7e98cad7d2c7f) 23 (Twenty Three)' . >
до скобочки, в /boot/grub/grub.cfg, до следующего обновления.
Или заменить «yes» на «no» в вышеуказанном файлике, сделать один из предыдущих пунктов, и дождаться нового ядра.
Ни черта не понял. Почему просто не отредактировать /etc/grub.d/10_linux?
Почему просто не отредактировать /etc/grub.d/10_linux?
Не просто. Не все так хорошо владеют башем.
/etc/default/grub параметр GRUB_DISABLE_RECOVERY наверное.
Попробую. А где про это написано?
Первые 446 байт из этих 512 и есть boot.img — первая часть grub`a
Ну вообще-то в первых 446 байтах обычно загрузчик mbr располагается.
Нет никакого «загрузчика MBR», а есть в структуре диска с классической структурой разбиения такая, простите за тавтологию, структура как MBR, главная загрузочная запись. В первых 446 байтах ее располагается код загрузчика, задачей которого является загрузка более «высокоуровнего» загрузочного кода и передача ему управления. У «обычных» загрузчиков в MBR помещается весь необходимый код, способный загрузить в память и передать управление ядру или другому загрузчику по цепочке, а у GRUB-а туда помещается только Stage1. Stage1 обычно передает управление Stage1.5, занимающей промежуток между таблицей разделов (находщейся в оставшейся части MBR) и первым разделом. Stage1.5 может и не быть, в этом случае управление передается сразу на Stage2, собственно и реализующей пользовательский интерфейс GRUB-а, поддержку файловых систем и прочей шелухи. И именно Stage2 открывает ядро как файл, считывает его в память и передает управление.
можно править руками /boot/grub/grub.cfg
всегда так делаю. проще и удобнее. никаких проблем
Почему просто не отредактировать /etc/grub.d/10_linux?
В моем варианте я еще сильно сомневаюсь но и разбираться дальше как-то тоже не собираюсь, не сильно то этот rescue и мешает.
grub нужно устанавливать в MBR. На раздел установить нельзя
Вроде можно и в раздел установить.
Когда я пользовался lilo или extlinux я делал так:
1. Восстанавливал стандартный загрузчик в mbr командой «dd if=/usr/share/syslinux/mbr.bin of=/dev/sda»
2. Делал активным /dev/sda2 (он у меня обычно используется под «/») 3. Ставил загрузчик в /dev/sda2
+1, нельзя только тем, кто считает, что действительно нельзя 🙂
куда писать что грузить.
ядрить его в кочерыжку, где у grub2 нормальный конфиг, куда я мог бы прописать какое ядро грузить и какой том считать корнем. в манах пишут типа «оно всё само работает, надо только сделать grub2-mkconfig», а я вот не верю ни капли, откуда он может знать что и откуда грузить?
в манах пишут типа «оно всё само работает, надо только сделать grub2-mkconfig», а я вот не верю ни капли
ЕМНИП во втором грабе конфиг валяется где-то в /etc
я сделал, он создал /boot/grub2/grub.cfg.new с невразумительным содержанием
ЕМНИП во втором грабе конфиг валяется где-то в /etc
ага, в каталоге /etc/grub.d, только там какие-то наркоманские скрипты
Ну а кто на gentoo-wiki сходит ?
localhost linux # cat /boot/grub2/grub.cfg.new # # DO NOT EDIT THIS FILE # # It is automatically generated by grub2-mkconfig using templates # from /etc/grub.d and settings from /etc/default/grub # ### BEGIN /etc/grub.d/00_header ### if [ -s $prefix/grubenv ]; then load_env fi set default="0" if [ x"$" = xy ]; then menuentry_id_option="--id" else menuentry_id_option="" fi export menuentry_id_option if [ "$" ]; then set saved_entry="$" save_env saved_entry set prev_saved_entry= save_env prev_saved_entry set boot_once=true fi function savedefault < if [ -z "$" ]; then saved_entry="$" save_env saved_entry fi > function load_video < if [ x$feature_all_video_module = xy ]; then insmod all_video else insmod efi_gop insmod efi_uga insmod ieee1275_fb insmod vbe insmod vga insmod video_bochs insmod video_cirrus fi >if [ x$feature_default_font_path = xy ] ; then font=unicode else insmod part_msdos insmod btrfs set root='hd0,msdos4'