<< К статьям по программированию микроконтроллеров
В интернете нашел много разных вариантов как сделать мультизагрузочную флешку с UEFI. Но везде кругом костыли. Всякие ухищрения, чтобы эта гремучая смесь заработала. Сейчас расскажу как сделать ее на базе GRUB2.
1. Для Windows пользователей
Сейчас существуют два стандарта загрузки mbr и UEFI. Grub2 поддерживает оба. Есть такой нюанс, загрузка в этих двух стандартах отличаются, и я выложу сюда два архива. В одном архиве файлы настроены так, что несмотря на то, какой стандарт загрузки использовался (mbr или UEFI), будет подгружаться один и тот же конфигурационный файл (:\boot\grub\grub.cfg) ссылкалибо же будут использованы разные файлы для mbr загрузки (:\boot\grub\grub.cfg) и для UEFI загрузки (:\efi\grub\grub.cfg) ссылка
Для того, чтобы сделать загрузочный диск, просто запускаем скрипт createdisk.bat от имени администратора.
Дальше указываем нашу флешку,
и она готова через минуту.
Скрипт сделан на основе небезызвестной программы RMpartUSB - части проекта RMprepUsb
2. Настройка GRUB2
Grub2 настраивается через файл /boot/grub/grub.cfg
Документация от archlinux: ссылка (русский)
Официальная документация: ссылка
Переменные обозначаются в GRUB2 с помощью $ когда вы к ним обращаетесь.
Примеры загрузки:
Загрузиться с диска 1
menuentry 'boot from hd1' {
set root=hd1
chainloader +1
}
menuentry "Windows 7" {
search -s root --file /bootmgr
ntldr /bootmgr
}
первая комманда ищет раздел с файлом /bootmgr и загружает его
аналогично для загрузки windows 8 UEFI
menuentry "Windows 8 UEFI" {
search --file --no-floppy --set=root /efi/Microsoft/Boot/bootmgfw.efi
chainloader /efi/Microsoft/Boot/bootmgfw.efi
}
menuentry "Arch Linux" {
linux /boot/vmlinuz-linux root=LABEL=Arch_root rw
initrd /boot/initramfs-linux.img
}
Заметьте, что необходимо передать в ядро параметры. Например, root=... В данном примере используется метка тома. Но возможно например указать его UUID
Если вам нужно загрузить ISO файл из GRUB2 то вот тут есть примеры (ссылка). Нужно смонтировать iso файл в loopback устройство и так же запустить ядро. В прниципе, с теми же параметрами, что оно вызывается в iso файле. Например:
menuentry 'ISO Ubuntu ' {
set isofile="/iso/ubuntu-12.04-desktop-amd64.iso"
loopback loop (hd0,5)$isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
initrd (loop)/casper/initrd.lz
}
Если вы хотите например загрузить PARTED MAGIC. его версия 2015_03_06 ищет файл \pmagic\pmodules\PMAGIC_2015_03_06.SQFS Вытащите его из образа и скопируйте на флешку. В эти же каталоги. так же нужно вытащить ядро и initrd файл. И запустить их например этими командами
linux /pmagic/bzImage edd=on vga=normal
initrd /pmagic/initrd.img /pmagic/fu.img /pmagic/m32.img
или же еще скопировать grub.cfg и вызвать его:
configfile /EFI/boot/grub.cfg
запустить например GRUB4DOS
menuentry "Grub4Dos" {
linux /boot/grub.exe --config-file=/boot/grub/menu.lst
}
3. Установка из Linux
Установить GRUB2 на флещку:
sudo grub-install --recheck --root-directory=/run/media/user/8260-A46C2 /dev/sdb
конечно, параметры нужно указать от своей системы. Все что после media. Важно правильно задать путь до флешки. без сокращений * и туда, куда она впервые примонтирована. А то GRUB2 выдаст ошибку.
собрать EFI образ:
grub-mkimage --compress=xz -O x86_64-efi -d /usr/lib/grub/x86_64-efi
-o /home/user/bootx64.efi -p "/boot/grub" part_gpt part_msdos
ntfs ntfscomp hfsplus fat ext2 normal chain boot configfile linux
multiboot efi_gop efi_uga font gfxterm
файл будет в /home/user.
опция -p "/boot/grub" говорит о том откуда будет читаться config файл и дополнительные модули, дальше перечисление встроенных модулей.
чтобы собрать efi файл, в который встроена и конфигурация и модули делаем так:
mkdir -p /tmp/grub.temp/boot/grub
создаем /tmp/grub.temp/boot/grub/grub.cfg
cd /tmp/grub.temp/
grub-mkstandalone --directory="/usr/lib/grub/x86_64-efi/" --format="x86_64-efi" --compress=xz --output=/home/user/bootx64.efi boot/grub/grub.cfg
почему то важен относительный путь boot/grub/grub.cfg
и потом нужно для архитектуры x86_64 скопировать /usr/lib/grub/x86_64-efi в /boot/grub/
Простите, я являюсь виндопользователем (качать образ бубна и дебиан неохота) и я хочу грузить ISO-файлы. для этого (как я понял), мне необходимы файлы vmlinuz и initrd.lz (это, как я понял, ядра системы???). Главный вопрос - не поделитесь этими файлами? Или где мне их скачать?
ОтветитьУдалитьДобрый день, те файлы, которые вы перечислили - это система инициализации linux. Если вы хотите грузить из образа именно линукс систему, то вам нужны файлы инициализации именно того образа, который вы собрались подгружать.
ОтветитьУдалитьБлагодарю! Очень полезная статья с примерами. Помогла мне разобраться что и как делать. Раньше делал флешки на grub4dos, теперь он старал неактуален из-за этого uefi. Одно непонятно. Хотел обновить refind_x64.efi до последней версии, но он отказывается стартовать из Grub2. Вероятно автор знает какую-то хитрую команду, чтобы его самому собрать для этой цели, как это делает grub-mkimage? :) Архив для тестирования использовал grub2sep.zip
ОтветитьУдалитьСпасибо. А зачем refind запускать из grub? не легче его установить напрямую?
Удалитьу меня archlinux и там довольно приличная wiki. Вот статья по refind https://wiki.archlinux.org/index.php/rEFInd
Сам я им не занимался, если честно.
Так а может проблема в GRUB2? и нужно просто собрать свежий?
Если нужно, могу собрать его.
Вот и я тож потом подумал "а зачем refind?" ... просто на горизонтальное меню загляделся. :)
УдалитьОсновываясь на Вашей инструкции и примерах, собрал всю флешку на чистом grub2. Теперь грузится по mbr и uefi. Модули grub2 для efi тож собрал под свои нужды (командой "grub-mkimage") - bootx64.efi и добавил bootia32.efi (у жены нетбук 32 битный). Тему соорудил свою, в общем удобно и красиво получилось - супер универсальная EFI-x86 - EFI-x64 - MBR флеха. :)
После того, как разобрался с grub2, тоже не понимаю зачем костыли прикручивать, если все можно сделать средсвами grub2 ...
Этот комментарий был удален автором.
УдалитьКстати, у меня на grub4dos gfxmenu анимашка с пингвинами бегала. Симпатишная такая ... вот бы ее прикрутить к grub2 ... Вы не знаете КАК?
УдалитьХочу сказать, что ненавижу всякие инструкции читать, я и так понятливый, пару языков программирования выучил не читая инструкции всякие. :) Примерчик бы живой или это из области unreal? ...
Вот и славненько ^_^.
УдалитьЧестно говоря, я не слышал про анимацию в grub2. Но моя специальность - электроника, я могу и не знать этого. А статью написал, чтобы в том числе самому не забыть. Если хотите какой-то свой вариант флешки скинуть, могу выложить здесь.
может, кстати просто для rfind нужен модуль какой-то дополнительно в Grub2
ОтветитьУдалитьЕсли тема загрузки rEFInd из Grub2 кому-то еще актуальна, то у меня под EFI это работает так:
ОтветитьУдалитьsearch --fs-uuid --no-floppy --set=root 244C-62FA
chainloader (${root})/EFI/Microsoft/Boot/refind.efi
Я это дописал это в "грубый.конфиг" ручками, но в зависимости от того, как был установлен Grub2, в каждом конкретном случае могут быть и более правильные решения (чтобы запись не слетала при обновлениях).
Как добавить в grub.cfg установку windows 10
ОтветитьУдалитьЧтобы загрузка шла из iso образа
УдалитьДобрый день!
ОтветитьУдалитьВ скрипте createdisk.bat у вас есть команда:
RMPARTUSB DRIVE=%drive% FAT32 USBHDD VOLUME=GRUB2DISK
Ни в одном описании синтаксиса утилиты RMPARTUSB я не нашёл упоминания об "USBHDD". Что делает это включение?
Я полагаю, что отформатировать как USB HDD. Может быть в новых версиях нет такого ключа?
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьДобрый день.
ОтветитьУдалитьПодскажите пожалуйста как добавлять образы на флешку (какие нужны папки с ISO образа) win7/win8.1/win10/winsrv2016
Можно ли оживить систему опенсусе, загрузчик которого сам из за конфликта с обновлением удалил. Там груб2 в отдельном физическом разделе, а система на LVM. Используются снапшоты, но не могу никак загрузить систему, чтобы лечить. Live CD, USB-образы не помогают, из них не узнает и не найдет папку x86_64_efi , a из винды решения не найду пока, линукс на GPT, win7 на MBR на другом HDD. Ваш метод позволит мне из вин7 создать флешку с груб2 и из него загрузить не образ нового линукса, а мой опенсусе, где много настроил и сайт лежит на сервере, а резервную копию пока там не делал. Советуйте мне что нибудь, чтобы не переустановить, а лечить систему. Заранее спасибо.
ОтветитьУдалитьФлэшка вместо exFAT или NTFS форматится в FAT32 - что исключает размещение на ней больших файлов (( Как быть?
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалить
ОтветитьУдалитьсемена адениума и плюмерии
2