Сайт | Скачать | Видео | Wiki

Автор Тема: Загрузочная Super USB flash на GRUB2  (Прочитано 10443 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Загрузочная Super USB flash на GRUB2
« : 03 Октябрь 2019, 05:48:45 »
В интернете масса вариантов по созданию универсальных загрузочных флешек, но практически все они используют Grub4dos для загрузки mbr и Grub2 (или подобное) в качестве загрузчика EFI.

Я купил себе новую флешку и решил сделать ее с поддержкой гибридной загрузки mbr + EFI, загрузку установок операционных систем (попроще) и прочего полезного софта. Постараюсь изложить по порядку процедуру создания флешки, по возможности приведу команды которыми выполняются нужные действия. В интернете я подобного варианта организации мультизагрузки не встречал, есть только описания отдельных приемов, которые я и использовал в комплексе. Основным достоинством использования только grub2 является наличие единого файла конфигурации для EFI и MBR загрузки, минимум файлов самих загрузчиков, поддержка русского языка и унификация настройки.

1. Подготовка раздела. Так как флешка гибридная, то требуется создать таблицу разделов msdos и первичный раздел fat32 размером таким, чтобы на него поместились нужные операционные системы. Можно использовать Gparted или fdisk для создания разделов. Выставляем для раздела флаг Boot и через fdisk желательно задать тип раздела EF (указываем что это EFI раздел).
2. Размещение загрузчика EFI. Этот этап достаточно прост, создаем каталог EFI/BOOT и размещаем в нем файлы grub2:
Код
bootx64.efi - загрузчик grub2
grub.cfg - настройки и меню grub2 он будет использоваться и для grub-mbr
ter-u18n.pf2 - файл шрифта меню grub2, может быть заменен любым другим шрифтом формата pf2. Если не требуется руссификация, то файл можно не добавлять
ru.mo - руссификация grub2. Если не требуется руссификация, то файл можно не добавлять.
2.1 Создание bootx64.efi.  Этот файл я сделал самостоятельно используя grub-mkimage, пример моей команды:
Код
grub-mkimage --directory=/usr/lib/grub/x86_64-efi --compression=auto \
--config=/usr/share/grub/grub.cfg --verbose --prefix=/EFI/BOOT \
--output=grubx64.efi --format=x86_64-efi \
part_gpt part_msdos disk memdisk fat exfat lvm ext2 ntfs iso9660 normal gzio xzio test search configfile linux linux16 chain loopback echo efi_gop efi_uga file halt reboot ls true gfxterm gettext font
В таком виде результатом работы команды будет файл grubx64.efi который потом перименовывается в bootx64.efi.
/usr/share/grub/grub.cfg файл настроек который зашивается внутрь grubx64.efi, у меня сделано такое содержание:
Код
if [ -e /EFI/BOOT/grub.cfg ]; then
    set prefix=($root)/EFI/BOOT
    configfile ($root)/EFI/BOOT/grub.cfg
else
    search.file /grub.cfg root
    set prefix=($root)
    configfile ($root)/grub.cfg
fi
т.е. файл с настройками можно разместить или в EFI/BOOT или в корне.

« Последнее редактирование: 25 Октябрь 2019, 04:31:20 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re: Загрузочная Super USB flash на GRUB2
« Ответ #1 : 03 Октябрь 2019, 06:00:38 »
3. Размещение загрузчика MBR. В интернете очень мало толковой информации по размещению grub2 на флешке, много инструкций для размещения на жестких дисках, но либо на отдельном разделе, либо на ext2 разделе причем эти инструкции содержат команды типа grub-install и т.п. Я использовал более простой метод установки grub2. На моей флешке загрузчик grub2 размещается до начала первого раздела т.е. его не видно, повредить сложно и т.п. Такая возможность в grub2 предусмотрена и делается командой:
Код
grub-bios-setup -d. -b ./boot.img -c ./core.img /dev/sdb
где /dev/sdb флешка которую делаем загрузочной
3.1 файл boot.img - стандартный файл из комплекта grub2, это содержимое нулевого сектора диска. Есть еще файл boot_hybrid.img, но я не нашел описание в чем отличия между ними.
3.2 файл core.img - в интернете с трудом нашлась информация о том, что представляет из себя этот файл, оказалось что этот файл делается grub-mkimage только выходной формат файла выставляется другой. Я использовал команду:
Код
grub-mkimage --directory=/usr/lib/grub/i386-pc --compression=none \
--verbose --prefix=\(hd0,msdos1\)/EFI/BOOT \
--output=core.img --format=i386-pc \
part_gpt part_msdos biosdisk disk memdisk fat lvm ntldr exfat ext2 ntfs iso9660 gzio xzio test vbe vga normal search configfile linux linux16 chain loopback echo file halt reboot ls true gfxterm gettext font
Относительно команды создания загрузчика EFI, тут выставляется --format=i386-pc, добавляется возможность загружать ntldr и поддержка biosdisk. --prefix=\(hd0,msdos1\)/EFI/BOOT показывает где искать файлы конфигурации, локализации, шрифты и т.п. так как они у меня уже есть, все будет подхвачено. Но параметр --config тут не применим.

Также вместо grub-bios-setup можно использовать dd:
Код
dd if=/usr/lib/grub/i386-pc/boot.img of=/dev/sdb bs=446 count=1
dd if=./core.img of=/dev/sdb bs=512 seek=1
« Последнее редактирование: 14 Февраль 2020, 04:45:23 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re: Загрузочная Super USB flash на GRUB2
« Ответ #2 : 03 Октябрь 2019, 07:17:40 »
Данные три пункта при наличии уже созданных загрузчиков выполняются достаточно просто. Где разместить готовые файлы я пока не решил.

Дальнейшей моей задачей было сделать возможность запуска инсталяторов и livecd.
4. Примеры запуска различных систем:
4.1 Примеров запуска livecd c linux в интернете много. 
4.2 HBCD (Hiren boot cd) запускается только в режиме mbr т.к. EFI загрузчик не имеет поддержки ntldr.
Чтобы пункт меню показывался только в MBR загрузчике использовал пункт меню такого типа:
Код
if [ "${grub_platform}" = 'pc' ]; then
menuentry "Windows XP Hiren Boot CD" {
ntldr /hbcd/xp/xp.bin
}
fi
содержимое iso распаковано в каталог /hbcd.
4.3 В составе HBCD есть образ с комплектом DOS программ, его запуск я сделал используя memdisk из syslinux. Memdisk из EFI не срабатывает :(
Код
if [ "${grub_platform}" = 'pc' ]; then
menuentry "HBCD Dos utils" {
linux16 /EFI/BOOT/memdisk floppy raw
initrd16 /hbcd/Dos/hiren.ima
}
fi
4.4 Memtest есть возможность загружать и из EFI и из MBR режима, сделал пункт запуска такого вида:
Код
if [ "${grub_platform}" = 'efi' ]; then
    menuentry "Memtest86 EFI" {
chainloader /EFI/memtest86/BOOTX64.efi
    }
else
    menuentry "Memtest86 BIOS" {
linux16 /EFI/memtest86/memtest.gz
    }
fi
т.е. при EFI пункт будет одного вида, при MBR загрузке - другого вида.


« Последнее редактирование: 03 Октябрь 2019, 07:22:48 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re: Загрузочная Super USB flash на GRUB2
« Ответ #3 : 03 Октябрь 2019, 07:45:20 »
Кто дочитал до этого места, тот молодец. Самое интересное это запуск установщиков windows.
Если кратко, то winxp и win7 запускаются с проблемами т.к. их установщики не видят флешку. В интернете масса вариантов с использованием firadisk или интеграции драйверов в iso и wim файлы. Я первым делом сделал запуск установщика windows 10, т.к. проблем с драйверами для usb в нем нет, но т.к. я хотел чтобы вся windows 10 лежала в каталоге /wn10 (имя каталога 4 знака всего задается, если более длинное то процесс усложняется) без лишних каталогов в корне диска.
5. Установщик Windows 10
5.1 Создаем каталог из 4-х символов (например /wn10) и копируем в него содержимое iso.
5.1.1 Для запуска при загрузке из MBR потребуется исправить файлы bootmgr и BCD. Я использовал ZX_WBF_Changer в котором подменил пути по которым находятся файлы.
5.1.2 Для запуска при загрузке из EFI нужно воспользоваться рекомендациями из интернета и получить bootmgfw.efi поместить его в нужный каталог. Теперь надо создать еще один BCD используя ZX_WBF_Changer либо изменить существующий используя bcdedit.exe (он есть в составе ZX_WBF_Changer). В BCD меняем device и osdevice чтобы был наш исправленные путь [boot]/wn10/........
5.2 Пункт меню в загрузчике будет таким:
Код
if [ "${grub_platform}" = 'efi' ]; then
    menuentry "Установка Windows 10 EFI" {
chainloader /wn10/efi/microsoft/boot/bootmgfw.efi
    }
else
    menuentry "Установка Windows 10 BIOS" {
ntldr /wn10/bootmgr
    }
fi
5.3 Установка Windows 7 и Windows XP. Из iso c windows в отдельный каталог поместил файл install.wim (или install.esd). Я решил не заниматься всякими внедрениями драйверов, запускаю установщик windows 10 (winre тоже самое), перехожу в нем в Восстановлением системы - Командная строка и запускаю c:\wn10\WinNTsetup\WinNTsetup.exe (у меня флешка это диск C:\). WinNTsetup умеет ставить как win7 так и win xp. Содержимое iso Windows XP распаковал в отдельный каталог.
Для отдельной установки загрузчика или исправления загрузки, можно запустить bootice.exe.

На этом все цели достигнуты, перепечатка, копирование и дополнение разрешается.
модуль с минимальным набором Grub2, в /usr/lib/grub находятся готовые загрузчики упоминающиеся в тексте.
https://cloud.mail.ru/public/4zPi/3R3F2WZdK
« Последнее редактирование: 21 Октябрь 2019, 03:03:58 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн RoDoN

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 6286
  • Репутация: +141/-0
Re: Загрузочная Super USB flash на GRUB2
« Ответ #4 : 03 Октябрь 2019, 09:18:26 »
Отличный мануал, все сделано из под линукса, круто! Я себе жизнь упрощаю и загрузочную флешку чаще всего делаю из-под винды с помощью BOOTICE.
Может стоит статейку на вики запилить? Чтоб не потерялась
Lenovo G500 (i3-3110M, 8 Гб, Intel + Radeon HD 8570)
PRA 16.12 JWM, Runtu 22.04 x64 XFCE

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 34026
  • Репутация: +231/-0
    • PuppyRus-A
Re: Загрузочная Super USB flash на GRUB2
« Ответ #5 : 03 Октябрь 2019, 09:22:00 »
Серьезный мануал+. Не лучше ли будет перенести в вики?
По итогу - для наших исо что-то из описанного не  будет ли лучше, чем то, что используется с подачи Ильфата?

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re: Загрузочная Super USB flash на GRUB2
« Ответ #6 : 03 Октябрь 2019, 09:47:36 »
все сделано из под линукса, круто!
нет редактирование BCD и bootmgr из linux не сделать.

Если иметь готовые файлы загрузчика, то можно и под windows сделать флешку, но нужен какой-то аналог dd или редактор который считает 446 байт из boot.img и поместит их нулевой сектор флешки и тоже самое для core.img но начинать с первого сектора. (в bootice вроде бы есть такая функция, или не в нем, я забыл уже)
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re: Загрузочная Super USB flash на GRUB2
« Ответ #7 : 03 Октябрь 2019, 09:52:38 »
По итогу - для наших исо что-то из описанного не  будет ли лучше, чем то, что используется с подачи Ильфата?
для iso я сделал все похоже, но не так, это надо видеть, а показать пока не готовы.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн krasnyh

  • Ветеран
  • *****
  • Сообщений: 5356
  • Репутация: +140/-1
Re: Загрузочная Super USB flash на GRUB2
« Ответ #8 : 03 Октябрь 2019, 10:56:10 »
файл boot_hybrid.img, но я не нашел описание в чем отличия между ними.
Используется при создании iso командой grub-mkrescue. На выходе, наверно, так называемый гибридный iso, который можно писать на флешку с dd.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re: Загрузочная Super USB flash на GRUB2
« Ответ #9 : 03 Октябрь 2019, 11:04:04 »
Спасибо, это мне и надо в принципе. Завтра проверю.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн imp

  • cat /dev/ass > /dev/head
  • Ветеран
  • *****
  • Сообщений: 1725
  • Репутация: +49/-1
  • /dev/hands < /dev/ass
Re: Загрузочная Super USB flash на GRUB2
« Ответ #10 : 04 Октябрь 2019, 18:48:17 »
я одно не пойму. если используется grub4dos для загрузки grub2, а не наоборот, значит он должен держать uefi. не рви мне шаблон, Саша.
Компьютер имеет то преимущество перед мозгом, что им пользуются.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re: Загрузочная Super USB flash на GRUB2
« Ответ #11 : 05 Октябрь 2019, 02:43:14 »
я одно не пойму. если используется grub4dos для загрузки grub2, а не наоборот, значит он должен держать uefi. не рви мне шаблон, Саша.
В моем методе не используется grub4dos. И не держит он uefi. Шаблон восстановлен.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Coalxe

  • Пользователь
  • **
  • Сообщений: 92
  • Репутация: +3/-0
Re: Загрузочная Super USB flash на GRUB2
« Ответ #12 : 05 Октябрь 2019, 06:54:33 »
ter-u18n.pf2 - файл шрифта меню grub2, может быть заменен любым другим шрифтом формата pf2. Если не требуется руссификация, то файл можно не добавлять

Если цель не каллиграфия, родной unicode.pf2 справляется нормально с  руссификацией.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
  • Автор темы
Re: Загрузочная Super USB flash на GRUB2
« Ответ #13 : 05 Октябрь 2019, 07:10:17 »
Видимо неочень справляется, в арче например заменяют на другой, название забыл.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 34026
  • Репутация: +231/-0
    • PuppyRus-A
Re: Загрузочная Super USB flash на GRUB2
« Ответ #14 : 05 Октябрь 2019, 15:42:24 »
если используется grub4dos для загрузки grub2, а не наоборот, значит он должен держать uefi
Из grub4dos можно загрузить grub2 только при Legacy
grub4dos никак не загрузится в EFI

Из grub2 теоретически можно загрузить grub4dos. Чтобы одно меню было. При Legacy , вроде, не находит meni.lst - пока командой не загрузишь. В EFI не пробовал