LINUX.ORG.RU

Fedora, не устаналивается grub, btrfs.

 , ,


0

1

Установленная Федора 39 на btrfs разделе, сабвол: root, все по умолчанию. EFI или esp раздел на sda1.

Задача - установить grub. Граб я всегда не принимал и не понимал - монструобразная штука где куча файлов конфигов и которая как правило иногда не работает(граб рескуе.. делаеш апдейт граба а граб все равно выводит граб рескуй). Поэтому я всегда использовал refind - утрируя, там один файл, один конфиг и все просто работает.

Федора эта была перенесена на другой раздел, точнее диск поменял сата порт и граб конечно же перестал работать, потом я файлы федоры и вовсе удалил с есп раздела(рефайнд его прекрасно грузил но нюанс, в конце напишу) а теперь вот захотел установить. В есп разделе есть файлы граба убунты, если грузиться с него то граб рескуи, далее с lc смотрю разделы, нахожу раздел линукса с lc / и далее:

set root=(hd*,gpt*)
set prefix=(hd*,gpt*)/root/boot/grub
insmod normal
normal

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

Загружаю лайвсд федоры 39 для верности

mount /dev/sda3 /mnt
mount --bind /dev /mnt/root/dev/
mount -t proc /proc /mnt/root/proc/
mount -t sysfs /sys /mnt/root/sys/
chroot /mnt

mount /dev/sda1 /boot/efi
dnf reinstall grub2-efi grub2-efi-modules shim
dnf install grub2-efi grub2-efi-modules shim
grub2-mkconfig -o /boot/grub2/grub.cfg

и вот тут то и ошибка

Но в есп разделе появились папка и файлы федоры граба, заново теперь уже гружусь на него, снова пробую

set root=(hd*,gpt*)
set prefix=(hd*,gpt*)/root/boot/grub
insmod normal
normal

и теперь после нажатия ентер после команды normal весь экран очищается но граб все так же не грузится

Тут я нашёл другую инструкцию(в пред. не было run) -

mount /dev/sda3 /mnt
mount --bind /dev /mnt/root/dev/
mount -t proc /proc /mnt/root/proc/
mount -t sysfs /sys /mnt/root/sys/
mount -t tmpfs /tmpfs /mnt/root/run/
chroot /mnt

mount /dev/sda1 /boot/efi
dnf reinstall grub2-efi grub2-efi-modules shim
dnf install grub2-efi grub2-efi-modules shim
grub2-mkconfig -o /boot/grub2/grub.cfg

и теперь без ошибок.

Загружаю снова федору из биоса и снова чертов граб рескуи хотя вся установка грабов, апдейт его конфигов прошла абсолютно без ошибок.

Первый вопрос - чего ему надо? чего ему не хватает?

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

Федора и остальные дистры имеют уникальные названия и поэтому после обновлений нужно изменять содержимое файла что я создал в /boot/refind_linux.conf(без этого файла по моему только арч грузится)

"Boot using standard options" "ro root=UUID=*** rootflags=subvol=root initrd=root\boot\initrd.img-5.11.0-43-generic
Второй вопрос - можно его как то обозначить переменным чтобы каждый раз файл не редактировать?
Пробовал initrd.img-*-generic но так не грузится.

P.S. секуребуут включен в биосе, федоре это раньше не мешало а арч.. арч и без граба прекрасно загружается

★★

Последнее исправление: Sapetuko (всего исправлений: 4)

Первый вопрос - чего ему надо? чего ему не хватает?

Не хватает установки загрузчика grub2 - твоя инструкция это подготовка к установке груба (монтирование ФС, скачивание пакетов grub2, генерация конфига). А где сама установка загрузчика grub командой grub2-install?
Ну и с монтированием ФС у меня вопросы - почему вы /dev монтируете в /root/dev? У вас корень ФС монтируется в /mnt, туда же и надо монтировать /dev, /proc, /sys а не в домашний каталог пользователя root /mnt/root

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 1)
Ответ на: комментарий от sigurd

точно, вы правы, я что то пропустил про grub2-install. Ранее когда я начинал всю эту возню то grub2-install я делал и получал ошибку, Тогда инета в чруте не было, ping 8.8.8.8 работал, браузер на лайвсд работал а консоль в чруте писал что инет не работает. Потом уже догуглился что надо отредактировать /etc/resolve.. отредактировать не смог, оказалось там вместо него был симлинк, его удалил, создал новый конфиг с nameserver 8.8.8.8 /n nameserver 8.8.4.4 и инет заработал и вот тогда я про grub2-install забыл.

По поводу /dev и точки монтирования это ведь бтрфс.. То есть монтируеш ты корень раздела но в корне лежит только «папка» root, а внутри уже система лежит. Это у меня еще пошло давно, с тех времён.. пример убунта на ехт4 не заводится с ошибкой граб рескуй? сет рутом указываеш set prefix=(hd*,gpt*)/boot/efi и стартует граб.

А вот на федоре с бтрфс такое не прокатило, там я путем танцев с бубнем дошел до - set prefix=(hd*,gpt*)/root/boot/grub и граб без проблем запускался.
Чрутится я тоже не мог, поэтому тоже монтировал так. Так, можно чрутиться.

Sapetuko ★★
() автор топика
Последнее исправление: Sapetuko (всего исправлений: 1)
Ответ на: комментарий от sigurd

и вот, офф страница федоры, там в разделе уефи и граб про grub2-install не было(в разделах где про легаси биос и про добавление других ос - там есть а мне это не нужно совсем поэтому читать не стал) https://docs.fedoraproject.org/en-US/quick-docs/grub2-bootloader/

Все эти факторы.. и забыл про граб2 инсталл, тем паче я никогда не ставил граб(разве что пару раз в арче). Всегда помогало set prefix.. и граб мкконфиг..

Sapetuko ★★
() автор топика
Последнее исправление: Sapetuko (всего исправлений: 3)
Ответ на: комментарий от sigurd

не то.
# grub2-install /dev/sda1 grub2-install: error: this utility cannot be used for EFI platforms because it does not support UEFI Secure Boot.
Плюс на сайте русскоязычной федоры нашел такое: dnf reinstall grub2\* shim

Теперь в папке федоры на ESP разделе стало больше файлов:

ls /boot/efi/EFI/fedora/
BOOTX64.CSV  gcdx64.efi    grubx64.efi  shim.efi
gcdia32.efi  grubia32.efi  mmx64.efi    shimx64.efi

Ещё вот на мкконфиг такое сейчас выдаёт:

# grub2-mkconfig -o /boot/grub2/grub.cfg
/usr/sbin/grub2-probe: error: cannot find a device for / (is /dev mounted?).

А ведь всё делаю как раньше(раньше мкконфиг срабатывал) за исключением что теперь команда chroot /mnt не работает, ругается на отсутсвие бин баш, теперь нужно чрутится так: chroot /mnt/root/

Sapetuko ★★
() автор топика
Ответ на: комментарий от Sapetuko

Плюс на сайте русскоязычной федоры нашел такое: dnf reinstall grub2* shim

вы почитайте что такое dnf reinstall - это восстановление содержимого пакета, если вы удалили часть его файлов руками.

По поводу монтирования - то, что я писал выше - это для ext4. Для btrfs легко гуглится команда монтирования subvolume.
Т.е вам нужно mount /dev/sda3 /mnt -o subvol=root

Ну и после chroot посмотрите, что куда смонтировано (например командой df)

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 2)
Ответ на: комментарий от sigurd

mount /dev/sda3 /mnt -o subvol=root и правда, теперь в /mnt лежат сразу системные файлы федоры, дальше:

mount --bind /dev /mnt/dev/
mount -t proc /proc /mnt/proc/
mount -t sysfs /sys /mnt/sys/
mount -t tmpfs /tmpfs /mnt/run/
chroot /mnt
mount /dev/sda1 /boot/efi
grub2-mkconfig -o /boot/grub2/grub.cfg
dnf reinstall grub2-efi grub2-efi-modules shim
dnf install grub2-efi grub2-efi-modules shim
grub2-mkconfig -o /boot/grub2/grub.cfg

успешно, дальше пробую:

grub2-install /dev/sdb1
grub2-install: error: this utility cannot be used for EFI platforms because it does not support UEFI Secure Boot.

Что видимо так и должно быть, снова на всякий снова:

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

и перезагрузка и снова тоже самое, баш минимал лайк выходит. Как обычно пробую:

set root=(hd*,gpt*)
set prefix=(hd*,gpt*)/root/boot/grub/
insmod normal
normal

set root=(hd*,gpt*)
set prefix=(hd*,gpt*)/boot/grub/
insmod normal
normal

(hd*,gpt*) - это именно раздел с федорой, смотрел с ls / и там был root

Экран всего лишь мигает и очищается, больше ничего.

Refind кстати подхватывает федору и загружает его но идут список команд.. и система зависает, если нажать CTRL+ALT+T то видим три точки, анимация немного идет и снова ничего не происходит, CTRL+ALT+F1.. не работает, но это уже 99% новеау глючный.
Потому что ранее я в грабе(когда он ещё работал) дописывал во время запуска в параметры ядра nouveau.modeset=0 и система успешно грузилась, без этого все зависало точно как сейчас при загрузке с refind.
В refind у меня не получилось отключить nouveau(я пробовал во время загрузки дописывать, пробовал в /boot/refind_linux.conf дописать nouveau.modeset=0 или nomodeset но ничего не меняется).
Дрова на нвидию не установлены.

Sapetuko ★★
() автор топика
Последнее исправление: Sapetuko (всего исправлений: 1)

У меня grub-install:

which grub-install
/usr/sbin/grub-install

GRUB-INSTALL(8):

--target=TARGET
              install  GRUB  for  TARGET platform [default=i386-pc]; available targets: arm-core‐boot,  arm-efi,  arm-uboot,  arm64-efi,  i386-coreboot,  i386-efi,   i386-ieee1275, i386-multiboot,  i386-pc,  i386-qemu,  i386-xen,  i386-xen_pvh, ia64-efi, mips-arc, mips-qemu_mips, mipsel-arc,  mipsel-loongson,  mipsel-qemu_mips,  powerpc-ieee1275, riscv32-efi, riscv64-efi, sparc64-ieee1275, x86_64-efi, x86_64-xen

Т.е., как выше написали, может просто выполнить:

grub-install --target=x86_64-efi /dev/sda

Инсталляция в sda1 для меня выглядит странно.

forest22
()
Ответ на: комментарий от Sapetuko

grub2-install: error: this utility cannot be used for EFI platforms because it does not support UEFI Secure Boot

Я не пробовал ставить загрузчик с активным Secure Boot - я его всегда отключаю в БИОС. Хотя с помощью подписанного shim должен вызываться grub и при активном Secure Boot.

Похоже, grub2-install /dev/sda нужен только для загрузки через Биос. Для UEFI достаточно копирования файлов в /boot/efi, которое выполняют post-install скрипты по команде dnf reinstall

sigurd ★★★★★
()
Ответ на: комментарий от forest22

sda - это же сам диск, давно еще когда mbr диски были то загрузчик туда прописывался,в начало диска, сейчас всё в файлах - есп раздел(как правило sda1) где ефи файлы, дальше уже идут разделы с операционной системой.

which grub-install
/usr/bin/which: no grub-install in (/root/.local/bin:/root/bin:/home/liveuser/.local/bin:/home/liveuser/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin)
grub2-install --target=x86_64-efi /dev/sda1
grub2-install: error: this utility cannot be used for EFI platforms because it does not support UEFI Secure Boot.

Sapetuko ★★
() автор топика
Ответ на: комментарий от sigurd

Странно да, в есп разделе есть(то есть уже появилась) папка федоры а внутри все необходимое. Сам же есп раздел монтируется в /boot/efi

Попробую выключить секурбуут и заново все..

Sapetuko ★★
() автор топика
Ответ на: комментарий от sigurd

какой же этот граб.. по моему нужно просто переустановить систему, всю федору.
Отключение Secure Boot ничего не поменяло.
Затем в папке /efi/boot/ была папка grub2 тут кстати тоже бардак, где то граб где то граб2.. В итоге я скопировал туда же эту папку как grub и

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

И теперь в баш минимал лайк после

set root=(hd*,gpt*)
set prefix=(hd*,gpt*)/root/boot/grub/
insmod normal
normal

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

Федора все равно не грузится. Либо - you are in emergency mode…Ентер и далее starting default.target

Либо - booting a command list
error ../../куча грабовых путей/shim lock protocol not found error ../../куча грабовых путей/you neet to load kernel first

press any key)

какой же этот граб кривущщий, почему рефайнд без проблем загружает федору а граб тупит на ровном месте? Ненавижу граб

Sapetuko ★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

сейчас в лайвке из под чрута попробовал:

grub2-install --target=x86_64-efi --bootloader-id=fedora2 --efi-directory=/boot/efi
grub2-install: error: this utility cannot be used for EFI platforms because it does not support UEFI Secure Boot.

секурбоот отключён, диск гпт, есп раздел, легаси ксм отключен, всё как обычно.

И снова пробую как на сайте федоры https://docs.fedoraproject.org/en-US/quick-docs/grub2-bootloader/

dnf reinstall grub2-efi grub2-efi-modules shim
dnf install grub2-efi grub2-efi-modules shim

grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found Arch Linux on /dev/sda4
Adding boot menu entry for UEFI Firmware Settings ...
done

Sapetuko ★★
() автор топика
Последнее исправление: Sapetuko (всего исправлений: 4)
Ответ на: комментарий от LongLiveUbuntu

всё точно так же как и в предыдущий раз Fedora, не устаналивается grub, btrfs. (комментарий) ума не приложу что ему ещё надо этому грабу? В прошлый раз я забыл добавить - делаеш сет рут и сет префикс.. грабгрузится, запускаеш федору и там сначало долго так загрузка идёт с анимацией загрузки венды(кругляшка крутится) а уже потом кидает в emergency mode.

Проблема в том что я умею в грабе запустить систему без новеау а в Refind не умею. Так то Refind без проблем все спокойно запускает но и тут подлянка потому что noveau глючная крепко так вшита во многие дистры.

Sapetuko ★★
() автор топика
Последнее исправление: Sapetuko (всего исправлений: 2)

Рефайнд так и не запустил систему без нувеау и я поехал к другу, притащу видеокарту амд, Refind загружает систему но из за nouveau линукс не работает на нвидии, встройки нет, а граб кривой не работает.. Поэтому поставлю карту амд и удостоверюсь что сама федора в полной порядке.

Sapetuko ★★
() автор топика

Я вспомнил что переносил раздел ESP на другой диск.

Итак принес амд карту, рефайнд тоже не смог запустить федору.

Выяснилось следующее - если достаточно долго прождать когда загрузка останавливается(на systemd virtual host started или как то так) то начинают идти логи ошибки типа drucut-initqueue.. и внизу в конце пишет что наш UUID диск не существует, и что входим в емергенси моде и просят нажать на CTRL+D

Там нас просят сделать regenerate initframefs

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

dracut --regenerate-all --force
dracut -v -f
Sapetuko ★★
() автор топика

также попробовал btrfs check и btrfs filesystem defrag -czstd -rv / /mnt

Как обычно, никаких ошибок не показало и после dracut -v -f тоже пишет что инитфраме создан, мол все в порядке

anonymous
()
Ответ на: комментарий от Sapetuko
root@localhost-live:/# dracut --force --regenerate-all
dracut: No '/dev/log' or 'logger' included for syslog logging

root@localhost-live:/# dracut -v -f
dracut: No '/dev/log' or 'logger' included for syslog logging
dracut: Executing: /usr/bin/dracut -v -f
dracut: dracut module 'busybox' will not be installed, because command 'busybox' could not be found!
dracut: dracut module 'rngd' will not be installed, because command 'rngd' could not be found!
dracut: dracut module 'connman' will not be installed, because command 'connmand' could not be found!
dracut: dracut module 'connman' will not be installed, because command 'connmanctl' could not be found!
dracut: dracut module 'connman' will not be installed, because command 'connmand-wait-online' could not be found!
dracut: dracut module 'network-wicked' will not be installed, because command 'wicked' could not be found!
dracut: dracut module 'dmraid' will not be installed, because command 'dmraid' could not be found!
dracut: dracut module 'biosdevname' will not be installed, because command 'biosdevname' could not be found!
dracut: *** Including module: bash ***
dracut: *** Including module: systemd ***
dracut: *** Including module: systemd-initrd ***
dracut: *** Including module: systemd-sysusers ***
dracut: *** Including module: nss-softokn ***
dracut: *** Including module: dbus-broker ***
dracut: *** Including module: dbus ***
dracut: *** Including module: i18n ***
dracut: *** Including module: network-manager ***
dracut: *** Including module: network ***
dracut: *** Including module: ifcfg ***
dracut: *** Including module: drm ***
dracut: *** Including module: plymouth ***
dracut: *** Including module: kernel-modules ***
dracut: *** Including module: kernel-modules-extra ***
dracut: *** Including module: kernel-network-modules ***
dracut: *** Including module: rootfs-block ***
dracut: *** Including module: terminfo ***
dracut: *** Including module: udev-rules ***
dracut: Skipping udev rule: 40-redhat.rules
dracut: Skipping udev rule: 50-firmware.rules
dracut: Skipping udev rule: 50-udev.rules
dracut: Skipping udev rule: 91-permissions.rules
dracut: Skipping udev rule: 80-drivers-modprobe.rules
dracut: Skipping udev rule: 70-persistent-net.rules
dracut: *** Including module: dracut-systemd ***
dracut: *** Including module: usrmount ***
dracut: *** Including module: base ***
dracut: *** Including module: fs-lib ***
dracut: *** Including module: memstrack ***
dracut: *** Including module: shutdown ***
dracut: *** Including modules done ***
dracut: *** Installing kernel module dependencies ***
dracut: *** Installing kernel module dependencies done ***
dracut: *** Resolving executable dependencies ***
dracut: *** Resolving executable dependencies done ***
dracut: *** Hardlinking files ***
dracut: Mode:                     real
dracut: Method:                   sha256
dracut: Files:                    2456
dracut: Linked:                   149 files
dracut: Compared:                 0 xattrs
dracut: Compared:                 793 files
dracut: Saved:                    6.01 MiB
dracut: Duration:                 0.170305 seconds
dracut: *** Hardlinking files done ***
dracut: *** Generating early-microcode cpio image ***
dracut: *** Constructing AuthenticAMD.bin ***
dracut: *** Store current command line parameters ***
dracut: *** Stripping files ***
dracut: *** Stripping files done ***
dracut: *** Creating image file '/boot/initramfs-6.5.6-300.fc39.x86_64.img' ***
dracut: Using auto-determined compression method 'pigz'
dracut: *** Creating initramfs image file '/boot/initramfs-6.5.6-300.fc39.x86_64.img' done ***
anonymous
()
25 июня 2024 г.

Друг ты серьезно? Файлы на ESP являются частью пакета shim-x64 и для работы GRUB’а в этом случае grub2-install не требуется. Надо только чтобы в /boot/efi/EFI/fedora/grub.cfg было прописано где искать полный конфиг.

> rpm -ql shim-x64
/boot/efi/EFI/BOOT/BOOTX64.EFI
/boot/efi/EFI/BOOT/fbx64.efi
/boot/efi/EFI/fedora/BOOTX64.CSV
/boot/efi/EFI/fedora/mmx64.efi
/boot/efi/EFI/fedora/shim.efi
/boot/efi/EFI/fedora/shimx64.efi
/etc/dnf/protected.d/shim.conf

/boot/efi/EFI/fedora/grub.cfg генерируется послеустановочным скриптом пакета grub2-common (если я ничего не путаю), но можно создать и самому. В примере ниже @ является подтомом btrfs на который установлена система.

> tee <<EOF /mnt/boot/efi/EFI/fedora/grub.cfg
search --no-floppy --root-dev-only --fs-uuid --set=dev $(grub2-probe -t fs_uuid -d /dev/vda3)
set prefix=(\$dev)/@/boot/grub2
export \$prefix
configfile \$prefix/grub.cfg
EOF

По токому же принципу работает shim-signed в бубунте и её потомках. Только там grub-install, копирует подписанные бинарники на ESP. Как раз по этой причине в минте захардкодили GRUB_DISTRIBUTOR=ubuntu (чтобы путь на ESP соответствовал тому что зашит в бинарнике груба – \EFI\ubuntu\grub.cfg) и патчат grub.cfg при загрузке системы (привет ubuntu-system-adjustments), а ведь могли просто использовать параметр --bootloader-id=ubuntu.

anonymous
()
Ответ на: комментарий от anonymous

Ещё дополню про grub-rescue. В данном случае прописывать normal бесмысленно надо было configfile /path/to/grub.cfg или делать полностью ручной запуск.

> set root=(hd0,gpt3)
> set prefix=($root)/@/boot/grub2
> set gfxmode=auto
> linux /@/boot/vmlinuz-6.9.5-200.fc40.x86_64 root=/dev/vda3 rootflags=subvol=@ ro
> initrd /@/boot/initramfs-6.9.5-200.fc40.x86_64.img
> boot
anonymous
()
Ответ на: комментарий от Sapetuko

обычно оно всегда помогает - прописывание вот этих сет руут и нормал

Ну может быть оно бы и помогло если бы ты указал правильный префикс (в твоем случае это ($root)/root/boot/grub2). Кстати на будущее ls в грубе не только диски показывает. Можно к примеру так.

> ls
(hd0,gpt1) (hd0,gpt2) (hd0,gpt3)
> set root=(hd0,gpt3)
> ls ($root)
@
> ls ($root)/@
bin boot dev etc home lib lib64 media ...
> ls ($root)/@/boot
efi grub2 ... initramfs-6.9.5-200.fc40.x86_64.im vmlinuz-6.9.5-200.fc40.x86_6
anonymous
()
Ответ на: комментарий от anonymous

Оу опять забыл сказать insmod в подписанных бинарниках grub’а не работает для безопасности, необходимы набор модов уже зашит в сам бинарник.

anonymous
()
Ответ на: комментарий от anonymous

я примерно по такой логике:

> ls
(hd0,gpt1) (hd0,gpt2) (hd0,gpt3)
> set root=(hd0,gpt3)
> ls /
root
> ls /root/
bin boot dev etc home lib lib64 media ...

И поэтому делал так:

set root=(hd*,gpt*)
set prefix=(hd*,gpt*)/*/boot/grub/
insmod normal
normal

Я уже не помню точно но так все работало.

Sapetuko ★★
() автор топика