Grub2-EFI на флэшке (Не хочет устанавливать prefix)

Софт под Linux, разные программы, но только связанные с Linux

Модератор: /dev/random

Ответить
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Grub2-EFI на флэшке

Сообщение yamah »

Решил сделать загрузочную флэшку с поддержкой Legacy и EFI.
Сделал соответсвующее разбиение:

Код: Выделить всё

Device        Start      End  Sectors  Size Type
/dev/sdk1      2048     6143     4096    2M BIOS boot
/dev/sdk2      6144   137215   131072   64M EFI System
/dev/sdk3    137216   399359   262144  128M Linux filesystem
/dev/sdk4    399360 17176575 16777216    8G Linux filesystem
/dev/sdk5  17176576 59119615 41943040   20G Linux filesystem
/dev/sdk6  59119616 60626910  1507295  736M Linux filesystem


Поставил в третий раздел Grub2 Legacy.
Загружается, выполняет grub.conf

Стал ставить Grub2-EFI.
Находясь в каталоге /usr/lib/grub/x86_64-efi, собрал образ

Код: Выделить всё

grub2-efi-mkimage -c /media/disk/boot/efi/EFI/BOOT/grub2-efi/grub.cfg -O x86_64-efi -o /media/disk/boot/efi/EFI/BOOT/grub2-efi/grub.efi -d /usr/lib/grub/x86_64-efi -p /grub2 \
$(find . -name '*.mod' -and -not -name "minix*" -and -not -name "affs*" -and -not -name "afs*" -and -not -name "bfs*" -and -not -name "md4*" -and -not -name "*amiga*" -and -not -name "sfs"| tr '\n' ' ' | sed -e 's/\.mod//g')

Модули, которые включил:

Код: Выделить всё

find . -name '*.mod' -and -not -name "minix*" -and -not -name "affs*" -and -not -name "afs*" -and -not -name "bfs*" -and -not -name "md4*" -and -not -name "*amiga*" -and -not -name "sfs"| tr '\n' ' ' | sed -e 's/\.mod//g'
./acpi ./adler32 ./ahci ./all_video ./aout ./appleldr ./at_keyboard ./ata ./backtrace ./bitmap ./bitmap_scale ./blocklist ./boot ./bsd ./btrfs ./bufio ./cat ./chain ./cmp ./configfile ./cpio ./cpio_be ./cpuid ./crc64 ./crypto ./cryptodisk \
./cs5536 ./date ./datehook ./datetime ./diskfilter ./dm_nv ./echo ./efi_gop ./efi_uga ./efifwsetup ./efinet ./ehci ./elf ./emuusb ./exfat ./exfctest ./ext2 ./extcmd ./fat ./fixvideo ./font ./fshelp ./functional_test ./gcry_arcfour ./gcry_blowfish \
./gcry_camellia ./gcry_cast5 ./gcry_crc ./gcry_des ./gcry_md4 ./gcry_md5 ./gcry_rfc2268 ./gcry_rijndael ./gcry_rmd160 ./gcry_seed ./gcry_serpent ./gcry_sha1 ./gcry_sha256 ./gcry_sha512 ./gcry_tiger ./gcry_twofish ./gcry_whirlpool \
./geli ./gettext ./gfxmenu ./gfxterm ./gptsync ./gzio ./halt ./hashsum ./hdparm ./hello ./help ./hexdump ./hfs ./hfsplus ./http ./iorw ./iso9660 ./jfs ./jpeg ./keylayouts ./keystatus ./ldm ./linux ./linuxefi ./loadbios ./loadenv ./loopback \
./ls ./lsacpi ./lsefimmap ./lsefisystab ./lsmmap ./lspci ./lssal ./luks ./lvm ./lzopio ./mdraid09 ./mdraid09_be ./mdraid1x ./memdisk ./memrw ./minicmd ./mmap ./msdospart ./multiboot ./multiboot2 ./net ./newc ./nilfs2 ./normal ./ntfs \
./ntfscomp ./odc ./ohci ./part_acorn ./part_apple ./part_bsd ./part_dvh ./part_gpt ./part_msdos ./part_plan ./part_sun ./part_sunpc ./parttool ./password ./password_pbkdf2 ./pata ./pbkdf2 ./play ./png ./priority_queue ./probe ./raid5rec \
./raid6rec ./read ./reboot ./regexp ./reiserfs ./relocator ./romfs ./scsi ./search ./search_fs_file ./search_fs_uuid ./search_label ./serial ./setjmp ./setpci ./sfs ./sleep ./squash4 ./tar ./terminal ./terminfo ./test ./test_blockarg ./testload ./tftp \
./tga ./time ./trig ./true ./udf ./ufs1 ./ufs2 ./uhci ./usb ./usb_keyboard ./usbms ./usbserial_common ./usbserial_ftdi ./usbserial_pl2303 ./usbtest ./video ./video_bochs ./video_cirrus ./video_fb ./videoinfo ./videotest ./xfs ./xnu ./xnu_uuid \
./xzio ./zfs ./zfscrypt ./zfsinfo


Содержимое файла /media/disk/boot/efi/EFI/BOOT/grub2-efi/grub.cfg

Код: Выделить всё

search.fs_uuid a0624e8b-faf1-4282-9455-5794fbc0a43e root hd0,gpt3
set prefix=($root)/grub2
configfile $prefix/grub.cfg

UUID - раздела, где находится каталог grub2

Код: Выделить всё

/dev/sdk3: LABEL="Boot" UUID="a0624e8b-faf1-4282-9455-5794fbc0a43e" TYPE="ext3" PARTLABEL="Linux filesystem" PARTUUID="ffb4c58b-5661-4fb7-872b-193805eae2cd"

Что нахожится в разделе:

Код: Выделить всё

mount | grep sdk && pwd && ls -l
/dev/sdk4 on /media/disk type ext4 (rw,relatime,data=ordered)
/dev/sdk3 on /media/disk/boot type ext3 (rw,relatime,data=ordered)
/dev/sdk2 on /media/disk/boot/efi type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
/media/disk/boot
итого 29
drwxr-xr-x 3 root root 16384 янв  1  1970 efi/
drwxr-xr-x 6 root root  1024 янв 20 19:32 grub2/
drwx------ 2 root root 12288 янв 20 16:26 lost+found/


Все это я установил командой

Код: Выделить всё

grub2-efi-install --target=x86_64-efi --bootloader-id=grub --efi-directory=/media/disk/boot/efi --boot-directory=/media/disk/boot --removable /dev/sdk


В UEFI-режиме флэшка загружается. Но Grub2 выдает ошибку "prefix not set" две строки и зависает. На клавиатуру не откликается.

В связи с этим у меня два вопроса:
1. Как заставить Grub2 находить нужный раздел с рабочим каталогом GRUB2?
2. Какие модули можно, или даже нужно еще выкинуть?
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Grub2-EFI на флэшке

Сообщение Bizdelnick »

Что-то вызывает у меня сомнения эта строчка:
yamah писал(а):
20.01.2017 19:13

Код: Выделить всё

search.fs_uuid a0624e8b-faf1-4282-9455-5794fbc0a43e root hd0,gpt3

По-моему, должно быть так:

Код: Выделить всё

search.fs_uuid --set root a0624e8b-faf1-4282-9455-5794fbc0a43e

И со встроенными конфигами, помнится, требовалась какая-то магия. Документации верить нельзя, приведённые в ней примеры неработоспособны — проверено. Там работает только очень ограниченный набор команд, вполне вероятно, что даже set в них не входит. Попробуйте не определять prefix, а указать путь непосредственно от ($root). К сожалению, сейчас не помню, где я об этом читал — может в рассылке, а может ещё где. И посмотреть написанный мной тогда работоспособный конфиг прямо сейчас возможности нет.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Re: Grub2-EFI на флэшке

Сообщение yamah »

Bizdelnick писал(а):
20.01.2017 22:52
Что-то вызывает у меня сомнения эта строчка:
yamah писал(а):
20.01.2017 19:13

Код: Выделить всё

search.fs_uuid a0624e8b-faf1-4282-9455-5794fbc0a43e root hd0,gpt3

По-моему, должно быть так:

Код: Выделить всё

search.fs_uuid --set root a0624e8b-faf1-4282-9455-5794fbc0a43e

И со встроенными конфигами, помнится, требовалась какая-то магия. Документации верить нельзя, приведённые в ней примеры неработоспособны — проверено. Там работает только очень ограниченный набор команд, вполне вероятно, что даже set в них не входит. Попробуйте не определять prefix, а указать путь непосредственно от ($root). К сожалению, сейчас не помню, где я об этом читал — может в рассылке, а может ещё где. И посмотреть написанный мной тогда работоспособный конфиг прямо сейчас возможности нет.

Такой конфиг у загрузчика дистрибутива,

Интересная вещь. Иправил конфиг так

Код: Выделить всё

search.fs_uuid a0624e8b-faf1-4282-9455-5794fbc0a43e root
if [ -e /grub2/grub.cfg ]; then
    set prefix=($root)/grub2
    configfile $prefix/grub.cfg
else
    echo "Could not find config file!"
    exho " root path" ($root)
fi

Но Груб все равно выдает ошибку. Хотя файла /grub2/grub.cfg быть не должно.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Re: Grub2-EFI на флэшке

Сообщение yamah »

Или grub2-efi-install что-то не то, или еще какая-то шняга.
В общем, скопировал с дистрибутива на раздел флешки, который выбран в качестве корневого раздела, /bin /sbin, /lib /lib64 создал каталоги и смонтировал туда одноименные из рабочей системы /dev /proc /sys /usr, создал на ней var/log /run tmp. Смонтировал в каталог boot на этом разделе, раздел, где будет у меня Grub жить, в нем смонтировал раздел с EFI. Иза пакета с grub-efi, вытащил каталог /boot/efi/EFI/DISTR/grub2-efi разместил в каталог /media/disk/boot/efi/EFI/BOOR/grub2-efi Черутнулся туда.и выполнил

Код: Выделить всё

grub2-efi-install --removable
.
И все заработало.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Grub2-EFI на флэшке

Сообщение Bizdelnick »

yamah писал(а):
21.01.2017 09:08
Такой конфиг у загрузчика дистрибутива,

Вы о котором именно конфиге? Я — о встроенном, который запихивается внутрь бинарника при посредстве опции -c здесь:
yamah писал(а):
20.01.2017 19:13

Код: Выделить всё

grub2-efi-mkimage -c /media/disk/boot/efi/EFI/BOOT/grub2-efi/grub.cfg -O x86_64-efi -o /media/disk/boot/efi/EFI/BOOT/grub2-efi/grub.efi -d /usr/lib/grub/x86_64-efi -p /grub2 \
$(find . -name '*.mod' -and -not -name "minix*" -and -not -name "affs*" -and -not -name "afs*" -and -not -name "bfs*" -and -not -name "md4*" -and -not -name "*amiga*" -and -not -name "sfs"| tr '\n' ' ' | sed -e 's/\.mod//g')
Отдельно лежащий конфиг должен обрабатываться нормально.

yamah писал(а):
21.01.2017 17:42
И все заработало.

Потому что там нет неправильного встроенного конфига.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Re: Grub2-EFI на флэшке

Сообщение yamah »

Bizdelnick писал(а):
21.01.2017 20:23
yamah писал(а):
21.01.2017 09:08
Такой конфиг у загрузчика дистрибутива,

Вы о котором именно конфиге?

Я о конфиге, который лежит рядом с EFI-ным загрузчиком непосредственно на EFI-ном разделе.
Bizdelnick писал(а):
21.01.2017 20:23
yamah писал(а):
21.01.2017 17:42
И все заработало.

Потому что там нет неправильного встроенного конфига.

Наверное, да. :)
Но тогда я вообще ничего не понимаю. :wacko:

Ладно. Так или иначе заставил грузится правильно.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Grub2-EFI на флэшке

Сообщение Bizdelnick »

yamah писал(а):
22.01.2017 17:40
Но тогда я вообще ничего не понимаю.

Ваша ошибка в использовании опции -c grub-mkimage (и, вероятно, в непонимании того, что именно она делает).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ответить