Linux загрузка с gpt

Настройка запуска меню загрузчика 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 на одном компьютере.

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

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: scsi@0: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 запускается, но не видит другие ОС кроме Линукса. Также рекомендую создавать резервные копии файлов/каталогов, над которыми вы осуществляете хоть малейшие изменения.

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

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

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

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

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

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

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

Читайте также:  Kerish doctor не запускается windows 10

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

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

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

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

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

    Если трудно разобраться с управлением 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, радуйтесь — проблема решается всего одной командной: grub2-mkconfig -o /boot/grub2/grub.cfg, а если у вас стоит Ubuntu, нужно выполнить просто update-grub.

    Для тех же, кого заинтересовала данная тема, рекомендую прочитать статью: «Начальный загрузчик GRUB 2 — полное руководство».

    Источник

    Разбираемся с UEFI и GPT: установка Windows и Kubuntu на один диск

    Помните те времена, когда BIOS был 16-битным с адресным пространством в 1 Мб, а вся информация о загрузчиках писалась в MBR? На смену уже давно пришли более гибкие технологии: UEFI (замена BIOS), и GPT (замена MBR).

    Предыстория: Понадобилось мне недавно на свой домашний десктоп поставить 2 системы, чтобы разграничить окружение. Kubuntu для разработки на Ruby on Rails (ибо работаю удаленно), и Windows для всяких игрушек в свободное время. Хочу заметить, что несколько лет назад это было достаточно просто: один раздел для винды и один раздел для линукса, загрузчик записывался в MBR. Однако, технологии не стоят на месте, и оказалось, что настройка dual boot’а теперь несколько изменилась.

    Итак, начнем.

    Терминология

    GPT (GUID Partition Table, Таблица разделов GUID) — часть спецификации UEFI. UEFI использует GPT так же как BIOS использует MBR.
    Главным отличием GPT от MBR, на мой взгляд, являются:

    • Количество разделов: MBR поддерживает только 4 раздела. Можно и больше, но только через extended partition, что является просто хаком ограничений. GPT поддерживает до 128 разделов.
    • Размер диска: MBR поддерживает диски до 2Тб, в то время как GPT — до 9.4 Зеттабайт (=9.4 × 10^21 байт, или условно 1000 Тб)
    • Порядок загрузки: раньше BIOS загружал MBR, и в нем содержались адреса загрузчиков для каждого раздела диска. Теперь UEFI считывает GPT, находит в таблице все разделы типа efi (на них содержатся загрузчики), и подгружает их в память. Разберем это на примере немного позже.
    Читайте также:  Ноутбуки трансформеры с windows

    Что делаем:

    Устанавливаем следующие ОС на пустой HDD размером в 1 Тб.

    • Windows 8.1 x64. Windows поддерживает загрузку с GPT начиная с Windows 8 для 32 битной архитектуры и с Windows Server 2003 и Windows Vista для 64 бит (Источник).
    • Kubuntu 15.04. По идее подойдет любой дистрибутив, который поддерживает Grub2, лично я предпочитаю Kubuntu.

    NB: Материнская плата поддерживает UEFI

    Разбивка диска

    Сначала устанавливаем Windows 8, т.к. она автоматически будет использовать GPT.
    Разбивка будет выглядеть так (пардон за кривой снимок):

    Винда по умолчанию создает 4 раздела:

    1. Recovery (300Мб). Очевидно, что он используется для восстановления системы. Оставим как есть.
    2. EFI partition (100Мб). Помечается как system type (не любят в Майкрософте называть вещи своими техническими именами). Собственно сюда и пишутся загрузчики.
    3. MSR (128Мб, Microsoft Reserved Partition). Для меня остается загадкой, зачем он нужен. Данных там никаких нет, просто пустое место, зарезервированное для каких-то непонятных целей в будущем.
    4. Основной раздел. Мы его поделим на 3: 200 гигов под винду, 500 гигов для раздела под данные и остальное пространство пока оставим неразмеченным (отформатируем потом при установке Kubuntu).

    Пропустим саму установку Windows, т.к. в ней все стандартно и понятно.

    Теперь загрузимся с USB в Kubuntu Live.

    Проверим EFI раздел:

    Boot0000 — виндовый загрузчик
    Boot0001 — дефолтный загрузчик
    Boot0003 — флешка с Kubuntu Live
    Обратите внимание, что список загрузчиков не привязан к одному физическому диску как в MBR. Он хранится в NVRAM.

    Можем также сразу посмотреть, что же в этом разделе, подмонтировав его:

    Там окажутся следующие файлы:

    Убедились, что все хорошо. Теперь продолжаем разбивку диска (через KDE Partition Manager).

    Первые пять разделов остались прежними. Обратите внимание, как Kubuntu определила разделы:

    • sda2 определился как FAT32. Это практически верно, т.к. файловая система типа EFI основана на FAT, только с жесткими спецификациями.
    • sda3 (MSR) не определился, т.к. файловой системы там так таковой нет.

    Нам осталось только отформатировать раздел для Kubuntu в ext4, и выделить раздел под swap.

    Несколько слов про swap. Рекомендуют на swap выделять от SQRT(RAM) до 2xRAM. Т.к. у меня 16 Гб RAM, то по минимуму мне надо 4 Гб свопа. Хотя я с трудом могу представить ситуации, при которых он будет использоваться: десктоп в hibernate я не перевожу, и сильно тяжелых программ, которые жрут больше 16 гигов, не использую.

    P.S. При форматировании раздела в swap Partition Manager может выдать ошибки, которые связаны с тем, что Kubuntu автоматически монтирует в себя любой swap раздел, однако на результат эти ошибки не влияют.

    Итак, финальная разбивка:

    Теперь самое главное для правильного dual boot’а. При установке Kubuntu важно выбрать, куда установить загрузчик:

    Указываем, конечно же на раздел EFI.

    После завершения установки Kubuntu, заходим в систему и проверяем, какие файлы появились на efi разделе (монтировать уже не нужно):

    Смотрим, как теперь выглядит список загрузчиков:

    Вот как это выглядит при загрузке:

    А еще эти загрузчики доступны сразу из UEFI (в старом BIOS’е такое было бы невозможно — там был выбор только диска, он просто не знал, что такое загрузчики):

    Ну и напоследок: чтобы dual boot правильно работал, в Windows надо обязательно отключить fast boot. Это такая нехорошая фича, которая может привести к потере данных.

    При выключении компьютера Windows сохраняет файловую структуру NTFS разделов в файл (видимо, потому что один файл прочитать быстрее, чем сканировать много разных файлов). Если записать файл на NTFS раздел через линукс, и потом загрузиться в Windows, то Windows просто не увидит файл. Источник

    Читайте также:  Как распечатать документ с ноутбука windows 10

    Если выключить комп через Windows, и потом попытаться загрузить Linux, то он просто не запустится из-за «ошибки» NTFS. Источник

    Источник

    Gentoo GNU/Linux: установка на GPT диск

    В отличии от предыдущей статьи, в которой рассматривалась установка Gentoo с использованием таблицы разделов MBR (DOS), здесь будет описана установка с использованием GPT. Она поддерживает диски размером более 2 ТБ.

    После загрузки с инсталляционного диска необходимо создать разделы с помощью утилиты parted:

    задаём таблицу разделов GPT

    создаём раздел 2 МБ

    задаём имя первому разделу grub

    устанавливаем флаг bios_grub на первый раздел

    создаём раздел 128 МБ

    задаём имя второму разделу boot

    устанавливаем флаг boot на второй раздел

    создаём раздел 2048 МБ (2 ГБ)

    задаём имя третьему разделу swap

    создаём раздел, который займёт оставшееся место на диске

    задаём имя четвёртому разделу rootfs

    все необходимые разделы созданы, смотрим что получилось

    если ничего не забыли, выходим из parted

    Переходим к форматированию разделов. sda2 и sda4 форматируем в ext4, sda3 — swap, sda1 не трогаем:

    Теперь для инсталляции необходимо примонтировать созданные разделы.

    Сначала монтируем корневой раздел в каталог /mnt/gentoo

    затем создадим каталог /mnt/gentoo/boot и примонтируем к ней раздел загрузки sda2

    и после этого включаем подкачку

    Переходим в каталог /mnt/gentoo и с помощью links загрузим страницу зеркала Яндекса

    Отсюда нам необходимо загрузить архив stage3-amd64-*.tar.xz.

    После скачивания выходим из links (буквой q) и возвращаемся в консоль.

    Затем распакуем полученный архив командой

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

    Теперь необходимо выбрать зеркало для синхронизации портажей. Для этого запустим утилиту mirrorselect

    Здесь пометим звёздочками https://mirror.yandex.ru/gentoo-distfiles и http://mirror.yandex.ru/gentoo-distfiles

    Жмём OK и возвращаемся в консоль.

    Затем скопируем файл resolv.conf на диск

    После этого примонтируем /proc, /dev и /sys к жёсткому диску

    и изменяем корень в режиме chroot

    Затем создадим каталог /var/db/repos/gentoo

    Затем создадим каталог для портажей и синхронизируем их

    Теперь настроим поддержку русского языка в консоли. Открываем файл /etc/locale.gen

    и в конце файла добавим строчки

    Настроим московское время

    Теперь установим и настроим ядро. Качаем исходники

    Открываем файл /etc/portage/make.conf

    и в самый низ добавим строчку

    После этого устанавливаем утилиту автоматической сборки ядра

    и запустим команду

    Этот процесс займёт некоторое время.

    Затем устанавливаем утилиту автоматического распознавания устройств udev, службу журналирования syslog-ng, dcron, и, если необходимо, чтобы машина получала IP-адрес от DHCP-сервера, службу DHCP-клиента

    Добавим всё это в автозагрузку

    Также, если необходимо будет работать с машиной через SSH, включаем в автозагрузку и SSH-сервер

    Чтобы подключиться через SSH с правами root, необходимо открыть конфиг /etc/ssh/sshd_config

    и добавить строчку

    Затем перезапустить SSH-сервер

    После этого открываем файл для автоматического монтирования разделов диска

    и пропишем в него следующие строки:

    Теперь поправим имя хоста. Для этого открываем файл hostname

    и вписываем свой.

    Затем настроим сеть. Для этого создадим файл /etc/conf.d/net

    и впишем свои настройки сетевого интерфейса

    Если машина должна получить сетевые настройки через DHCP-сервер, то тогда впишем так:

    После этого создадим символьную ссылку на net.enp0s3

    и добавим сетевой интерфейс в автозагрузку

    Теперь запаролим суперпользователя

    Настроим раскладку клавиатуры. Для этого откроем файл keymaps

    и исправим строчку

    Теперь установим и сконфигурируем загрузчик grub:

    Выходим из режима chroot

    Размонтируем все подключённые разделы и файловые системы

    и перезагружаем машину

    Больше LiveCD нам не понадобится

    После перезагрузки настроим русификацию консоли

    Установим утилиты terminus-font, intlfonts, freefonts, cronyx-fonts, corefonts, kbd

    Затем создадим файл /etc/env.d/02locale

    и внесём в него следующие строчки:

    После этого откроем файл /etc/conf.d/keymaps

    и исправим следующие строчки:

    Остальные строчки должны быть такими:

    Теперь откроем файл /etc/conf.d/consolefont

    в нём исправим следующие строки:

    раскомментируем и исправим

    Добавим consolefont в автозагрузку:

    С настройкой русификации всё.

    Теперь настроим файл hosts

    на свой, например

    Для удобства установим файловый менеджер Midnight Commander

    Запускаем его при необходимости

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

    Источник

    Оцените статью