Главная >> Инструкции >> Загрузка с ISO образа в Grub

Загрузка с ISO образа в Grub

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

Первый и второй способы не очень выгодны так как требуют очень много места на жестком диске, с другой стороны, для третьего способа нужно иметь CD диск или USB флешку для хранения образа и загрузчика. Но есть еще один вариант - хранить ISO образ на жестком диске, и загружаться с него по мере надобности. Здесь не нужно столько дискового пространства как при установке, и не нужен внешний носитель информации. В этой статье будет рассмотрена загрузка с ISO образа в Grub.


Содержание статьи

Что нам понадобится

В этой статье мы будем использовать загрузчик Grub, впрочем, он и так используется в большинстве дистрибутивов Linux. Также нам понадобится ISO образ, с которого будем загружаться и вы должны знать на каком разделе он размещён. Удобнее всего разместить его на загрузочном разделе. Чтобы узнать какой раздел диска у вас загрузочный выполните:

fdisk -l

Загрузочный раздел будет помечен знаком * в колонке Загрузочный или Boot. Например, у меня /dev/sda2 или как пишется в Grub hd0,2 - загрузочный.

 

Разделы /dev/sda1 и /dev/sdb3 будут называться в Grub hd0,1 и hd1,3 соответственно. В синтаксисе Grub именование дисков начинается с нуля, а именование разделов с единицы.

Загрузка с ISO образа в Grub

Сначала откройте файл /etc/default/grub и закомментируйте там эту строку если она там есть:

GRUB_HIDDEN_TIMEOUT=0

Перед строчкой должна стоять решетка. Сохраните изменения, а затем откройте файл /etc/grub.d/40_custom. Здесь мы добавим пункт для загрузки с образа, синтаксис выглядит следующим образом:

menuentry "Заголовок пункта" {
set isofile="Адрес ISO файла"
loopback loop Раздел в форме записи Grub на котором расположен ISO$isofile
Параметры загрузки ядра
}

Перед тем, как переходить к настройке Grub надо выяснить ещё один момент. Как в оригинальном образе выполняется загрузка дистрибутива. Обычно в каждом загрузочном образе есть папка Grub в которой можно посмотреть файл grub.cfg или другой подобный, например loopback.cfg и узнать какими строками там загружается ядро:

 

Только перед путями к файлам надо добавить адрес (loop). Путь к образу надо указывать от начала того диска, на котором он расположен. Например, если диск расположен в корне загрузочного раздела, который монтируется в /boot, то и путь будет /файл.iso, а не /boot/файл.iso. Теперь можно переходить к примеру, запись для загрузки Puppy Linux будет выглядеть вот так:

menuentry "Puppy 20.04 Live" {
set isofile="/puppylinux.iso"
loopback loop (hd0,2)$isofile
linux (loop)/vmlinuz pfix=fsck pmedia=cd findiso="/puppylinux.iso"
initrd (loop)/initrd.gz
}

 

 

 

Каждый дистрибутив индивидуален и надо с каждым разбираться отдельно. Если вы хотите запускать Gparted:

menuentry "GParted Live amd64" {
set isofile="/gparted-live-0.18.0-2-amd64.iso"
loopback loop (hd0,2)$isofile
loopback loop $isofile
linux (loop)/live/vmlinuz boot=live config union=aufs noswap noprompt ip=frommedia toram=filesystem.squashfs findiso=${isofile}
initrd (loop)/live/initrd.img
}

Или даже Fedora Linux:

menuentry "Fedora Live" {
set isofile="/Fedora.iso"
loopback loop (hd0,2)$isofile
loopback loop $isofile
linux (loop)/isolinux/vmlinuz0 root=live:CDLABEL=Fedora-Live rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 iso-scan/filename=${isofile}
initrd (loop)/isolinux/initrd0.img
}

Обратите внимание, что опции будут меняться в зависимости от дистрибутива и расположения в нем загрузочных файлов. Кроме того, важно то где размещен ISO образ, если ваш домашний каталог зашифрован лучше его хранить на загрузочном разделе, как в примерах выше.

Хотите больше? Можно загрузится с ISO для автоматического выполнения каких-либо действий. Например, если вы параноик и хотите иметь возможность быстро стереть свой жесткий диск можно использовать DBAN. Но будьте осторожны так как это сотрет все данные без возможности восстановления.

menuentry "Darik's Boot and Nuke" {
set isofile="/dban.iso"
loopback loop (hd0,1)$isofile
linux (loop)/dban.bzi nuke="dwipe" silent
}

Есть еще много вещей, которые можно сделать с помощью загрузки ISO образа в Grub, неважно хотите ли вы очень быструю Live систему или иметь возможность уничтожить все кончиком пальца.

Загрузка windows с iso образа в Grub

Если вам нужна загрузка Windows с ISO образа Grub, то это делается тоже не очень сложно, но немного по другому. Сначала нужно скачать syslinux и извлечь оттуда memdisk в папку /boot/. Это должна быть папка, куда установлены файлы Grub. Дальше добавьте в конфигурационный файл 40-grub.conf такие строки:

menuentry "Boot Windows" {
search -f "--set-root /Windows.iso"
insmod memdisk
linux16 /boot/memdisk iso
initrd16 /Windows.iso
}

Образ Windows должен лежать в корне одного из разделов и называться Windows.iso, дальше команда search автоматически найдет этот раздел и установит его в качестве корня. Потом останется только загрузка windows с iso образа grub.

Завершение настройки Grub

Мы все подготовили, теперь остается обновить конфигурацию загрузчика Grub, чтобы новые пункты добавились в /boot/grub/grub.cfg и появились в меню загрузки. Для Ubuntu команда будет выглядеть вот так:

sudo update-grub

В других дистрибутивах может понадобится команда:

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

Затем можно перезагрузиться и посмотреть что получилось:

Если что-то пошло не так, вы можете нажать клавишу E и редактировать этот пункт меню чтобы попытаться исправить проблему прямо в загрузчике.

 

Выводы

Теперь вы знаете как выполняется загрузка iso образа grub, здесь нет ничего сложного, но зато это очень полезная возможность получить несколько систем на своем компьютере, затратив при этом минимум памяти и времени на их установки. Если у вас остались вопросы, спрашивайте в комментариях!

22 комментария к “Загрузка с ISO образа в Grub”

  1. Так можно и установить программу GRML-rescueboot (она в репах есть)
    и тоже грузится с ISO.
    Она создаст в boot пустую папку GRML, под рутами скопировать туда iso-файл, потом sudo update-grub и вуаля - появится в грубе пункт загрузки из iso.

    На мой нубский взгляд проще.
    Правда с Windows.iso не пробовал, но думаю грузанёт.

    Ответить
  2. В ubuntu я установил пакет grub-imageboot и в папку /boot/images закидываю iso образы. Если папки то создайте её. Менять место нахождение образов можно в файле /etc/grub.d/60_grub-imageboot. Потом просто даю команду update-grub.

    Ответить
  3. Доброго времени суток, как сделать доп. меню загрузки с acronis?
    Делал по аналогии с Windows.iso, при загрузке с выбранного пункта меню grub пишет ошибку "no such device: --set-root /ati.iso"
    Конфиг 40_custom:
    menuentry "Acronis"{
    search -f "--set-root /ati.iso"
    insmod memdisk
    linux16 /boot/memdisk iso
    initrd16 /ati.iso
    }

    Ответить
  4. я бы хотел решить другую задачу, приносят мне системный блок, чтобы я установил ОС Linux.
    Я бы хотел присоеденить свой жесткий диск к принесенному системному блоку как загрузочный, запустить с него Grub (Grub2) и запустить установку с ISO образа, но на моей жестком диске должна уже быть установлена cистема Linux. Я работаю в Redhat; CentOS; Fedora дистрибутивах. Как себя поведет установленный Linux при запуске на чужом системном блоке на этапе boot загрузки и запуска загрузчика Grub? Системе будет безразлично, что системный блок чужой?

    Ответить
  5. Попробовал добавить mx linux в граб efi. Добавился и запустился без проблем. Однако на стадии установки потребовал флешку или диск, соответственно дальше никак. Может есть какой-то вариант решения проблемы?

    Ответить
  6. Не понятно зачем такие навороты??? Блин если есть загрузочный образ или Live(CD,DVD) то почему-бы grub просто не примонтировать образ и передать ему управление ???

    Ответить
  7. «Или даже Fedora Linux:

    menuentry "Fedora 20 Live Desktop x86_64" {
    set isofile="/boot/Fedora-Live-Desktop-x86_64-20-1.iso"
    loopback loop (hd0,1)$isofile
    loopback loop $isofile
    linux (loop)/isolinux/vmlinuz0 root=live:CDLABEL=Fedora-Live-Desktop-x86_64-20-1 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 iso-scan/filename=${isofile}
    initrd (loop)/isolinux/initrd0.img

    Зачем два раза "loopback loop"?

    Ответить
  8. Не совсем въехал в "Загрузка windows с iso образа в Grub"...
    У меня исошка WIN7ru_ultimate - образ установщика форточек.
    После того, как GRUB передаст управление этому установщику - стартанёт установка детища мелкомягких на комп. Со всеми проистекаемыми из этого последствиями. Самым "тяжёлым" (хотя и устраняемым постфактум) из которых будет перезаписывание в бут-сектор загрузчика винды и самого GRUB...
    Меня терзают смутные сомненья, что для избирательной загрузки (windows с iso образа - или Линукс) мне нужен не совсем этот образ. А собственно образ уже установленных на этом жележе форточек...
    N'est-ce pas?

    Ответить
    • Именно так. Но так и должно быть, при обычном запуске с флешки, на которую записан ISO и установке Windows загрузчик тоже затирается. Если хочется запустить не установщик, то существуют образы Windows PE, предназначенные, в основном, для восстановления системы.

      Ответить
  9. Всю голову сломал. Как Arch загрузить в grub, который грузится по PXE?
    Сам grub menu грузится. Вот конфиг части граба. С виду не очень работоспособен. Брал с рус вики арча, на английской такого нет.

    dir=/pxe2
    arch=x86_64
    insmod regexp # для шаблонов * в именах файлов
    probe -s root_uuid -u $root # получаем UUID для подстановки в img_dev=

    for iso in $dir/archlinux-*-$arch.iso ; do # ищем образ(ы) Arch по шаблону
    if [ ! -f "$iso" ] ; then continue; fi # только если образ существует
    regexp -s build 'archlinux-(.+)-'$arch "$iso" # получаем из имени образа дату сборки

    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"

    Ответить
  10. menuitem команда не найдена 🙁
    теперь все модули граба -- это баш-скрипты, а хочется быстренько прикрутить gparted.iso

    Ответить
  11. Народ, Привета! Я начинающий линуксоид.
    Вопрос такой: мне нужно с помощью Grub загрузить образ линукс, но беда в том, что, он весит больше 4гб.
    И фат32, котрый нужен для загрузочного диска UEFI, и многих других служебных сборок типа Alcid или Strelec не позволяет записать файл образа непосредственно в раздел на котором установлен Grub. Какую команду нужно выполнить чтобы Grub увидел мой ISO на 2м разделе диска разбитом в NTFS?

    Ответить
  12. title GParted live (To RAM)
    root (hd0,0)
    kernel /live/vmlinuz boot=live union=overlay username=user config components quiet noswap toram=filesystem.squashfs ip= net.ifnames=0 nosplash
    initrd /live/initrd.img

    Ответить

Оставьте комментарий