Pull to refresh

Интересная фича Grub2: загрузка из ISO-файла

Reading time 3 min
Views 72K
Собственно, захотелось мне посмотреть на Unity. По картинкам и видео – вроде ничего. Да вот беда. В виртуальной машине его не запустишь — 3D требует. Сам я KDEшник. Основной ОС на ноутбуке является kubuntu. Ну, думаю, можно поставить второй системой. Свободное место, вроде, есть.

Ок. Качаю образ Natty, прожигаю а вот хрен. Оказалось, не работает мой CD-ROM. Ноут уже довольно старенький. Загрузки с флешек в биосе тоже нет. После кратковременной паники было найдено решение.

Оказалось, что grub2 научился понимать формат ISO 9660 и может загружать ОС прямо из ISO-образа, расположеного на жестком диске. Как выяснилось далее, не все системы готовы к такому повороту событий. Многие по тем или иным причинам приходят в замешательство при загрузке. К счастью, Ubuntu не является одной из них.

Ну, приступим. Первым делом добавляем новый пункт меню в Grub2. Для этого правим /etc/grub.d/custom_40, добавляя в конец файла следующие строки:

menuentry "Ubuntu Live" {
set root=(hd0,7)
loopback loop /ubuntu-11.04-desktop-amd64.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu-11.04-desktop-amd64.iso noeject noprompt --
initrd (loop)/casper/initrd.lz
}

И что же мы тут наворотили:
В “set root” указываем раздел, в котором находится образ iso
В “loopback loop” создаем loop-устройство, к которому монтируем файл нашего iso (посмотрите, например, мануал mount, раздел “Loop Device”, если не знаете, что это за устройство loop).
Две следующие строчки указывают нахождение ядра и образа initrd относительно корня loop устройства (путь к файлам ядра и initrd внутри ISO-образа).

Если кто попытается повторить, имейте в виду:

1. В set root=(hd0,7) следует заменить 7 на номер раздела на вашей машине, в котором находится iso-шный образ системы. Например, если Вы загрузили ubuntu-11.04-desktop-amd64.iso в раздел /dev/sda1, строчка изменится на set root=(hd0,1).
2. Я загрузил ISO в корень своего home-раздела (коим является (hd0,7). Если у Вас образ окажется в какой-нибудь папке, указывайте полный путь к образу относительно корня.

Обновляем конфигурационный файл grub2:
update-grub

Собственно далее я создал новый раздел для будущей второй системы при помощи fdisk, и перезагрузился.

Как и ожидалось, в меню загрузки появился новый пункт “Ubuntu Live”, который и был незамедлительно выбран. При загрузке никаких приключений не произошло, однако вместо Unity меня встретил Gnome :-) Дрова для моей nvidia в дистр не включены.

Самое время начать установку. Жму install. После выбора разделов для /, swap и /home меня ждал очередной фейл. Ubiquity на отрез отказался продолжать, аргументируя тем, что у меня есть подмонтированный раздел. Для того, чтобы создать loop-устройство с нашим образом Ubuntu, grub2 сначала смонтировал раздел, на котором находился этот самый образ. И не важно, что этот раздел никак не фигурировал среди претендующий на какую бы то ни было модификацию при установке, инсталлятор Ubiquity был непреклонен и установку продолжать отказывался.

После непродолжительного поиска в гугле оказалось, что я не первый, кто с этим столкнулся. Проблема решалась удалением строчки с примонтированным разделом (в моем случае это был /dev/sda7) из /etc/mtab. Сделать это нужно было до начала установки. После ее удаления все пошло как по маслу. Установка завершилась успешно, я поставил драйвер видеокарты и после перезагрузки… TA-DA.

image

После успешного опыта с Ubuntu, я решил посмотреть насколько универсален данный метод загрузки. Вынужден сообщить, что у многих дистрибутивов с ним не все так гладко.
Во-первых, в основной системе (в той, чьим загрузчиком мы пользуемся), должен быть установлен grub2. Grub и остальные загрузчики не умеют грузить систему из ISO на диске.

Проблема так же в том, что разработчики дистрибутива, который мы загружаем данным методом, должны явно предусмотреть вариант загрузки из ISO-файла. В Ubuntu, если вы глянете на сточку конфигурационного файла grub2, в которой указывается путь к ядру, увидите, что ядру передается специальный параметр iso-scan/filename, который явно указывает, что система грузится из ISO-файла.

Работает загрузка из ISO-файла в дистрибутивах основаных на Ubuntu (Mint, Kubuntu, Mythubuntu, BackTrack...). Есть поддержка загрузки из ISO-файла в Gentoo, SystemRescueCD, нескольких менее именитых дистрибутивах: Sidux, Grml, Xbmc. Так же этим методом можно пользоваться для загрузки маленьких дистрибутивов, которые после распаковки initrd полностью помещаются в память и не используют файлы в образе. Например, у СentOS, Debian (да наверное и у многих других дистрибутивов) есть так называемые “netinstall”-образы, которые содержат только минимум и все пакеты устанавливаются по сети.

Fedora пока не “умеет” загружаться этим методом (хотя баг в их багтрекере висит и работа в этом направлении идет). Так же этот метод пока не работает в Arch и Debian.
Tags:
Hubs:
+101
Comments 44
Comments Comments 44

Articles