Настройка запуска меню загрузчика GRUB при установке Linux с Windows на один компьютер

Тема в разделе "Linux", создана пользователем CLAY, 8 мар 2017.

  1. CLAY

    CLAY Member

    Сообщения:
    419
    Симпатии:
    5
    Настройка запуска меню загрузчика GRUB при установке Linux с Windows на один компьютер с таблицей разделов GPT


    Привет! Сегодня мы рассмотрим ситуацию, когда при двойной установке Linux Windows загрузчик GRUB не стартует, давая возможность выбрать ОС, а автоматически загружается Windows. Немного теории:

    GRUB (GRand Unified Bootloader) — программа-загрузчик операционных систем.
    GRUB может загрузить любую совместимую с ней операционную систему. Среди них: Linux, FreeBSD, Solaris и многие другие. Кроме того, GRUB умеет по цепочке передавать управление другому загрузчику, что позволяет ему загружать Windows (через загрузчик NTLDR), MS-DOS, OS/2 и другие системы.
    Значит с теорией мы немного разобрались (думаю этого будет достаточно), теперь же рассмотрим, какие бывают подводные камни, при установке Dual Boot Windows и Linux на одном компьютере.

    [​IMG]

    Эксперимент производился на рабочей станции со следующими характеристиками:

    Base Board Information

    • Manufacturer: Acer
    • Product Name: Aspire XC600

    Memory Device

    • Size: 4096 MB
    • Type: DDR3
    • Speed: 1333 MHz
    • Manufacturer: Kingston
    • Rank: 2

    HDD

    • product: ST500DM002-1BD14
    • vendor: Seagate
    • physical id: 0.0.0
    • bus info: Ссылка доступна только зарегистрированным пользователям:0.0.0
    • logical name: /dev/sda
    • size: 465GiB (500GB)
    • capabilities: gpt-1.00 partitioned partitioned:gpt

    Доказано, что проблем с установкой Debian 8.6 Jessie совместно с Windows 10 не обнаружено. Debian корректно прописывается в автозагрузке, GRUB запускается без ошибок и две ОС также работают нормально.

    Но, как показала практика, не со всеми дистрибутивами такое происходит. При установке Ubuntu 16.04.1 вместо Debian на ту же рабочую станцию вылез первый подводный камень — GRUB не стартовал, и Windows 10 автоматом шла на загрузку.

    Решение проблемы было найдено спустя недели три-четыре (тогда уже надоело считать, сколько времени убито на решение проблемы). Оно оказалось неожиданным, но в тоже время вся система заработала. Значит, если вы столкнулись с такой же проблемой, приведенная ниже инструкция может вам пригодится и сэкономить кучу времени.

    Важно! До начала выполнения инструкции нужно подготовить LiveCD с дистрибутивом Linux Mint — все операции мы будем выполнять на нем (я выбрал этот дистрибутив из-за того, что на него спокойно можно установить Midnight Commander, что сложно сделать на LiveCD с Ubuntu, так мы получаем больше пространства для маневров). Также стоит заметить, что команда из под консоли update-grub вам не поможет, так как она рассчитана на случай, когда GRUB запускается, но не видит другие ОС кроме Линукса. Также рекомендую создавать резервные копии файлов/каталогов, над которыми вы осуществляете хоть малейшие изменения.

    1. Через терминал, с правами root смонтировать раздел с EFI в папку /mnt. В моем случае, это была команда mount /dev/sda2 /mnt.

    2. Введите команду sudo -s и подтвердите пароль (он пустой по умолчанию) для последующих операций (многие советуют не делать этого, а вводить sudo и команду для выполнения — я поддерживаю это мнение, но инструкция рассчитана на опытных пользователей системы Linux, которые понимаю, что делают все на свой страх и риск).

    3. Запустить Midnight Commander командой mc.

    4. Найти в файловой системе следующий каталог: EFI в папке /mnt.

    5. Переименовать каталог Microsoft во что-нибудь другое, например в Microsoft2.

    6. Создаем новый каталог с именем Microsoft.

    7. Заходим в только что созданный каталог Microsoft и частично создаем внутри его иерархию папок аналогичную старому Microsoft (тому, что переименовали). В моем случае он имел такую структуру папок: /boot/, затем куча папок и файл bootmgfw.efi рядом с ними. Нужно воссоздать структуру папок ровно до этого файла. Т.е. всё, что лежит рядом с ним — не нужно, а всё, что идет до него (т.е. родительские папки, соседние с ними тоже не нужны) воссоздаем в нашей новой папке Microsoft. В моем случае понадобилось создать только папку /boot, итоговый путь до нового каталога вышел таким: /EFI/Microsoft/boot. Можно просто скопировать все папки и файлы — проверено, это работает и можно не создавать все вручную.

    8. Находим в каталоге из шага 6 папку с именем нашего дистрибутива Линукса, в нашем случае это Ubuntu. Копируем (оригиналы файлов и папку ubuntu на всякий случай оставляем, не помешают) все файлы из данной в папки в итоговый каталог, созданный на предыдущем шаге: /EFI/Microsoft/boot.

    9. В получившейся файловой системе находим файл grubx.efi или grubx64.efi (будет только один из них: в зависимости от разрядности установленного Линукса). Переименовываем его в bootmgfw.efi.

    10. Находим файл /boot/grub/grub.cfg в файловой системе установленного Линукса. Открываем его для редактирования. Внутри него находим слово «Microsoft» в контексте строки, начинающейся с «chainloader» и заменяем это слово (должно быть только одно вхождение и именно в строке с «chainloader», так что не ошибетесь) на название каталога, в который мы переименовали Microsoft (т.е. на Microsoft2 в нашем примере). Сохраняем изменения в файле.

    Также, в этом файле вы можете поменять названия в списке, который выводит GRUB. Например, вместоopenSUSE Leap 42.2 27.01 в части кода:

    menuentry "openSUSE Leap 42.2 27.01" --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option "gnulinux-simple-996b3ed5-150f-4de3-a40c-6d385e27d6de" {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_gpt
    insmod ext2
    set root="hd0,gpt6"
    if [ x$feature_platform_search_hint = xy ]; then
    search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 996b3ed5-150f-4de3-a40c-6d385e27d6de
    else
    search --no-floppy --fs-uuid --set=root 996b3ed5-150f-4de3-a40c-6d385e27d6de
    fi
    echo "Загружается Linux 4.4.36-8-default …"
    linuxefi /boot/vmlinuz-4.4.36-8-default root=UUID=996b3ed5-150f-4de3-a40c-6d385e27d6de ro resume=/dev/sda7 splash=silent quiet showopts
    echo "Загружается начальный виртуальный диск …"
    initrdefi /boot/initrd-4.4.36-8-default
    }

    Написать openSUSE The best choice!:

    menuentry "openSUSE The best choice!" --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option "gnulinux-simple-996b3ed5-150f-4de3-a40c-6d385e27d6de" {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_gpt
    insmod ext2
    set root="hd0,gpt6"
    if [ x$feature_platform_search_hint = xy ]; then
    search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 996b3ed5-150f-4de3-a40c-6d385e27d6de
    else
    search --no-floppy --fs-uuid --set=root 996b3ed5-150f-4de3-a40c-6d385e27d6de
    fi
    echo "Загружается Linux 4.4.36-8-default …"
    linuxefi /boot/vmlinuz-4.4.36-8-default root=UUID=996b3ed5-150f-4de3-a40c-6d385e27d6de ro resume=/dev/sda7 splash=silent quiet showopts
    echo "Загружается начальный виртуальный диск …"
    initrdefi /boot/initrd-4.4.36-8-default
    }

    Хоть мелочь, а приятно! Остальное в коде советую не трогать.

    Если трудно разобраться с управлением Midnight Commander (в этом нет ничего страшного, у меня тоже в первый раз были проблемы с этой программой), все операции можно выполнить в файловом менеджере Nautilus (или в другом, не суть важно), но изначально запустив его под правами пользователя root.

    После этого идем на перезагрузку и радуемся результату. Но, как оказывается, такая проблема есть и у дистрибутива OpenSUSE Leap 42.2. Как показала практика, если на компьютере установлен дистрибутив OpenSUSE с Windows 10, то приведенная выше инструкция не поможет. Точнее, она поможет, но только ее нужно дополнить. После выполнения основной части выполняем следующие шаги:

    1. После выполнения всех операций заходим в папку /EFI/opensuse/x86_64-efi/ (название итоговой папки x86_64-efi может быть другим в зависимости от архитектуры ПК)
    2. Копируем файл grub.efi (если у вас включена опция Secure Boot, там будет еще файл shim.efi, тогда советую скопировать их вместе)
    3. Заходим в папку /EFI/Boot и удаляем все файлы, которые там есть (при обновлении загрузчика они снова появятся, но в этом нет ничего страшного)
    4. Вставляем файл (или файлы), которые мы скопировали и спокойно идем на перезагрузку.
      Вот и вся инструкция. Думаю, кому-то пригодится…

    P.S. Если же у вас все хорошо, GRUB с OpenSUSE запускается, но не видит Windows, радуйтесь — проблема решается всего одной к
  2. Trk9

    Trk9 New Member

    Сообщения:
    4
    Симпатии:
    0
    полезно, конечно. но вот зачем вообще ставить линуху рядом с виндой? проще установить на какой-нить сандиск ультра тот же минт или легенькую xfce кали... там в принципе даже swap раздел делать не надо. потрачено 1,,5к на флешку, зато удобно то как!)))
  3. Trk9

    Trk9 New Member

    Сообщения:
    4
    Симпатии:
    0
    а граб сразу на флешку прописать и норм.

Поделиться этой страницей