User Tools

Site Tools


Sidebar


Здравствуйте!

Меня зовут Михаил!
Я системный администратор
и наполняю эту wiki,
решая разнообразные IT-задачки.

Моя специализация - виртуализация!

Я всегда готов помочь Вам
наладить IT-инфраструктуру
за скромное вознаграждение!

mike@autosys.tk
+7 (910) 911-96-23

linux_faq:universal_multiboot_grub_bios_uefi

Универсальная загрузочная флешка для BIOS/UEFI

По мотивам https://wiki.archlinux.org/index.php/Multiboot_USB_drive#Hybrid_UEFI_GPT_.2B_BIOS_GPT.2FMBR_boot
На Ubuntu надо поставить такое:

sudo add-apt-repository universe
sudo apt-get install grub-efi-amd64-bin exfat-fuse exfat-utils

И потом переразметить полностью диск. Создадим четыре раздела.

  1. Hаздел с данными, на котором будут лежать ISO-образы и конфигурация grub.
  2. Раздел 8Gb для распакованного дистрибутива Windows (или образа WinPE).
  3. Загрузочный раздел EFI (размер - 48 Мб).
  4. Загрузочный раздел BIOS (размер 1 Мб).
disk='/dev/sdX'
disk_size=`expr $(sudo sgdisk -p $disk | awk '/Disk \// {print($3)}')`
sudo sgdisk --zap-all $disk
sudo sgdisk --mbrtogpt --clear $disk
sudo sgdisk --new=1:2048:$(expr $disk_size - 16877568) $disk
sudo sgdisk --typecode=1:0700 $disk
sudo sgdisk --new=2:$(expr $disk_size - 16875520):$(expr $disk_size - 102401) $disk
sudo sgdisk --typecode=2:0700 $disk
sudo sgdisk --new=3:$(expr $disk_size - 102400):$(expr $disk_size - 4097) $disk
sudo sgdisk --typecode=3:EF00 $disk
sudo sgdisk --new=4:$(expr $disk_size - 4096):$(expr $disk_size - 34) $disk
sudo sgdisk --typecode=4:EF02 $disk
sudo sgdisk --attributes=4:set:2 $disk

Отформатируем разделы и смонтируем их.
Разделы с данными будем форматировать в NTFS. Это позволит работать с флехой из-под Windows и заливать большие файлы (больше 4-х Гб).
Как ни странно, и KNOPPIX и SystemRescueCD нормально загрузились!!!
Стоит отметить, что при использовании ntfs-3g, запись на разделы отформатированные в NTFS в Linux происходит гораздо медленнее, чем на разделы FAT32 или ExFAT. Однако, с этим можно смириться - ведь образы заливаешь один раз, но при этом - сохраняется возможность работать с флехой под виндой и загружаться с больших образов.

sudo mkfs.vfat -F 32 ${disk}3
sudo mkfs.ntfs -f ${disk}1
sudo mkfs.ntfs -f ${disk}2

sudo mkdir /mnt/usb_efi
sudo mkdir /mnt/usb_data/

sudo mount  -o async,big_writes,noatime ${disk}1 /mnt/usb_data/
sudo mount ${disk}3 /mnt/usb_efi/

Установим grub и EFI:

sudo grub-install --target=x86_64-efi --recheck --removable --efi-directory=/mnt/usb_efi/ --boot-directory=/mnt/usb_data/boot-grub --verbose
sudo grub-install --target=i386-pc --recheck --boot-directory=/mnt/usb_data/boot-grub $disk --verbose

Ну и дальше настраиваем grub, редактируя файлик /mnt/usb_data/boot-grub/grub/grub.cfg:

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

menuentry "KNOPPIX_V8.2-2018-05-10-EN LiveCD" {
loopback loop /KNOPPIX_V8.2-2018-05-10-EN.iso
linux (loop)/boot/isolinux/linux bootfrom=/KNOPPIX_V8.2-2018-05-10-EN.iso keyboard=us language-us
initrd (loop)/boot/isolinux/minirt.gz
}

menuentry "KNOPPIX_V7.2.0CD-2013-06-16-EN LiveCD" {
loopback loop /KNOPPIX_V7.2.0CD-2013-06-16-EN.iso
linux (loop)/boot/isolinux/linux bootfrom=/KNOPPIX_V7.2.0CD-2013-06-16-EN.iso keyboard=us language-us
initrd (loop)/boot/isolinux/minirt.gz
}

menuentry "SystemRescueCd 5.3.1 Live (64bit, cache all files in memory and startX)" {
 loopback loop /systemrescuecd-x86-5.3.1.iso
 linux (loop)/isolinux/rescue64 isoloop=/systemrescuecd-x86-5.3.1.iso setkmap=us docache dostartx
 initrd (loop)/isolinux/initram.igz
}

menuentry "SystemRescueCd 5.3.1 Live (64bit, default boot options)" {
 loopback loop /systemrescuecd-x86-5.3.1.iso
 linux (loop)/isolinux/rescue64 isoloop=/systemrescuecd-x86-5.3.1.iso setkmap=us
 initrd (loop)/isolinux/initram.igz
}

menuentry "SystemRescueCd 5.3.1 Live (32bit, default boot options)" {
 loopback loop /systemrescuecd-x86-5.3.1.iso
 linux (loop)/isolinux/rescue32 isoloop=/systemrescuecd-x86-5.3.1.iso setkmap=us
 initrd (loop)/isolinux/initram.igz
}

Загрузка образов дискет (FreeDOS, MemTest, MHDD, etc...)

В образе SystemRescueCD в папке /bootdisk есть образы дискет DOS с разными утилитами. Пока что мне не удалось запустить ни один из таких образов. Однако, известно, что для их запуска используется утилита memdisk, которая лежит в папке /isolinux.
Немного информации есть тут: https://www.linux.org.ru/forum/general/9653654
Общий принцип - в качестве ядра указывается memdisk, а в качестве initrd - образ дискеты

linux16 (loop)/isolinux/memdisk
initrd16 (loop)/isolinux/fdboot.img

Установка Windows с такой UEFI-флешки

Стандартный способ загрузки Windows из grub на такой флешке не работает!

menuentry "Windows 10 Installer" {
    insmod ntfs
    search --set=root --file /bootmgr
    ntldr /bootmgr
    boot
}

Оказалось, что bootmgr, используемый для загрузки компьютеров с BIOS не загружается с GPT-разделов. С GPT-разделов может загружаться только bootx64.efi, для работы которого нужен EFI.
Если попытаться загрузить bootmgr с такой флешки, то комп просто перезагрузится. Без всяких сообщений.
Вариантов загрузки Windows на BIOS-компьютере с GPT-диском несколько.
Первый - DUET (Developer’s UEFI Environment). В этом случае, сначала загружается эмулятор EFI, который загружает bootx64.efi.
Второй - использование режима hybrid MBR. Это можно сделать утилитой gdisk.

Hybrid MBR - гибридный MBR

https://www.rodsbooks.com/gdisk/hybrid.html
Обычный GPT-диск имеет запись MBR с единственным разделом типа 0xEE (EFI GPT), внутри которого размещаются разделы GPT.
Гибридный MBR, помимо основного раздела типа 0xEE (EFI GPT) может содержать сведения о дополнительных (до трех штук) разделах, границы которых совпадают с границами разделов, описанных в GPT.
Таким образом, операционки и утилиты, которые не знают ничего про GPT смогут работать и с GPT-разделов. Просто сведения о них они будут получать из MBR.
Очень важно, не давать таким утилитам и операционкам изменять таблицу разделов. В противном случае - они просто порушат GPT.
Такая конфигурация не описана стандартами и разные ОС обрабатывают её по разному. Поведение различных ОС при встрече с таким чудом описано тут.
В двух словах - диск с гибридизированными разделами нельзя модифицировать утилитами, которые к этому не готовы (fdisk).

https://wiki.gentoo.org/wiki/BIOS_Update/ru#.D0.A1.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B7.D0.B0.D0.B3.D1.80.D1.83.D0.B7.D0.BE.D1.87.D0.BD.D0.BE.D0.B3.D0.BE_.D1.84.D0.BB.D1.8D.D1.88_.D0.BD.D0.B0.D0.BA.D0.BE.D0.BF.D0.B8.D1.82.D0.B5.D0.BB.D1.8F https://lorwiki.org.ru/wiki/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D1%84%D0%BB%D0%B5%D1%88%D0%BA%D0%B8_SystemRescueCd_%D1%81_GRUB

http://woshub.com/booting-windows-7-from-a-gpt-disk-using-bios-firmware-non-uefi/#h2_2

sudo sgdisk --zap-all /dev/sdX
sudo sgdisk --mbrtogpt --clear /dev/sdX
sudo sgdisk --new=1:2048:4095 /dev/sdX
sudo sgdisk --typecode=1:EF02 /dev/sdX
sudo sgdisk --attributes=1:set:2 /dev/sdX
sudo sgdisk --new=2:4096:106495 /dev/sdX
sudo sgdisk --typecode=2:EF00 /dev/sdX
sudo sgdisk --new=3:106496:$(expr $(sudo sgdisk -p /dev/sdX | awk '/Disk \// {print($3)}') - 34) /dev/sdX
sudo sgdisk --typecode=3:0700 /dev/sdX


Discussion

Enter your comment. Wiki syntax is allowed:
V F H​ K K
 
linux_faq/universal_multiboot_grub_bios_uefi.txt · Last modified: 2018/11/23 14:39 by admin