Multi загрузочная флешка

С позволения уважаемого jim945 выложу его инструкцию дополненную мною для загрузки чего хочешь с помощью GRUB.
Данный способ можно использовать как для флешки, так и для системного жесткого диска, а также просто для понимания работы с GRUB.

Я делал на флешке 8 GB, но это способ может быть применен на любой. В конце мы получим флешку состоящую из трех разделов с GRUB, способную грузиться в любой системе будь то BIOS или UEFI, а один из разделов виден в любой Windows.
Работаем в любом Linux, желательно Arch :).

Итак. Берем флешку.
1. Стираем с нее все разделы.
dd if=/dev/zero of=/dev/sdX bs=512 count=1

2. Создаем на флешке GPT таблицу разделов с помощью gdisk (должен быть у вас установлен и чуть-чуть прочитайте как с ним работать) и делаем гибридную MBR.
Создаем разделы по указанному порядку, в скобках перед буквами номера разделов:
а(1). Раздел EFI System - для загрузки в EFI, туда поставим GRUB для UEFI (в gdisk надо сначала сместиться на 162 блок):
- сектора с 162 по 2047
- код EF00
б(2). Раздел для данных. Только он будет виден в Windows. В нем храним iso, файлы GRUB и всё что хотим загрузить с помощью GRUB. Также здесь хранятся просто данные (в gdisk надо сначала сместиться на 2048 блок):
- сектора с 2048 до конца
- код 0700
в(3). Раздел BIOS boot partition - для загрузки на обычном биос, туда поставим GRUB для BIOS:
- сектора с 34 по 161
- код EF02
Делаем гибридную MBR, в ней отображаем только раздел с данными, вводим 2 !!! На остальные вопросы отвечаем NO !!!

3. Создаем ФС на соответствующих разделах, в скобках перед буквами номера ранее созданных разделов:
а(1). ФС FAT16
mkfs.fat /dev/sdX1
б(2). ФС NTFS
mkfs.ntfs -Q -L VasheName /dev/sdX2
в(3). не форматируем, это специальный раздел !!!!

4. Монтируем соответствующие разделы:
- данные и разные образы, в том числе Арч
mount /dev/sdX2 /mnt/data
- EFI-раздел
mount /dev/sdX1 /mnt/efi

5. Устанавливаем ДВА GRUBa по Вики, что бы можно было грузиться везде из любой системы:
а. Для целевых систем с BIOS есть два варианта установки GRUB, в зависимости в какой режиме вы сами сейчас загружены:

grub-install --boot-directory=/mnt/data/boot /dev/sdX
- если вы загружены в BIOS системе.

grub-install --target=i386-pc --recheck --debug --boot-directory=/mnt/data/boot /dev/sdX
- если вы загружены в UEFI системе.

б. Для целевых систем с EFI один вариант установки GRUB, поскольку вы также загружены в этом режиме:
grub-install --boot-directory=/mnt/data/boot --efi-directory=/mnt/efi --target=x86_64-efi --removable
этот код с учетом установки на флешку, при установке GRUB на диск параметр
--removable
не нужен.

7. Для безопасности создаем файл /mnt/data/boot/grub/grub.cfg и mnt/data/boot/grub/menu.cfg, показываю мои файлы в описании понятно что я могу грузить и что где лежит:
grub.cfg:
. $prefix/menu.cfg

menu.cfg:
## Установка поддержки видео режима
insmod vbe # для BIOS
insmod efi_gop # для UEFI
insmod efi_uga # для UEFI

## Загрузка шрифта и загрузка графической среды
insmod font
if loadfont ${prefix}/fonts/unicode.pf2
then
insmod gfxterm
set gfxmode=auto
set gfxpayload=keep
set locale_dir=$prefix/locale
set lang=ru_RU
insmod gettext
terminal_output gfxterm
fi

insmod part_msdos # модуль для распознавания таблицы разделов жесткого диска
set default=0 # выбранный пункт по умолчанию
set timeout=-1 # здесь время отображения меню значение -1 для отключения таймера

## Настройка цветов
set color_normal=white/black
set color_highlight=black/white

## Загрузка ArchLinux
dir=/images
insmod regexp # для шаблонов * в именах файлов
probe -s root_uuid -u $root # получаем UUID для подстановки в img_dev=
for iso in $dir/archlinux-*-dual.iso ; do # ищем образ(ы) Arch по шаблону
if [ ! -f "$iso" ] ; then continue; fi # только если образ существует
regexp -s build 'archlinux-(.+)-dual' "$iso" # получаем из имени образа дату сборки
for arch in i686 x86_64 ; do # делаем для обеих архитектур
menuentry "Arch Linux ISO $build $arch" --source="\
loopback loop $iso
probe -s isolabel -l loop
linux (loop)/arch/boot/$arch/vmlinuz archisolabel=\$isolabel img_dev=/dev/disk/by-uuid/$root_uuid img_loop=$iso earlymodules=loop
initrd (loop)/arch/boot/$arch/archiso.img"
done
done

## Загрузка ArchBang
submenu "ArchBang" {
probe -s root_uuid -u $root
menuentry "ArchBang_x86_64" {
set isofile="/images/archbang_x86_64.iso"
loopback loop1 $isofile
#probe -s isolabel1 -l loop1
linux (loop1)/arch/boot/x86_64/vmlinuz archisolabel=ARCHBANG img_dev=/dev/disk/by-uuid/$root_uuid img_loop=$isofile earlymodules=loop1
initrd (loop1)/arch/boot/x86_64/archiso.img
}
menuentry "ArchBang_i686" {
set isofile="/images/archbang_i686.iso"
loopback loop2 $isofile
#probe -s isolabel2 -l loop2
linux (loop2)/arch/boot/i686/vmlinuz archisolabel=ARCHBANG img_dev=/dev/disk/by-uuid/$root_uuid img_loop=$isofile earlymodules=loop2
initrd (loop2)/arch/boot/i686/archiso.img
}
}

## Загрузка Evolution
menuentry "Evolution-64bit" {
set isofile="/images/evolution_64bit.iso"
loopback loop3 $isofile
probe -s isolabel3 -l loop3
linux (loop3)/arch/boot/x86_64/vmlinuz archisolabel=Evolution-201503-64bit img_dev=/dev/disk/by-uuid/$root_uuid img_loop=$isofile #earlymodules=loop3
initrd (loop3)/arch/boot/x86_64/archiso.img
}

## Загрузка Parted Magic
submenu "Parted Magic" {
set default_settings="edd=on vga=normal"
set live_settings="boot=live eject=no"
set linux_64="/pmagic/bzImage64"
set linux_32="/pmagic/bzImage"
set default=2
menuentry "Parted Magic Live_64"{
set isofile="/images/pmagic_2015_05_04.iso"
loopback loop4 $isofile
linux (loop4)$linux_64 $default_settings $live_settings
initrd (loop4)/pmagic/initrd.img (loop4)/pmagic/fu.img (loop4)/pmagic/m64.img
}
menuentry "Parted Magic Live_32"{
set isofile="/images/pmagic_2015_05_04.iso"
loopback loop4 $isofile
linux (loop4)$linux_32 $default_settings $live_settings
initrd (loop4)/pmagic/initrd.img (loop4)/pmagic/fu.img (loop4)/pmagic/m32.img
}
}

## Загрузка Runtu
submenu "Runtu" {
set default_settings="locale=ru_RU.UTF-8 console-setup/layoutcode=ru noeject noprompt --"
menuentry "Runtu Lite" {
set live_media_path=/boot/runtu/lite
linux $live_media_path/vmlinuz boot=casper live-media-path=$live_media_path $default_settings
initrd $live_media_path/initrd.lz
}
menuentry "Runtu XFCE" {
set live_media_path=/boot/runtu/xfce
linux $live_media_path/vmlinuz boot=casper live-media-path=$live_media_path $default_settings
initrd $live_media_path/initrd.lz
}
}

## Загрузка Memtest86
submenu "Memtest86+" {
menuentry "Memtest86+ 32_v2" {
linux16 /boot/memtest/memtest.bin
}
menuentry "Memtest86+ 64 UEFI" {
archroot=$root
regexp -s root '\((.+)\)' "$cmdpath"
chainloader ($archroot)/boot/memtest/BOOTX64.EFI
}
}

## Загрузка Plop
menuentry "Plop Boot Manager" {
linux16 /boot/plpbt.bin
}

## Перезагрузка компьютера
menuentry "System restart" {
echo "System rebooting..."
reboot
}
## Выключение компьютера
menuentry "System shutdown" {
echo "System shutting down..."
halt
}

8. Копируем;
- установочный образы арча и других систем в /mnt/data/images/
- файлы Memtest в /mnt/data/boot/memtest/
- файлы Ploop в /mnt/data/boot/
- и т.д.
9. Можно накидать любых образом и систем, главное правильно прописать их загрузку в menu.cfg :)

Все размонтируем. Готово! Всем удачи !!!
P.S. Я наконец сделал чего мне так давно не хватало - загрузку и из BIOS и из UEFI !!!
scorpid , jim945 Спасибо за мануал. У меня возник вопрос, хотя для меня ситуация скажем так редкая но все же. Пробовал добавить запуск с iso Касперского

menuentry "Kaspersky Rescue Disk 10" {
set iso="/images/kav.iso"
loopback loop $iso
linux (loop)/boot/rescue root=live:LABEL=KRD10 rootfstype=auto init=/init initrd=rescue.igz kav_lang=en udev liveimg splash quiet doscsi nomodeset
initrd (loop)/boot/rescue.igz
}
Но так и не запустился.

Так же пробовал завести запуск Windows 7 iso через цепочку grub2 > grub4dos

title Windows 7
find --set-root /images/W7.iso
map /images/W7.iso (hd32) ----> or (0xff)
map --hook
chainloader (hd32) ----> or (0xff)
boot

И тут потерпел неудачу.

Вопрос есть ли у вас рабочие решение в случаи запуска этих образов?
ka
Так же пробовал завести запуск Windows 7 iso
Про grub4dos не скажу.
Распаковываю образ в ntfs раздел и grub2
ntldr /bootmgr
Работает.
Lupus pilum mutat, non mentem.
ka
Насколько я знаю, win 7 нельзя так запустить через ISO, попробуйте сделать как советует jim945.
А по поводу Касперского я бы написал в гугле "Kaspersky Rescue grub" наверняка есть ответ.
scorpid По поводу Каспера перед тем как написал прошарил тематику. Тот пример что выше выходил как рабочий. Второй вариант был с некоторыми манипуляциями по типа достать из образа пару папок ну и тп. Понимаю можно в целом вообще вытащить из образа и уже запускать без припонов. Но подумал мало ли может кто то имеет готовый вариант не опубликованный с запуском из iso

Что насчет совета jim945 скорее все только так и никак иначе. Видел что так люди делают но опять же хотелось некоторой эстетики что то типа папка для iso, grub и ничего более.
Здесь могу добавить, что некоторые диски нельзя запустить чисто через ISO, например тот же PartedMagic (очень мне нравится для восстановления), его только распаковкой образа в папку об этом написано на оф сайте. Здесь в инструкции написан старый вариант, новые образы так уже не грузятся. Нет пока времени подправить инструкцию.
scorpid Для образа pmagic_2016_04_26.iso конфиг выше рабочий. Но да, в остальном согласен.
Странно у меня не взлетел, еще раз проверю. Я просто сделал у себя на винте отдельный раздел Recovery, ну и там всякие iso и их запускаю через GRUB по этой инструкции, так вот Parted что не влетел, пока я его не распаковал. Попробую еще раз.
scorpid
а(1). Раздел EFI System - для загрузки в EFI, туда поставим GRUB для UEFI (в gdisk надо сначала сместиться на 162 блок):
Возник вопрос. А для чего это смещение? Если не сместиться то что будет? К чему эти свободные пространства между краями жёсткого диска?
Это для записи самого загрузчика, и совместимости вроде. Может почитать про GRUB и EFI. Так надо делать и смещение подобрано минимально возможное.
 
Зарегистрируйтесь или войдите что-бы оставить сообщение.