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

    Собственно, захотелось мне посмотреть на 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.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 44
    • +4
      А почему бы не скопировать файлы дистрибутива на, например, флешку, и не поправить загрузчик так, чтобы система загрузилась оттуда? И не возникло бы проблем с подмонтированными разделами.
      • +3
        эм. вроде автор написал: «Загрузки с флешек в биосе тоже нет»
        • +2
          Думаю, heathen имел ввиду просто подгрузку iso из флешки вместо винта загрузчиком grub2
          • +6
            Нет, я имел ввиду именно распакованные на флешку файлы из iso-образа плюс пункт в основном загрузчике (на жестком диске) для загрузки ядра с флешки.
        • +1
          Загрузчик может не увидеть флешку.
          • +6
            Упс. Только что проверил. Действительно работает. И так действительно проще. Где ж Вы раньше были :-)
            От чего-то думал, что «ноут не поддерживает загрузку с флешек» == «загрузиться с флешки нельзя».
            • 0
              Недавна мучился с загрузкой с ide диска в системе с тремя другими sata дисками. Получился облом — grub не видит hd2 вообще. Есть hd0, hd1, hd3, а hd2 нет. Биос кривой на моём асусе.
              Пришлось извращаться. Так что вам повезло, а может это фишка grub2.
          • +5
            В последней своей версии Virtualbox умеет работать с Natty.
            • +4
              Переименуйте пожалуйста. Grub не умеет «загружать ISO». Здесь речь идёт о том, что:
              — grub может работать с файлами образов таким же образом, как и с физическими устройствами;
              — Ubuntu можно загрузить «подмонтировав» ISO, потому что это позволяет сделать casper.
              • 0
                Предложите вариант. Как будет звучать «правильно».
                • 0
                  Например: «Загрузка Ubuntu используя ISO-образ».
                  • 0
                    Деепричастный оборот тут ни к селу, ни к городу. «Загрузка Ubuntu из ISO образа» тогда уже.
                  • +2
                    Хм. Тогда не понятно о чем статья. Хотел рассказать именно о фиче grub2. Ведь, во-первых, убунту не единственный дистрибутив, который «знает», что может быть загружен таким образом. Во-вторых, есть уйма маленьких дистрибутивов, все содержимое которых помещается в initrd. У них нет никакого casper-подобного хука. И тем не менее они загружаются и работают.
                    • 0
                      Grub не умеет загружать ISO, он умеет монтировать образы файловых систем, в том числе и iso9660. Загружать ISO может, например, grub4dos или memdisk (если образ небольшой).

                      > Во-вторых, есть уйма маленьких дистрибутивов, все содержимое которых помещается в initrd.
                      Но рассказали-то вы именно про загрузку Ubuntu из ISO-образа, когда не работает CD-ROM :)
              • 0
                Я делал немного не так — монтировал iso в основной системе, копировал файлы с него в пустой раздел и уже оттуда запускал.

                Путем нехитрых манипуляций можно добиться чтобы те же драйвера не надо было устанавливать при каждой загрузке.
                • 0
                  Это был мой «План А». И он завершился неудачно. Примонтировал iso с «mount -o loop», создал новый раздел на жестком диске, отформатировал и скопировал туда все файлы с iso. После перезагрузки, ядро и initrd-образ нашлись и загрузились, а когда начал исполняться init, посыпались ошибки с /dev/sr0: cистема явно хотела читать из дисковода. В конце концов init завершался с ошибкой.
                  • 0
                    Помню такую проблему, но не помню как её решил :(
                • НЛО прилетело и опубликовало эту надпись здесь
                  • НЛО прилетело и опубликовало эту надпись здесь
                  • –3
                    очень даже можете запустить Unity под виртуалкой.
                    Например вот так ;)
                    • 0
                      Ух ты! А virt-manager (kvm) так умеет?
                      • 0
                        я как то не обратил на это внимание )
                        Да и ткните меня носом в то место в статье где слово «виртуалка» конкретизируется деталями гипервизора )))
                        Может комуто пригодится и мой «хауту» )
                      • +2
                        «Доступ к публикации закрыт»
                        • –3
                          теперь открыт ) не забывайте минусовать )
                      • 0
                        Интересно, какие ФС поддерживает. Не плохо добавить бы инфу об этом.
                        • –4
                          А взять и просто поставить другую графическую среду ваши бубунты, как я понял, не позволяют?
                          • 0
                            С добрым утром!
                            grub-0.97 это умеет тоже.
                            На хабре по тэгу grub можно найти варианты загрузки с ISO образа.
                            • +1
                              grub-legacy не умеет.
                              Умеет grub4dos или через memdisk.
                            • +2
                              Первый груб с помощью одной маленькой приблуды тоже умеет iso. Но то что второй груб умеет это нативно это радует.
                              • 0
                                Когда то давно искал способ загрузиться с ISO образа — не нашел, и забил на эту идею… Теперь буду знать, что так можно, и некоторые задачи будет проще решить. Спасибо!
                                • +1
                                  В VirtualBox Unity3D работает. Только необходимо поставить guest additions из репозитория, а не из комплекта к VB.
                                  • +1
                                    мне хватило только комплекта, плюс выставление поддержки 3D в настройках машины
                                  • 0
                                    Польза от этой «фишки» есть — параноикам можно не мучиться при работе в клиент-банке (нормальных банков) — не используя CD-привод, грзиться в live-cdю
                                    • +2
                                      Я у себя сделал проще:
                                      sudo -s
                                      mkdir /boot/images
                                      cp /path/to/file.iso /boot/images/
                                      update-grub
                                      • 0
                                        Сделал так же новая строка не появилась. Что я делаю не так?
                                        • +1
                                          Извиняюсь. Предварительно необходимо выполнить
                                          sudo apt-get install grub-imageboot
                                          В Debian пакет есть только в testing-ветке.
                                        • 0
                                          Не очень экономно — держать в памяти еще и образ диска. Но для KolibriOS или, да простят меня маководы, EmpireEFI — в самый раз.
                                        • 0
                                          и как тянет на стареньком ноуте Kubuntu?
                                          • 0
                                            Не то чтобы летает, но жить можно.
                                          • 0
                                            Я бы воспользовался qemu для установки, но вариант с GRUB'ом тоже неплох, да.
                                            • 0
                                              > Например, если Вы загрузили ubuntu-11.04-desktop-amd64.iso в раздел /dev/sda1, строчка изменится на set root=(hd0,1).

                                              Скорее, на (hd0,0)
                                              • 0
                                                В grub2 разделы нумеруются начиная с 1 (наверное, спецом изменили, чтоб совпадало с нумерацией в linux).

                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.