Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

Загрузка с ISO через GRUB: live-образ в меню

Да, GRUB умеет загружать live-ISO прямо из своего меню. Для больших образов вроде Arch Linux используется модуль loopback, который монтирует ISO как файловую систему, а для маленьких утилит вроде memtest86+ подходит memdisk из пакета syslinux. Пункт меню добавляется в файл /etc/grub.d/40_custom, после чего конфиг перегенерируется командой grub-mkconfig. Чаще всего такой пункт нужен, чтобы загрузить live-систему для установки или ремонта, например когда GRUB упал в rescue, об этом случае читай статью «grub rescue: что делать». Тебе понадобятся сам ISO, права root и пара минут на правку одного файла.

Как добавить live-ISO в меню GRUB через loopback?

Модуль loopback позволяет обращаться к ISO-файлу как к обычному диску. GRUB читает образ через файловую систему iso9660 и загружает из него ядро и initramfs. Всё происходит без записи на флешку и без перепрошивки чего-либо. Модули loopback и iso9660 подгружаются автоматически, отдельно их подключать не нужно.

Куда положить ISO

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.

Правка /etc/grub.d/40_custom

Открой файл от имени 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
}

Разбор по строкам:

  • set isofile задаёт путь к образу.
  • loopback loop $isofile монтирует ISO как устройство loop.
  • linux загружает ядро из образа и передаёт ему параметры archiso_*. Они говорят live-системе, что она запущена из ISO.
  • initrd подхватывает initramfs из того же образа.

Параметры ядра в строке linux можно менять под свои задачи, разбор аргументов есть в статье «Кастомные аргументы ядра в GRUB».

Проверка записи без перезагрузки

Проверить, что GRUB читает образ, можно прямо из командной строки. В меню нажми C и выполни:

loopback loop /boot/archlinux.iso
ls (loop)/

Первая команда монтирует ISO как устройство loop, вторая показывает его содержимое. Если вместо списка файлов появляется ошибка, образ не читается: проверь путь, файловую систему раздела и фрагментацию. После проверки выйди из командной строки командой exit или просто перезагрузись.

Перегенерация grub.cfg

После правки 40_custom перегенерируй конфиг:

sudo grub-mkconfig -o /boot/grub/grub.cfg

Проверь, что пункт «Arch Linux ISO» появился в меню, и перезагрузись. Если пункта нет или загрузка падает с ошибкой, смотри следующий раздел.

Почему GRUB не видит 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)/.

Как загрузить ISO с флешки или другого диска?

Если образ лежит не на системном разделе, а на флешке или втором диске, путь в 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 ищет по всем подключённым дискам, поэтому флешка должна быть вставлена до выбора пункта меню.

Почему live-система падает при загрузке?

Если GRUB запустился, но live-система не доходит до рабочего стола, причины обычно такие.

Неверные параметры archiso_*

Строка linux должна содержать archiso_loop_sfs. Этот параметр говорит системе, что squashfs лежит внутри ISO. Уберёшь его, и загрузка упадёт с ошибкой, что не найден файл образа. Остальные параметры archiso_pxe_* нужны для сетевой загрузки, их можно оставить как есть.

Повреждённый образ

ISO, скачанный с ошибками, распаковывается частично. Симптомы разные: падение в середине загрузки, ошибки чтения squashfs, внезапный выход в консоль. Лечится перекачиванием образа и проверкой контрольной суммы.

Не хватает оперативной памяти

live-система распаковывает squashfs в оперативную память. Если её мало, загрузка обрывается. Для Arch ISO нужно минимум около полугигабайта, для комфортной работы с установщиком лучше гигабайт и больше.

Несовпадение архитектуры

Если скачал ISO для другой архитектуры, например ARM вместо x86_64, ядро из образа не запустится. Проверь, что образ соответствует твоей системе, ещё до добавления записи в меню.

Как загрузить маленький ISO через memdisk?

memdisk из пакета syslinux эмулирует диск и загружает содержимое ISO в оперативную память. Подходит для небольших образов: memtest86+, FreeDOS, диагностические утилиты. memdisk сам определяет, эмулировать дискету или жёсткий диск, по размеру образа, для пользователя это неважно. Работает он только с загрузочными ISO: образ должен уметь стартовать сам, как дискета или жёсткий диск.

Установка memdisk

sudo pacman -S syslinux
sudo cp /usr/lib/syslinux/bios/memdisk /boot/

Пример записи для memtest86+

Образ memtest86+ можно взять из официального репозитория: пакет memtest86+ кладёт ISO в каталог /usr/share/memtest86+/. Скопируй его в /boot и добавь запись:

menuentry "Memtest86+" {
    linux16 /boot/memdisk
    initrd16 /boot/memtest.iso
}

linux16 и initrd16 это команды загрузки в 16-битном режиме, они передают загрузчику memdisk и сам ISO.

Ограничения memdisk

  • linux16 и initrd16 работают только в BIOS-режиме. На UEFI-системах эти команды недоступны, там используй loopback.
  • Весь ISO загружается в память, поэтому образ должен быть маленьким. Для гигабайтных live-систем memdisk не подходит.
  • Файл должен лежать непрерывно, как и в случае с loopback.
  • Для Arch ISO memdisk бесполезен: образ большой, а структура загрузки рассчитана на loopback.

Как проверить ISO перед загрузкой?

Скачивай образ только с официального сайта и сверяй контрольную сумму:

sha256sum archlinux.iso

Сравни вывод с числом на странице загрузки archlinux.org/download. Если сумма не совпадает, образ повреждён или подменён, не загружай его. Повреждённый ISO может упасть в середине установки или не найти файлы в squashfs. Контрольная сумма считается за пару секунд, не пропускай этот шаг. Перед тем как добавлять пункт в меню, можно проверить образ в виртуальной машине: если ISO грузится там, проблема не в нём, а в записи GRUB.

Как убрать пункт из меню после использования?

Live-пункт в меню это временное решение. После установки системы или ремонта загрузчика убери его:

  1. Открой /etc/grub.d/40_custom и удали блок menuentry.
  2. Перегенерируй конфиг:
sudo grub-mkconfig -o /boot/grub/grub.cfg
  1. Удали сам ISO, а заодно memdisk, если копировал его в /boot.

Сам файл 40_custom остаётся на месте, из него уходит только лишняя запись. Если оставить пункт, а файл удалить, при выборе GRUB выдаст ошибку file not found. Заодно, пока возишься с меню, можно настроить его внешний вид, статья «Тема оформления GRUB: фон».

Частые вопросы

Работает ли loopback на UEFI-системах?

Да. loopback это обычный модуль GRUB, он работает и в BIOS, и в UEFI. А вот memdisk нет: команды linux16 и initrd16 доступны только в BIOS-режиме. На UEFI-системах для live-ISO всегда используй loopback.

Почему при выборе пункта появляется ошибка file not found?

Скорее всего, неверный путь к ISO или файл лежит на разделе, который GRUB не читает. Проверь путь через командную строку GRUB (клавиша C) и команду search –file. Затем проверь фрагментацию файла: разбитый на куски ISO loopback не прочитает. Убедись также, что имя файла в записи совпадает с реальным с точностью до регистра букв, GRUB к этому чувствителен.

Можно ли так загрузить ISO другого дистрибутива?

Можно, но пути к ядру и initramfs у других дистрибутивов другие. У Arch Linux структура ISO стабильна, поэтому запись работает годами. Для Debian или Ubuntu придётся подставлять свои пути к vmlinuz и initrd. Перед правкой посмотри структуру образа командой ls (loop)/ в командной строке GRUB.

Что делать, если ISO лежит на зашифрованном разделе?

Перенеси образ на незашифрованный раздел: FAT32, ext4 или флешку. Настраивать GRUB для чтения LUKS ради одного ISO не стоит, проще держать образ на открытом разделе.

Чем этот способ отличается от Ventoy?

Ventoy это отдельная загрузочная флешка, которая при старте показывает меню всех ISO на ней. Способ через GRUB не требует флешки: образ грузится с диска системы. Если флешка уже есть и нужна универсальность, «Ventoy» удобнее. Если хочется загрузить образ с диска прямо из системы, выбирай loopback в GRUB.

Полезные ресурсы

Заключение

Загрузка live-ISO из меню GRUB решается двумя способами: loopback для больших образов вроде Arch Linux и memdisk для маленьких утилит. Запись добавляется в /etc/grub.d/40_custom, конфиг перегенерируется через grub-mkconfig. Главные условия: ISO на читаемом разделе, непрерывный файл и правильный путь. Если образ не грузится, иди по списку: путь, файловая система, фрагментация, контрольная сумма. После использования пункт и образ лучше удалить, чтобы меню осталось чистым.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max