Как загрузить файл ISO с моего диска с помощью grub2 на машинах с UEFI?

12

У меня есть куча живых ISO-файлов, таких как GParted , CloneZilla , Boot-Repair , Ubuntu 14.04 32 bit , ... загруженных внутри /optи на моей старой машине с BIOS, я имел обыкновение просто добавлять их в меню grub и загружать их , :-)

Теперь у меня есть UEFI-машина, и вся информация, которую я могу найти, относится к компьютерам с BIOS.

Каковы шаги для загрузки этих файлов ISO из Grub?

Я просто устал от того, что постоянно "записываю" их на USB-накопитель, так как никогда не могу найти нужную флешку, в то время как сам мой компьютер гораздо сложнее потерять в общем хаосе вокруг меня здесь ... ) :-(

Fabby
источник
1
Я прошел этот путь некоторое время назад, и это круто.
Органический мрамор
1
Мне нравится использовать отдельный раздел, по одному на каждом диске, чтобы облегчить установку на другой диск или полную установку на флэш-накопители. help.ubuntu.com/community/Grub2/ISOBoot Примеры: help.ubuntu.com/community/Grub2/ISOBoot/Examples Я считаю правильный путь верным, пока он не смонтирован, и получение подробных параметров загрузки в качестве двух основных проблем при получении это на работу. Путь даже может измениться, если флэш-накопитель подключен. И просмотр ISO, чтобы увидеть его загрузочный раздел и путь, может помочь вам разобраться в деталях.
oldfred
1
Я использовал этот метод 'grub-n-iso' много раньше, и он хорошо работает :-), но сейчас я тестирую iso-файлы на отдельном компьютере для тестирования, и я клонирую из iso-файлов на быстрые USB3-накопители или создаю постоянный live USB pendrives с mkusb . (Я храню свои USB-накопители в небольшой пластиковой коробке.)
sudodus
VBox запускает файлы ISO в порядке, используйте сохранение состояния машины при выходе, MultiBootUSB имеет опцию для перетаскивания загрузки ISO, и QEMU с менеджером виртуальной машины быстро запустит iso.
CSCameron
1
В настоящее время используйте только grub2 2.02 для монтирования контура ISO. Grub2 2.04 выдает ошибку памяти. bugs.launchpad.net/ubuntu/+source/grub2/+bug/1851311 В Ubuntu 18.04 все еще есть grub 2.02.
oldfred

Ответы:

14

В grub 2.04 есть ошибка, поэтому убедитесь, что у вас установлена ​​предыдущая или более поздняя версия.

Итак, основы для добавления файла ISO в grub для UEFI те же, что и для компьютера с BIOS: отредактируйте /etc/grub.d/40_customи добавьте menuentryэлемент (в этом примере используется GParted) в конец файла:

menuentry "GParted Live ISO" {
}

Теперь мы собираемся добавить переменную, содержащую каталог, в котором мы сохранили ISO (пока все хорошо: никаких различий с машинами BIOS):

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
}

Я использую их /optдля хранения, так как мне не нравится создавать каталоги в корне моей машины, и в соответствии с иерархией файловой системы Linux , где в любом случае должно находиться дополнительное программное обеспечение.

Перед тем , как добавить loopbackпеременную, нам необходимо выяснить , на какой жесткий диск файл хранится, поэтому мы делаем: df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso | tail -1и выход на моей машине: /dev/sdb2.

Однако grub использует hdX,Yнотацию ( ), и именно здесь возникает разница между машинами с UEFI и BIOS! Так что теперь перезагрузите компьютер, перейдите в меню потайного и нажмите C: Это приведет вас к команде потайной строки с различными командами , чем вы привыкли , но только один , что вам нужно: ls.

На моей машине вывод:

(hd0) (hd1) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1) (hd2) ... (hd3) ...

А? 4 диска? У меня только 3! И это не (hd1,4)строка в BIOS, а (hd1,gpt3)в UEFI и (hd0)вообще не имеет разделов!

Что ж, очевидно, когда часть NVRAM используется в качестве хранилища и отображается, когда (hd0) вам нужно начать нумерацию дисков с 1!   В то время как вся информация, которую вы найдете при загрузке файлов ISO, говорит о том, что вы должны начинать нумерацию с 0 (на компьютерах с BIOS это всегда так , но на некоторых машинах с UEFI это не всегда так !)

Таким образом, значение для loopbackстановится (hd2,gpt2)$GPartedISOFileкак файл ISO на моем компьютере /dev/sdb2(второй диск hd2, второй раздел gpt2):

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
  loopback loop (hd2,gpt2)$GPartedISOFile
}

Другое отличие состоит в том, что linuxи initrdна машинах BIOS вызываются linuxefiи linuxefiна машинах UEFI, что дает нам наш конечный результат:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
  loopback loop (hd2,gpt2)$GPartedISOFile
  linuxefi (loop)/live/vmlinuz boot=live components config findiso=$GPartedISOFile ip=frommedia toram=filesystem.squashfs union=overlay username=user
  initrdefi (loop)/live/initrd.img
}

Теперь сохраните этот файл и обновите grub:

update-grub

После всего вышеперечисленного перезагрузитесь, войдите в меню grub , выберите, GParted Live ISOи теперь вы можете легко загрузить свой ISO без необходимости искать USB-флешку!

:-)

Пример CloneZilla Live (для этого вопроса )

menuentry "CloneZilla ISO" {
  set ISOFile="/opt/Live-ISOs/clonezilla-live-20170905-zesty-amd64.iso"
  loopback loop (hd2,gpt2)$ISOFile
  linuxefi (loop)/live/vmlinuz boot=live components config findiso=$ISOFile ip=frommedia toram=filesystem.squashfs union=overlay
  initrdefi (loop)/live/initrd.img
}
Fabby
источник
Вы уже создали Clonezilla? Это немного по-другому, я могу опубликовать это, если вы еще не поняли это.
Органический мрамор
1
Я собираюсь опубликовать другой ответ для всех тех, кого я добавлю завтра для людей типа "дай мне код" ... @OrganicMarble
Fabby
+1, но, вероятно, безопасно отказаться 2от update-grub2этих дней.
WinEunuuchs2Unix
@ WinEunuuchs2Unix Это в моей истории ... Я просто печатаю, upd↑а затем копирую и вставляю . Спасибо за напоминание Обновлено!
Фабби
6

Альтернатива - просто добавить файл конфигурации в 40_custom следующим образом:

menuentry 'Live ISOs on SSD' {
configfile (hd0,3)/ISO/livecdimage.cfg
} 

menuentry 'Live ISOs on HDD (boot on SSD)' {
configfile (hd1,3)/ISO/livecdimage.cfg
} 

Я делаю это так, как при обновлении ISO, я всегда забываю запустить sudo update-grub. Приведенные выше записи никогда не нужно менять, и я могу просто отредактировать livecdimage.cfg, который имеет тот же формат, что и любой 40_custom, но без строк заголовка и находится в моей папке / ISO в моем разделе ISO.

Я добавляю toram в качестве другого параметра загрузки, а в системе с Nvidia добавляем параметр загрузки nomodeset. Но все равно часто приходится размонтировать / isodevice.

Невозможно размонтировать isodevice, размонтировать ISO. Https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1155216

sudo umount -l -r -f /isodevice

И это часть моего файла livecdimage.cfg

# livecdimage.cfg
# Add this to 40_custom to load this file:
# menuentry 'Live ISOs' {
# configfile (hd1,3)/iso/livecdimage.cfg
#} 
# Add iso names to livecdimage.cfg
#for i in `ls *.iso`;do echo "# "$i>>livecdimage.cfg; done;

menuentry "Ubuntu 16.04.4 xenial amd64" {
    set isofile="/ISO/ubuntu-16.04.4-desktop-amd64.iso"
    loopback loop (hd0,3)$isofile 
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
    initrd (loop)/casper/initrd.lz
}

menuentry "Ubuntu 18.04 Bionic amd64" {
    set isofile="/ISO/bionic-desktop-amd64.iso"
    loopback loop (hd0,3)$isofile 
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
    initrd (loop)/casper/initrd.lz
}

# spacer line
menuentry " " {
set root= 
}

menuentry "Reboot" {
    reboot
}

menuentry "Halt" {
    halt
}
oldfred
источник
Мне нравится перезагрузка и остановка! :-) +1 Почему вы добавляете insmod? Вы также можете пинговать меня в чате
Fabby
Inmod, вероятно, не нужен. С grub2 были встроены некоторые функции, а некоторые были надстройки (insmod). Вероятно, вначале мне понадобился insmod gpt, так как я начал использовать gpt в 2010 году или до того, как на ПК появились UEFI и grub2 были новыми и только для BIOS / MBR, хотя и загружались из gpt с BIOS.
oldfred
Спасибо за ответ. Не лучше ли тогда убрать эти строки из ответа?
Fabby
1
Позвольте мне отредактировать свою строфу и посмотреть, загрузится ли 18.04. Я ожидаю, что это будет. Я также хотел обновить свою загрузочную запись gparted ISO, которая сейчас очень старая, поэтому вернусь через некоторое время.
oldfred
1
Загрузился хорошо. Я забыл, что мой флэш-накопитель 18.04 подключен, и в моей системе он становится hd0, поэтому при загрузке приходится вручную редактировать запись на одном hdX, чтобы иметь правильный диск. Мой gparted .25 boot не работал, просто изменив на .30. Мне пришлось заглянуть в ISO и увидеть его grub.cfg и использовать эти параметры и команды цикла grub, и тогда все заработало.
oldfred
5

MKUSB MULTIBOOT HACK

Mkusb является отличной базой для проектов пользовательских загрузочных дисков благодаря своим возможностям как с BIOS, так и с UEFI.

Этот хак загружает несколько файлов ISO, включая установщик Windows, и имеет меню grub2.

Пункты меню Grub2 для большинства ОС доступны с помощью поиска Google и выходят за рамки этого ответа.

MKUSB по умолчанию

Используйте настройки по умолчанию при создании постоянного USB-накопителя.

mkusb снова использует значения по умолчанию

Используйте mkusb persistence default, если сомневаетесь, размер раздела можно изменить позже, но это займет время.

Консоль DUS

Консоль DUS после установки.

GParted Before

GParted перед изменением раздела.

Gparted после

После модификации - перезаписать sdb4, раздел ОС ISO9660 и sdb5, раздел ext2 casper-rw, разделом FAT32 для файлов персистентности.

Постоянство раздела

Раздел постоянства - создайте папку с уникальным именем для каждой ОС (для этого требуется постоянство)

Постоянная папка

Папка постоянства - добавьте файл casper-rw и необязательный файл home-rw в каждую папку постоянства. Файл home-rw можно создать, переименовав файл casper-rw. Файл home-rw похож на отдельный домашний раздел при полной установке, его можно использовать повторно после обновления версии.

Папка ISO

Создайте папку для файлов ISO в разделе USB-данных NTFS.

Содержимое папки ISO

Добавьте несколько ISO в папку ISO.

GRUB местоположение

местоположение grub.cfg

grub.cfg

Отредактируйте grub.cfg, чтобы подключить файлы ISO. Включите: persistent persistent-path=/<persistent-folder-name>/если вы хотите упорства.

РЕДАКТИРОВАТЬ 18.04+ В grub указать vmlinuz не vmlinuz.efi и initrd не initrd не initid.lz

sudo разделил -ls / dev / sdb

sudo разделил -ls / dev / sdb

sudo lsblk -f / dev / sdb

sudo lsblk -f / dev / sdb

Если требуется установщик Windows, возможно, проще всего начать с функции mkusb «извлечение установщика Windows» (мне пришлось извлечь Windows ISO в TAR вручную),

установщик Windows

После установки создайте папку для ISO и, если требуется, папки для сохранения (аналогично процедуре выше).

mkusb Windows Grub

Отредактируйте /boot/grub/grub.cfg, чтобы выполнить циклическое подключение любых ISO и указать все постоянные папки.

(не нашли способ зацикливать файл Windows ISO).

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

CSCameron
источник
И как вы получаете их обратно на HDD / SDD ??? Вопрос в том, чтобы теперь хотеть их на флешке, или я что-то упустил?
Fabby
1
@Fabby, это не только для флешек. Если у вас есть новый диск SATA, вы можете начать, как описано в этом ответе, и позволить mkusb установить надежную загрузочную систему, которая работает как в режиме UEFI, так и в режиме BIOS. Этот диск SATA может быть установлен внутри или подключен извне через USB или eSATA. Можно добавить как «условно установленные системы», так и новые iso-файлы для загрузки через «grub-n-iso».
sudodus
Хорошо, я все еще не понимаю: я хочу эти ISO в /opt/. Как мне это сделать? (+1 тем временем за усилия, хотя ...)
Fabby
1
@Fabby: Я думаю, что вместо создания новой папки для ISO, как показано выше, укажите расположение ISO в / opt /, в grub.cfg, grub на pendrive может загрузить ISO на жесткий диск. Я дам это попробовать.
CSCameron
@Fabby: если ISO-образы находятся на / opt / на внутреннем диске, тот же пункт меню, который вы используете на внутреннем диске, будет работать на внешнем диске. При загрузке grub на USB-накопителе могут быть преимущества, такие как переполнение или повреждение внутреннего меню grub.
CSCameron
3

Три простых шага

добавить ISO в меню grub и загрузиться с него.

Сначала установите grml-rescueboot

Откройте терминал и введите:

sudo apt install grml-rescueboot

Во-вторых, переместите файлы ISO в /boot/grml/

В этом же терминале введите:

sudo mv ~/Downloads/<filename.iso> /boot/grml/

В-третьих, обновить Grub

В этом же терминале введите:

sudo update-grub

Повторите второй и третий этапы по мере необходимости

Не забудьте удалить устаревшие файлы ISO из /boot/grml.

Справка: Справка по Ubuntu при загрузке Grub2 ISO

Надеюсь это поможет

user68186
источник
/bootхудшее место, чтобы положить их. Извините, заглянул в grml, должен был упомянуть об этом. +1 за усилие, хотя
Fabby
Спасибо @Fabby за +1! Возможно, это не самый лучший способ сделать это, но это кажется самым простым, ИМХО.
user68186
1
Вот почему +1: хороший ответ для нетехнических пользователей.
Фабби
2

MultiBootUSB - QEMU

Если вы хотите загружать ISO-файлы с наименьшими хлопотами и не нуждаетесь в постоянстве, MultiBootUSB включает опцию QEMU:

  • Запустите MultiBootUSB и выберите вкладку Boot ISO / USB.

  • Перетащите ISO в область выбора изображения.

  • Выберите размер оперативной памяти и нажмите кнопку Boot ISO.

Вам не нужно редактировать grub.cfg или даже выходить из системы.

MultiBootUSB-QEMU

CSCameron
источник
Острота! Я собираюсь попробовать это позже!
Фабби
@Fabby: есть версия MBUSB для Windows и версия для Linux. Я не мог получить версию Windows для загрузки ISO, только USB. Версия Linux 9.2.0 прекрасно работает для меня.
CSCameron
2

ПРОСТО mkusb ISO мультибутер

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

Используйте mkusb для создания постоянного USB-накопителя с использованием операционной системы по умолчанию, https://help.ubuntu.com/community/mkusb.

Создайте папку в разделе usbdata sdx1 с именем ISO.

Добавьте ISO для загрузки в эту папку.

Добавьте пункты меню в /sdx3/boot/grub/grub.cfg для циклического подключения ISO.

Образцы:

menuentry "Ubuntu-18.04 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/ubuntu-18.04-desktop-amd64.iso"
        loopback loop $isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile splash --
        initrd (loop)/casper/initrd.lz
}

menuentry "GParted 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/gparted-live-0.31.0-1-amd64.iso"
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live union=overlay username=user config components noswap noeject toram=filesystem.squashfs ip='' nosplash findiso=$isofile splash --
    initrd (loop)/live/initrd.img
}

menuentry "Clonezilla 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/clonezilla-live-2.5.5-38-amd64.iso"
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live live-config nolocales edd=on nomodeset ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\"   ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"\" vga=788   ip=frommedia nosplash toram=filesystem.squashfs findiso=$isofile splash --
    initrd (loop)/live/initrd.img
}
CSCameron
источник