Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
linux_faq:universal_multiboot_grub_bios_uefi [2019/04/11 14:26] – [Установка Windows с такой UEFI-флешки] admin | linux_faq:universal_multiboot_grub_bios_uefi [2021/09/07 07:49] (current) – [Разметка флешки] admin | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Универсальная загрузочная флешка для BIOS/UEFI ====== | ||
+ | В один прекрасный момент я стал обладателем машинки, | ||
+ | Настало время переделать мультизагрузочную флешку, | ||
+ | |||
+ | По мотивам https:// | ||
+ | |||
+ | ====== Подготовка ====== | ||
+ | На **Ubuntu** надо поставить такое: | ||
+ | sudo add-apt-repository universe | ||
+ | sudo apt-get install grub-efi-amd64-bin exfat-fuse exfat-utils | ||
+ | |||
+ | ====== Разметка флешки ====== | ||
+ | Полностью переразмечаем диск. Создадим четыре раздела. | ||
+ | - Раздел с данными, | ||
+ | - Раздел 8Gb для распакованного дистрибутива **Windows** (или образа **WinPE**). | ||
+ | - Загрузочный раздел **EFI** (размер - 48 Мб). | ||
+ | - Загрузочный раздел **BIOS** (размер 1 Мб). | ||
+ | < | ||
+ | disk='/ | ||
+ | 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: | ||
+ | sudo sgdisk --typecode=1: | ||
+ | sudo sgdisk --new=2: | ||
+ | sudo sgdisk --typecode=2: | ||
+ | sudo sgdisk --new=3: | ||
+ | sudo sgdisk --typecode=3: | ||
+ | sudo sgdisk --new=4: | ||
+ | sudo sgdisk --typecode=4: | ||
+ | sudo sgdisk --attributes=4: | ||
+ | </ | ||
+ | |||
+ | Отформатируем разделы и смонтируем их. \\ | ||
+ | Разделы с данными будем форматировать в **NTFS**. Это позволит работать с флехой из-под **Windows** и заливать большие файлы (больше 4-х Гб). \\ | ||
+ | Как ни странно, | ||
+ | Стоит отметить, | ||
+ | |||
+ | < | ||
+ | sudo mkfs.vfat -F 32 ${disk}3 | ||
+ | sudo mkfs.ntfs -f ${disk}1 | ||
+ | sudo mkfs.ntfs -f ${disk}2 | ||
+ | |||
+ | sudo mkdir / | ||
+ | sudo mkdir / | ||
+ | |||
+ | sudo mount -o async, | ||
+ | sudo mount ${disk}3 / | ||
+ | </ | ||
+ | |||
+ | Установим **grub** и **EFI**: | ||
+ | < | ||
+ | sudo grub-install --target=x86_64-efi --recheck --removable --efi-directory=/ | ||
+ | sudo grub-install --target=i386-pc --recheck --boot-directory=/ | ||
+ | </ | ||
+ | |||
+ | Ну и дальше настраиваем **grub**, редактируя файлик **/ | ||
+ | http:// | ||
+ | < | ||
+ | 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 " | ||
+ | loopback loop / | ||
+ | set gfxpayload=keep | ||
+ | linux (loop)/ | ||
+ | initrd (loop)/ | ||
+ | } | ||
+ | |||
+ | menuentry " | ||
+ | loopback loop / | ||
+ | linux (loop)/ | ||
+ | initrd (loop)/ | ||
+ | } | ||
+ | |||
+ | menuentry " | ||
+ | loopback loop / | ||
+ | linux (loop)/ | ||
+ | initrd (loop)/ | ||
+ | } | ||
+ | |||
+ | menuentry " | ||
+ | | ||
+ | linux (loop)/ | ||
+ | | ||
+ | } | ||
+ | |||
+ | menuentry " | ||
+ | | ||
+ | linux (loop)/ | ||
+ | | ||
+ | } | ||
+ | |||
+ | menuentry " | ||
+ | | ||
+ | linux (loop)/ | ||
+ | | ||
+ | } | ||
+ | |||
+ | menuentry " | ||
+ | loopback loop / | ||
+ | set gfxpayload=keep | ||
+ | linux (loop)/ | ||
+ | initrd (loop)/ | ||
+ | } | ||
+ | |||
+ | menuentry " | ||
+ | set isofile="/ | ||
+ | loopback loop $isofile | ||
+ | linux (loop)/ | ||
+ | initrd (loop)/ | ||
+ | } | ||
+ | |||
+ | menuentry " | ||
+ | loopback loop / | ||
+ | set gfxpayload=keep | ||
+ | linux (loop)/ | ||
+ | initrd (loop)/ | ||
+ | } | ||
+ | |||
+ | menuentry " | ||
+ | insmod part_gpt | ||
+ | insmod ext2 | ||
+ | insmod search_fs_uuid | ||
+ | rmmod tpm | ||
+ | |||
+ | search --no-floppy --set=root --fs-uuid 36c1a912-77c7-4cec-8120-c2088e1e131c | ||
+ | | ||
+ | set isofile="/ | ||
+ | set gfxpayload=keep | ||
+ | | ||
+ | loopback loop ($root)$isofile | ||
+ | |||
+ | linux (loop)/ | ||
+ | initrd (loop)/ | ||
+ | } | ||
+ | |||
+ | menuentry " | ||
+ | loopback loop / | ||
+ | set gfxpayload=keep | ||
+ | linux (loop)/ | ||
+ | initrd (loop)/ | ||
+ | } | ||
+ | |||
+ | menuentry " | ||
+ | loopback loop / | ||
+ | set gfxpayload=keep | ||
+ | linux (loop)/ | ||
+ | initrd (loop)/ | ||
+ | } | ||
+ | |||
+ | menuentry ' | ||
+ | set background_color=black | ||
+ | loopback loop / | ||
+ | linux (loop)/ | ||
+ | initrd | ||
+ | } | ||
+ | |||
+ | menuentry " | ||
+ | loopback loop / | ||
+ | set gfxpayload=keep | ||
+ | linux16 (loop)/ | ||
+ | }</ | ||
+ | |||
+ | |||
+ | ====== Загрузка образов дискет (FreeDOS, MemTest, MHDD, etc...) ====== | ||
+ | В образе **SystemRescueCD** в папке **/ | ||
+ | Немного информации есть тут: https:// | ||
+ | Общий принцип - в качестве ядра указывается **memdisk**, | ||
+ | < | ||
+ | initrd16 (loop)/ | ||
+ | |||
+ | ====== Установка Windows с такой UEFI-флешки ====== | ||
+ | После копирования файлов iso-образа на раздел: | ||
+ | rsync -av /mnt/cdrom/ /mnt/flash/ | ||
+ | Выяснилось, | ||
+ | < | ||
+ | insmod ntfs | ||
+ | search --set=root --file /bootmgr | ||
+ | ntldr /bootmgr | ||
+ | boot | ||
+ | }</ | ||
+ | Оказалось, | ||
+ | Если попытаться загрузить **bootmgr** с такой флешки, | ||
+ | Вариантов загрузки **Windows** на **BIOS**-компьютере с **GPT**-диском несколько. \\ | ||
+ | Первый - **DUET** (Developer’s UEFI Environment). В этом случае, | ||
+ | Второй - использование режима **hybrid MBR**. Это можно сделать утилитой **gdisk**. | ||
+ | ===== Hybrid MBR - гибридный MBR ===== | ||
+ | https:// | ||
+ | Обычный **GPT**-диск имеет запись **MBR** с единственным разделом типа **0xEE (EFI GPT)**, внутри которого размещаются разделы **GPT**. \\ | ||
+ | Гибридный **MBR**, помимо основного раздела типа **0xEE (EFI GPT)** может содержать сведения о дополнительных (до трех штук) разделах, | ||
+ | Таким образом, | ||
+ | Очень важно, не давать таким утилитам и операционкам изменять таблицу разделов. В противном случае - они просто порушат **GPT**. \\ | ||
+ | Такая конфигурация не описана стандартами и разные ОС обрабатывают её по разному. Поведение различных ОС при встрече с таким чудом [[https:// | ||
+ | Запускаем **gdisk**: | ||
+ | sudo gdisk $disk | ||
+ | Переходим в **Recovery/ | ||
+ | r | ||
+ | Теперь создаем гибридную запись **MBR**: | ||
+ | h | ||
+ | Программа спросит - какие разделы должны быть добавлены в таблицу разделов гибридной записи вводим их номера через пробел: | ||
+ | Type from one to three GPT partition numbers, separated by spaces, to be | ||
+ | added to the hybrid MBR, in sequence:1 2 3 4 | ||
+ | Дальше - система спросит хотим ли мы разместить первой таблицу **EFI**, чтобы работал **GRUB**. Отвечаем **yes**. \\ | ||
+ | А также - какие коды типов присвоить разделам гибридной таблицы и делать ли их загрузочными. \\ | ||
+ | Загрузочной делаем только 4-ю партицию. \\ | ||
+ | Записываем изменения **w**. \\ | ||
+ | \\ | ||
+ | |||
+ | В двух словах - диск с гибридизированными разделами нельзя модифицировать утилитами, | ||
+ | |||
+ | |||