Интересная фича 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.
    Поделиться публикацией

    Комментарии 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
                      Тоже норм.
                      +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).
                                                    0
                                                    действительно

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

                                                Самое читаемое