Загрузка операционной системы из командной строки Grub

    У меня на домашнем компьютере стоит две операционные системы, Windows 7 и Linux (Arch). Причем вторая появилась относительно недавно. Да и особых знаний о новой (для меня) ОС не было. Тем не менее систему я поставил и даже относительно настроил под себя. Энтузиазм и программерское любопытство меня пересиливало, поэтому, в качестве ознакомления, стал экспериментировать с различного рода пакетами. К сожалению, не всегда вчитываясь в детали.
    Решил я переставить Grub, а точнее обновиться до Grub2. (Слышал я такое мнение, что в духе Linux принято держать последнюю версию пакета… Про изменения Grub2 хорошо написано тут.)
    Ну и как результат «спешной» установки — перестала грузиться система. Единственное за что можно было зацепиться — это приглашение командной строки:

    grub>


    По нажатию на Tab вываливается список возможных команд. Их существенно меньше чем в командной строке Linux, но их достаточно для загрузки системы. Почитав про grub тут я решил загрузить Windows, все-таки тут я пока себя чувствую увереннее. Для этого нужно было указать где находиться загрузчик ОС и передать ему управление:

    grub> root (hd0,2) [Устанавливаем корневой раздел и монтируем. Тут главное помнить, на каком разделе стоит операционная система]

    Запись (hd0,2) означает устройство диска номер 0 (мастер), раздел номер 2.
    что соответствует устройству /dev/sda2 (в моем случае). У вас это может быть или /dev/hd2, или еще что-нибудь, в зависимости от дистрибутива. Нумерация устройств идет по-порядку и начинается с (hd0,1) или /dev/sda1.
    Далее вводим:

    grub> chainloader +1 [пробел перед "+" важен. сhainloader - передает управление загрузкой по цепочке другому загрузчику. В моем случае это был NTLDR]
    grub> boot


    NTLDR — это загрузчик Windows.
    Система стала грузиться, а раз это дало результат — можно копаться дальше (все-таки не Windows теперь предмет изучений).
    Перезагружаемся и вводим снова.

    grub> root (hd0,6)
    grub> linux /boot/vmlinuz26 root=/dev/sda6 [Загружает указанное linux-ядро (/boot/vmlinuz26) с параметрами(root=/dev/sda6)]


    Тут стоит различать команду root (hd0,6) и параметр root=/dev/sda6. Первое монтирует раздел к среде выполнения. А второе указывает где находиться root загружаемой ОС. В моем случае ядро и корень оказались на одном разделе, хотя это может быть не так.

    grub> initrd /boot/kernel26.img [Загружает указанный initrd-образ]
    grub> boot


    Мне это помогло, надеюсь вам это не пригодиться, а если и пригодиться, то поможет.
    Кстати, если неправильно указать root, процесс загрузки завершиться ошибкой и появиться приглашение вида:
    [ramfs /]#
    Можно набрать:
    [ramfs /]# ls /dev
    и посмотреть список устройств(если вы вдруг его забыли как я).
    Моя проблема установки gurb2 была в том, что при установке затер файл меню grub (обычно он находиться /boot/grub/menu.lst), а новый файл не создал. Для создания файла конфигурации надо было выполнить grub-mkconfig.
    Если у вас сбились настройки grub, то отличия в командах будут минимальными:
    • для загрузки Windows вместо root (h d0,2) надо набирать rootnoverify (hd0,1). Нумерация устройств начинается с (hd0,0), а не (hd0,1). А командой rootnoverify вы устанавите корневое устройство, но не смонтируете его.
    • для загрузки Linux поменяется другая команда: вместо linux вам понадобится команда kernel (полный аналог, даже параметры теже).


    UPD: дописал про отличия загрузки с grub от grub2. Спасибо bliznezz
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 13

    • UFO just landed and posted this here
        +1
        Я один такой лентяй, который бы загрузился с livecd для починки grub?
          0
          у меня просто не оказалось под рукой LiveCD. Пришлось капать вглубь — не жалею ;)
            0
            «копать» конечно же ((
          +1
          мой grub2 от sabayon не умеет rootnoverify (а grub 0.9x умел).
          но это не страшно, т.к. просто root умеет, и ntfs тоже понимает.
            0
            Да, действительно, grub2 не умеет. Пока разбирался и эксперементировал с grub, grub2 — немного попутал.
            Спасибо поправил.
            –1
            Я имел похожий опыт с Ubuntu. LiveCD помог, но после этого решил, что linux не для меня.
              +1
              > Слышал я такое мнение, что в духе Linux принято держать последнюю версию пакета… Про изменения Grub2 хорошо написано тут.

              Кроме этого еще принято читать мануалы перед тем, как изменять критичные для системы компоненты ^^
                0
                > Устанавливаем корневой раздел и монтируем. Тут главное помнить, на каком разделе стоит операционная система

                В арче при обновлении груба управление загрузкой останется у первой версии, поэтому помнить не надо, а использовать команду find, чтобы узнать расположение /boot.

                Ещё стоит пометить, что у вас /boot не вынесен на отдельный раздел, что в арче настоятельно рекомендуется при установке, так как надо понимать, что тут (grub> root (hd0,6) и grub> linux /boot/vmlinuz26 root=/dev/sda6) в первой строке root задаёт с чем работать грубу, а во второй — загружаемой системе, а эти разделы могут быть и разными.
                • UFO just landed and posted this here
                    0
                    я так понимаю, что в grub2 эта команда сменилась на search. При этом результат один и тот же что для /boot/grub/stage1, /boot/grub/stage2, оба указывали на раздел где стоит Linux. Так как же найти Windows 7?
                    0
                    Запись (hd0,2) означает устройство диска номер 0 (мастер), раздел номер 2.
                    что соответствует устройству /dev/sda2

                    А по моему(хотя нет, по grub'овому) (hd0,2) должно быть /dev/sda3

                    Gentoo handbook
                    10.b. По умолчанию: использование GRUB

                    Введение в терминологию GRUB

                    Самое сложное в освоении GRUB — освоиться с тем, как в нем именуются жесткие диски и разделы. Ваш Linux-раздел /dev/hda1, скорее всего, в GRUB станет называться (hd0,0). Обратите внимание на круглые скобки вокруг hd0,0 — они обязательны.

                    Жесткие диски нумеруются, начиная с нуля, а не с «а»; разделы — c нуля, а не с единицы. Нужно помнить, что в виде hd нумеруются только жесткие диски, но не устройства atapi-ide, такие как приводы компакт-дисков. Та же нумерация используется для устройств SCSI (обычно им присваиваются номера большие, чем устройствам IDE, кроме случаев, когда BIOS настроен на загрузку с устройства SCSI). Когда BIOS настроен на загрузку с другого жесткого диска (например, с первичного ведомого), именно этот жесткий диск и становится hd0.

                    Например, если у вас есть жесткий диск /dev/hda, привод CD-ROM /dev/hdb, записывающий CD /dev/hdc, второй жесткий диск /dev/hdd, а устройств SCSI нет, то разделу /dev/hdd7 будет соответствовать (hd1,6). Возможно, это покажется запутанным (так и есть), но, как мы увидим, в GRUB есть механизм автодополнения по tab, облегчающий жизнь обладателям множества жестких дисков и разделов, а также тем, кто теряется в схеме нумерации устройств GRUB.

                    Почувствовав, что к чему, пора установить GRUB.
                      0
                      Нет. В Grub2 сменилась нумерация дисков. В grub было так как вы и описали.

                    Only users with full accounts can post comments. Log in, please.