null

Linux создание мультизагрузочной флешки

Мультизагрузагчную флешку в linux в часности Debian /Ubuntu легко создать с помощью специализированой программ Ventoy (https://ventoy.net/en/index.html) или  Multisystem (http://liveusb.info/multisystem/). Рассмотрим вариант создания создания "вручную".

Для этого нам потребуется:

  • редактор разделов - для удобство использую Gparted, любой который знаете и понимаете как в нём работать
  • загрузчик - Grub2
  • эмулятор для проверки работоспособности - qemu (ничего не мешает проверять на физическом компьютере)

​​​​​​​

Создавать отдельный раздел для каждого диструбутивива на флешке не обязательно. Если необходима запись самих файлов образов, то можно скопировать их на флешку и прописать Grub загружаться с нужного ISO образа.

1. Форматирование флешки

Форматируем флешку в fat32 (возможно использование и другой, кроме NTFS). Если флешка уже смонирована необходимо её отмантировать. Необходимо сделать данный раздел загрузачным Раздел -> Управление флагом -> boot. Применяем изменения.

 

2. Установка загрузчика

Монтируем usb, создаём папку для хранения образов:

mkdir /mnt/USB

mount /dev/sdx1 /mnt/USB

mkdir /mnt/USB/iso/

Копируем нужные ISO образы в папку /mnt/USB/ISO

Устанавливаем загрузчик Grub2:

grub-install --root-directory=/mnt/USB/ /dev/sdx

3. Настройка меню

Создаём конфигурационный файл для загрузчика /mnt/USB/boot/USB/boot/grub2/grub.cfg:

vi /mnt/USB/boot/grub2/grub.cfg

Добавляем запись для образа:

menuentry "Ubuntu" {
loopback loop /iso/ubuntu-20.04-desktop-i386.iso
root=(loop)
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/iso /ubuntu-20.04-desktop-i386.iso noeject noprompt splash root=(loop)
initrd (loop)/casper/initrd.lz
}

Аналогичным образом создаём пункты для каждого образа, например для memtest:

menuentry "Test memory" {
linux16 /iso/mt86plus
}

Исполняемый файл mt86plus нужно скачать и положить в папку iso.

Сделаем еще пункт для запуска с жесткого диска, если флешка оказалась в разъеме случайно:

menuentry "Load Hard Disk" {
set root="(hd1)"
chainloader +1
}

Для Windows 10 запись будет выглядеть следующим образом:

menuentry "Windows 10" {
insmod ntfs
insmod ntldr
loopback loop /iso/windows.iso
root=(loop)
ntldr (loop)/bootmgr
}

4. Проверка результата

Когда завершите настройку файла, сохраните его и можно перевеять все ли получилось. Сначала отмонтируйте флешку:

sudo umount /dev/sdX1

Затем используйте qemu для загрузки системы:

qemu-system-x86_64 -hda /dev/sdX

 

Альтернативный вариант настройки меню

Можно использовать не iso образ, а для каждого диструбутива создать свой раздел. Распакуйте файлы из iso образа на этот раздел. Смонтируйте образ в любую папку, и просто скопируйте файлы с помощью cp:

sudo mount ~/ubuntu.iso /mnt/ISO

sudo cp -rp /mnt/ISO /mnt/USB1/

В Grub диски именуются по-другому чем в Linux. Каждый диск называется hd и имеет номер начиная с нуля, разделы именуются начиная с единицы. Например, раздел /dev/sda1 будет иметь адрес (hd0,1). Как правило, первым считается тот диск, с которого выполнена загрузка.

Таким образом, конфигурация пункта меню будет выглядеть вот так:

menuentry "Ubuntu" {
root=(hd0,1)
linux /casper/vmlinuz boot=casper noeject noprompt splash
initrd /casper/initrd.lz
}

​​​​​​​