Да, GRUB умеет загружать live-ISO прямо из своего меню. Для больших образов вроде Arch Linux используется модуль loopback, который монтирует ISO как файловую систему, а для маленьких утилит вроде memtest86+ подходит memdisk из пакета syslinux. Пункт меню добавляется в файл /etc/grub.d/40_custom, после чего конфиг перегенерируется командой grub-mkconfig. Чаще всего такой пункт нужен, чтобы загрузить live-систему для установки или ремонта, например когда GRUB упал в rescue, об этом случае читай статью «grub rescue: что делать». Тебе понадобятся сам ISO, права root и пара минут на правку одного файла.
Модуль loopback позволяет обращаться к ISO-файлу как к обычному диску. GRUB читает образ через файловую систему iso9660 и загружает из него ядро и initramfs. Всё происходит без записи на флешку и без перепрошивки чего-либо. Модули loopback и iso9660 подгружаются автоматически, отдельно их подключать не нужно.
ISO должен лежать на разделе, который GRUB умеет читать на этапе загрузки: ext4, FAT32 или btrfs. Не клади образ на LUKS-зашифрованный раздел: без настройки модуля crypto GRUB его не прочитает, подробнее в статье «GRUB не видит LUKS2 и btrfs-корень».
Проще всего положить файл в /boot. Учти нюанс: путь в переменной isofile указывается относительно корня того раздела, где лежит файл. Если /boot это отдельный раздел, файл /boot/archlinux.iso в записи будет выглядеть как /archlinux.iso. Если /boot находится внутри корневого раздела, путь остаётся /boot/archlinux.iso. Образ бери с официального сайта, проверка контрольной суммы описана ниже. loopback не копирует ISO в оперативную память, он читает его с диска по мере надобности, поэтому размер образа почти не влияет на потребление RAM, в отличие от memdisk.
Открой файл от имени root:
sudo nano /etc/grub.d/40_custom
Добавь в конец запись:
menuentry "Arch Linux ISO" {
set isofile="/boot/archlinux.iso"
loopback loop $isofile
linux (loop)/arch/boot/x86_64/vmlinuz-linux archisobasedir=arch archiso_loop_sfs archiso_pxe_http archiso_pxe_nfs archiso_pxe_common
initrd (loop)/arch/boot/x86_64/initramfs-linux.img
}
Разбор по строкам:
Параметры ядра в строке linux можно менять под свои задачи, разбор аргументов есть в статье «Кастомные аргументы ядра в GRUB».
Проверить, что GRUB читает образ, можно прямо из командной строки. В меню нажми C и выполни:
loopback loop /boot/archlinux.iso
ls (loop)/
Первая команда монтирует ISO как устройство loop, вторая показывает его содержимое. Если вместо списка файлов появляется ошибка, образ не читается: проверь путь, файловую систему раздела и фрагментацию. После проверки выйди из командной строки командой exit или просто перезагрузись.
После правки 40_custom перегенерируй конфиг:
sudo grub-mkconfig -o /boot/grub/grub.cfg
Проверь, что пункт «Arch Linux ISO» появился в меню, и перезагрузись. Если пункта нет или загрузка падает с ошибкой, смотри следующий раздел.
GRUB читает ext4, FAT, btrfs и XFS. Зашифрованные разделы LUKS он не читает без специальной настройки. Если образ лежит на таком разделе, перенеси его на незашифрованный: отдельный FAT32-раздел, ext4 или обычную флешку. Если модуль iso9660 не подгрузился, подключи его вручную командой insmod iso9660.
loopback требует, чтобы ISO лежал на диске одним непрерывным куском. GRUB читает образ как файловую систему, а не как поток байтов, поэтому разбросанные по диску куски он собрать не может. На ext4 проверь фрагментацию:
sudo e4defrag -c /boot/archlinux.iso
Если файл разбит на куски, дефрагментируй его:
sudo e4defrag /boot/archlinux.iso
На btrfs для одного файла работает команда btrfs filesystem defragment. После дефрагментации перегенерируй grub.cfg и попробуй снова.
Проверь путь прямо из командной строки GRUB. В меню нажми C, затем:
search --file /boot/archlinux.iso
Команда вернёт раздел, на котором найден файл. Если ответа нет, файла по такому пути не существует или раздел не читается. После успешного loopback содержимое образа можно посмотреть командой ls (loop)/.
Если образ лежит не на системном разделе, а на флешке или втором диске, путь в isofile можно не прописывать вручную. Команда search сама найдёт раздел с файлом:
menuentry "Arch Linux ISO (USB)" {
search --no-floppy --set=root --file /archlinux.iso
set isofile="/archlinux.iso"
loopback loop $isofile
linux (loop)/arch/boot/x86_64/vmlinuz-linux archisobasedir=arch archiso_loop_sfs archiso_pxe_http archiso_pxe_nfs archiso_pxe_common
initrd (loop)/arch/boot/x86_64/initramfs-linux.img
}
search –no-floppy –set=root –file /archlinux.iso перебирает разделы и останавливается на том, где найден файл. Дальше isofile указывается относительно корня этого раздела. Способ удобен, когда ISO лежит на флешке: вставил её, выбрал пункт в меню, загрузился. search ищет по всем подключённым дискам, поэтому флешка должна быть вставлена до выбора пункта меню.
Если GRUB запустился, но live-система не доходит до рабочего стола, причины обычно такие.
Строка linux должна содержать archiso_loop_sfs. Этот параметр говорит системе, что squashfs лежит внутри ISO. Уберёшь его, и загрузка упадёт с ошибкой, что не найден файл образа. Остальные параметры archiso_pxe_* нужны для сетевой загрузки, их можно оставить как есть.
ISO, скачанный с ошибками, распаковывается частично. Симптомы разные: падение в середине загрузки, ошибки чтения squashfs, внезапный выход в консоль. Лечится перекачиванием образа и проверкой контрольной суммы.
live-система распаковывает squashfs в оперативную память. Если её мало, загрузка обрывается. Для Arch ISO нужно минимум около полугигабайта, для комфортной работы с установщиком лучше гигабайт и больше.
Если скачал ISO для другой архитектуры, например ARM вместо x86_64, ядро из образа не запустится. Проверь, что образ соответствует твоей системе, ещё до добавления записи в меню.
memdisk из пакета syslinux эмулирует диск и загружает содержимое ISO в оперативную память. Подходит для небольших образов: memtest86+, FreeDOS, диагностические утилиты. memdisk сам определяет, эмулировать дискету или жёсткий диск, по размеру образа, для пользователя это неважно. Работает он только с загрузочными ISO: образ должен уметь стартовать сам, как дискета или жёсткий диск.
sudo pacman -S syslinux
sudo cp /usr/lib/syslinux/bios/memdisk /boot/
Образ memtest86+ можно взять из официального репозитория: пакет memtest86+ кладёт ISO в каталог /usr/share/memtest86+/. Скопируй его в /boot и добавь запись:
menuentry "Memtest86+" {
linux16 /boot/memdisk
initrd16 /boot/memtest.iso
}
linux16 и initrd16 это команды загрузки в 16-битном режиме, они передают загрузчику memdisk и сам ISO.
Скачивай образ только с официального сайта и сверяй контрольную сумму:
sha256sum archlinux.iso
Сравни вывод с числом на странице загрузки archlinux.org/download. Если сумма не совпадает, образ повреждён или подменён, не загружай его. Повреждённый ISO может упасть в середине установки или не найти файлы в squashfs. Контрольная сумма считается за пару секунд, не пропускай этот шаг. Перед тем как добавлять пункт в меню, можно проверить образ в виртуальной машине: если ISO грузится там, проблема не в нём, а в записи GRUB.
Live-пункт в меню это временное решение. После установки системы или ремонта загрузчика убери его:
sudo grub-mkconfig -o /boot/grub/grub.cfg
Сам файл 40_custom остаётся на месте, из него уходит только лишняя запись. Если оставить пункт, а файл удалить, при выборе GRUB выдаст ошибку file not found. Заодно, пока возишься с меню, можно настроить его внешний вид, статья «Тема оформления GRUB: фон».
Да. loopback это обычный модуль GRUB, он работает и в BIOS, и в UEFI. А вот memdisk нет: команды linux16 и initrd16 доступны только в BIOS-режиме. На UEFI-системах для live-ISO всегда используй loopback.
Скорее всего, неверный путь к ISO или файл лежит на разделе, который GRUB не читает. Проверь путь через командную строку GRUB (клавиша C) и команду search –file. Затем проверь фрагментацию файла: разбитый на куски ISO loopback не прочитает. Убедись также, что имя файла в записи совпадает с реальным с точностью до регистра букв, GRUB к этому чувствителен.
Можно, но пути к ядру и initramfs у других дистрибутивов другие. У Arch Linux структура ISO стабильна, поэтому запись работает годами. Для Debian или Ubuntu придётся подставлять свои пути к vmlinuz и initrd. Перед правкой посмотри структуру образа командой ls (loop)/ в командной строке GRUB.
Перенеси образ на незашифрованный раздел: FAT32, ext4 или флешку. Настраивать GRUB для чтения LUKS ради одного ISO не стоит, проще держать образ на открытом разделе.
Ventoy это отдельная загрузочная флешка, которая при старте показывает меню всех ISO на ней. Способ через GRUB не требует флешки: образ грузится с диска системы. Если флешка уже есть и нужна универсальность, «Ventoy» удобнее. Если хочется загрузить образ с диска прямо из системы, выбирай loopback в GRUB.
Загрузка live-ISO из меню GRUB решается двумя способами: loopback для больших образов вроде Arch Linux и memdisk для маленьких утилит. Запись добавляется в /etc/grub.d/40_custom, конфиг перегенерируется через grub-mkconfig. Главные условия: ISO на читаемом разделе, непрерывный файл и правильный путь. Если образ не грузится, иди по списку: путь, файловая система, фрагментация, контрольная сумма. После использования пункт и образ лучше удалить, чтобы меню осталось чистым.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии