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

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

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

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

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


UEFI (Unified Extensible Firmware Interface, Единый расширяемый интерфейс прошивки) разрабатывался компанией Intel как замена BIOS (Basic Input Output System). В отличие от 16-битного BIOS'а UEFI работает в 32- или 64-битном режиме, что позволяет использовать намного больше памяти для сложных процессов. Кроме того, UEFI приятно выглядит и там есть поддержка мышки.
Внешний вид:
image


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 (на них содержатся загрузчики), и подгружает их в память. Разберем это на примере немного позже.


Что делаем:


Устанавливаем следующие ОС на пустой 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.
Разбивка будет выглядеть так (пардон за кривой снимок):

image

Винда по умолчанию создает 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 раздел:
kubuntu@kubuntu:~$ efibootmgr
BootCurrent: 0003
Timeout: 0 seconds
BootOrder: 0000,0003,0001
Boot0000* Windows Boot Manager
Boot0001* Hard Drive
Boot0003* UEFI: JetFlashTranscend 16GB

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

Можем также сразу посмотреть, что же в этом разделе, подмонтировав его:
kubuntu@kubuntu:~$ sudo mkdir /media/efi
kubuntu@kubuntu:~$ sudo mount /dev/sda2 /media/efi

Там окажутся следующие файлы:
EFI
|--Boot
|    |--bootx64.efi # дефолтный загрузчик
|--Microsoft
     |--Boot
         |--bootmgfw.efi # основной виндовый загрузчик
         |--# много других файлов

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

image

Первые пять разделов остались прежними. Обратите внимание, как 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 раздел, однако на результат эти ошибки не влияют.

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

image

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

image

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

После завершения установки Kubuntu, заходим в систему и проверяем, какие файлы появились на efi разделе (монтировать уже не нужно):
user@kubuntu:~$ sudo ls /boot/efi/EFI
Boot  Microsoft  ubuntu
user@kubuntu:~$ sudo ls /boot/efi/EFI/ubuntu
grub.cfg  grubx64.efi  MokManager.efi  shimx64.efi

Смотрим, как теперь выглядит список загрузчиков:
user@kubuntu:~$ efibootmgr -v
BootCurrent: 0002
Timeout: 0 seconds
BootOrder: 0002,0000,0003,0001
Boot0000* Windows Boot Manager  HD(2,96800,32000,c4f37e07-0441-4967-a1ac-75fb5a36e4f3)File(\EFI\Microsoft\Boot\bootmgfw.efi)
Boot0001* Hard Drive    BIOS(2,0,00)
Boot0002* ubuntu        HD(2,96800,32000,c4f37e07-0441-4967-a1ac-75fb5a36e4f3)File(\EFI\ubuntu\shimx64.efi)
Boot0003* ubuntu        HD(2,96800,32000,c4f37e07-0441-4967-a1ac-75fb5a36e4f3)File(EFI\Ubuntu\grubx64.efi)

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

image

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

image

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

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

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

Комментарии 42

    0
    Спасибо. Как раз на Kubuntu. Только до сих пор сиду на привычном MBR. Ключевой вопрос — а нафига, если grub и так сам находит все разделы с ОС?
      0
      Не знаю, с чем это связано (возможно, и вправду не в EFI раздел ставил), но после обновления Ubuntu Grub отказывался запускать винду и всякие фиксы ребилды списков не помогали.
        0
        Сложно сказать. У меня сейчас Kubuntu 15.04, MBR, grub2, Windows 7, Windows 10. Все работает.
          0
          Потому что MBR для людей =)
            +1
            Да вот фиг его знает. Я не трогаю, пока понятно и работает. Явных минусов нет)
          0
          Та же беда была, после обновления кубунты и двух перезагрузок всё само починилось и винда нашлась грабом
          0
          Согласен, с MBR пока еще вполне можно работать. Однако в самом дизайне MBR много недочетов, которые вынуждают использовать разные хаки, такие как запись в нестандартизированную область диска между собственно MBR и первым разделом диска, и использование extended partitions для создания более 4 разделов.
          Вообще сейчас тенденция идет к тому, что скоро все производители перейдут на GPT, поэтому я просто решил заранее изучить тему :)
            0
            У меня GPT только на 3 ТБ винчестере — хранилище в домашнем сервере. Из-за ограничений по размеру.
          +1
          Единственная причина использовать GPT это необходимость одного раздела больше 2 тб размером. Я так понимаю что проблем с восстановлением разделов с GPT диска еще не было? Посмотрим как пойдет.
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              > винду на отдельный диск

              Ваша правда, только в буках, увы, диск чаще всего мало что один, так еще и небольшой (потому что SSD).

              Про «небольшой» — это мое личное, я стараюсь именно твердотельные диски в буках использовать, и классических 128 Гб отлично хватает под мои задачи.

              А вот про «один» — это ахиллесова стопа всех небольших девайсов, туда второй диск (кроме как на шнурочке снаружи) и не подключить. Более того, часто биосы ноутбуков особо не отличаются выбором опций загрузки с чего угодно, кроме встроенного диска, ибо — «зачем юзера путать»?

              Так что, да, dual boot порой ой как нужен.

              P.S. Спасибо автору за напоминание про вредность fast boot. На SSD скорость загрузки несущественно меньше, а вот шансы что-то отгрести — выше, так что не стоит оно того.
              0
              3. Нахрена нужен своп когда есть 16 гигов оперативы.
              Например, чтобы использовать Suspend to Disk, который записывает данные именно в своп.
            +5
            Сначала устанавливаем Windows 8
            … ну не так сильно то все и поменялось с MBR :)
              +3
              Ставить можно в любом порядке. Что меня удивило, так это то, что винда при установке найдя EFI раздел с gummiboot (он грузит мой Arch) не стала его форматировать и творить с ним всякие непотребства, а просто записало туда свое EFI приложение. gummiboot умеет сам находить виндовый загрузчик на разделе, поэтому вся инструкция сводится к такой:
              1. Разбить диск в GPT и создать EFI раздел и раздел под Linux
              2. Поставить Linux
              3. Поставить Windows
                0
                О, интересный расклад. Я даже не стал пробовать винду после линукса ставить — почему-то посчитал, что она все сломает по умолчанию. Спасибо за информацию, это очень полезно знать.
                  0
                  С 7 версии так делает (как минимум).
                  Люди почему-то привыкли судить о винде по версиям 12летней давности
                    0
                    Потому что обычно это помогает избежать лишних разочарований.
                    Недавно пробовал поставить 7ку на ультрабук от Sony в режиме UEFI.
                    Первая проблема- загрузчик установочного диска вылетает с ошибкой. Бага известна с релиза Win 7, но почему то не пофикшена ни в SP1, не отдельным фиксом. Решил заменой загрузчика на версию от Windows 8. После этого получил зависания на экране загрузки. Судя по форумам проблема известная, возникает на некотрых ноутах и ПК и не решается (виноват драйвер disk.sys).
                    И как после этого верить в силу винды, если элементарные баги пятилетней давности висят без нормальных фиксов?
                      +1
                      после 7 уже вышло 2 версии ОС
                        0
                        Разве это что-то меняет в том факте, что Windows 7 всё ещё поддерживается мелкомягкими?
                          0
                          Основная поддержка уже закончилась.
                  +2
                  Кроме того, UEFI приятно выглядит и там есть поддержка мышки.
                  Рекомендую иметь в виду, что это не всегда так. Я уже неоднократно сталкивался с ноутбуками и планшетами, в которых прошивка UEFI (и порой даже с поддержкой Secure Boot), но интерфейс настроек биоса — всё тот же убогий сине-белый набор менюшек в текстовом режиме.

                  MSR (128Мб, Microsoft Reserved Partition). Для меня остается загадкой, зачем он нужен.
                  В общем-то, по ссылке как раз описано, зачем он нужен: если раньше между MBR и первым разделом всегда было как минимум 62 сектора (а когда ушли от выравнивания по цилиндрам — то и почти целый мегабайт), то в GPT эта область занята самой GPT-таблицей. Так что приложения, которые использовали эти секторы под свои нужды, остались без доступного пространства.

                  В качестве примера можно привести тот же Grub. Если попробовать установить его в режиме Legacy (не-EFI) на GPT-диск, то он откажется это делать, если на диске нет специального раздела с типом BIOS Boot Partition, который точно так же, как и MSR, ни во что не отформатирован, а просто выполняет роль резервного пространства, куда граб смог бы записать своё основное тело.

                  Остаётся, конечно, вопрос, зачем MS резервирует аж 128 мегабайт, но, возможно, они просто перестраховываются, чтоб не вляпаться в очередные «64 Кб, 128 Гб, 2 Тб должно хватить каждому». Кстати, если диск не слишком большой, то под MSR будет отъедаться 32 Мб. Кое-какие подробности имеются в MSDN.
                    0
                    Рекомендую иметь в виду, что это не всегда так. Я уже неоднократно сталкивался с ноутбуками и планшетами, в которых прошивка UEFI (и порой даже с поддержкой Secure Boot), но интерфейс настроек биоса — всё тот же убогий сине-белый набор менюшек в текстовом режиме.

                    Имеется такое непотребство. Lenovo g500, с которого пишу — EFI, Secure Boot, а на вид все тот же BIOS. Я когда только купил, даже не сразу понял, а где, собственно, UEFI.
                      0
                      Расскажу вам как разработчик UEFI, что вот этот «убогий сине-белый набор менюшек в текстовом режиме» превосходит по стабильности и отлаженности графический сетап на порядок. И работает даже в text mode, когда с VBIOS или GOP-драйвером что-то стряслось. И serial redirection в нем работает замечательно, а не как попало. И ломаться там почти нечему, ибо 90% кода уже лет 5 входит в состав открытого проекта TianoCore.
                      UEFI — это не сетап и не менюшки, это в первую очередь интерфейс для драйверов и загрузчиков, свободный груза легаси-костылей времен царя Гороха, способный не загружать неподписанные option ROM'ы и выступать в качестве root-of-trust для ОС.
                    0
                    Есть задача разбить диск в GPT под досом… Диск меньше 2Tb. Именно GPT и именно из под DOS. Ghost зараза не умеет. Я уже и такие извращение как HX DOS Extender пробовал, но DLL для diskpart не хватает. Кто-нибудь может что подсказать?
                      +2
                      У вас под досом какая то многозадачная и реалтайм прикладуха крутится, что нельзя ее выключить на 5 минут?
                      Может проще загрузиться с live usb и разбить?
                        0
                        У меня диск, с кучей софта, для прошивки BIOS, MAC адресов и т.п. Почти весь такой софт только зараза для DOS, загружается досовое меню, из которого выбираешь какую плату шить. Не EFI разделы раньше лил через ghost, а сейчас хочется накатывать UEFI загрузчик виндовый, с GPT. Хочется сделать единым меню. На линух не могу перейти, кучу досовых тулзов. Некоторые тулзы не работают из под win32, т.е. winpe тоже блин не катит.
                      0
                      Всю работу за автора делает grub-install/update-grub и программы установки ОС, никаких граблей нет, никакого виртуозного соло в консоли не требуется. Скучно и обыденно, максимум тянет на заметку в блокноте эникея :(

                      Увы, но в итоге всю статью (кроме вводных пассажей о UEFI) можно выразить двумя фразами:
                      1. Cтавим сначала Windows, затем Linux, выбрав efi-раздел для установки загрузчика.
                      2. В Windows отключаем Fast Boot.
                        +2
                        когда же человеки привыкнут, что есть uefi, есть bios, (есть u-boot, есть coreboot, есть....) и есть конфигуратор для их настройки.
                        не любой графический конфигуратор есть uefi (у меня был доступ к «машинам белой сборки» в середине-конце 90х с графическим конфигуратором для bios, вылитым win3.x).
                        аналогично, не любой текстовый конфигуратор есть bios (те же uefi от insyde, которые с конца 00х, если не раньше, «ставятся» на многие ноуты).
                        есть и графические конфигураторы, стилизованные под текстовые.

                        прям болезнь какая-то: джип, ксерокс, симка, кола…
                        • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            Белая сборка 90ых годов «вылитый win3.1» и есть этот самый win 3.1 (а сборка есть компак), и BIOS/UEFI/PopaBigimota Setup в классическом понимании там отсутствует, а то, что им кажется — грузится либо с 1-3 дискет, либо ставится на жесткий диск. И эта дребедень у компаков тянулась с 80ых годов до покупки их HP.
                            Да и смысла это улучшать, очень мало кому нужно на своей рабочей машине постоянно лезть в настройки биоса (оверклокеры, хотя там один раз разогнал и забыл).
                            • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            What is a Microsoft Reserved Partition (MSR)?
                            The Microsoft Reserved Partition (MSR) reserves space on each disk drive for subsequent use by operating system software. GPT disks do not allow hidden sectors. Software components that formerly used hidden sectors now allocate portions of the MSR for component-specific partitions. For example, converting a basic disk to a dynamic disk causes the MSR on that disk to be reduced in size and a newly created partition holds the dynamic disk database. The MSR has the Partition GUID:
                            DEFINE_GUID (PARTITION_MSFT_RESERVED_GUID, 0xE3C9E316L, 0x0B5C, 0x4DB8, 0x81, 0x7D, 0xF9, 0x2D, 0xF0, 0x02, 0x15, 0xAE)

                            What disks require an MSR?
                            Every GPT disk must contain an MSR. The order of partitions on the disk should be ESP (if any), OEM (if any) and MSR followed by primary data partition(s). It is particularly important that the MSR be created before other primary data partitions.

                            Who creates the MSR?
                            The MSR must be created when disk-partitioning information is first written to the drive. If the manufacturer partitions the disk, the manufacturer must create the MSR at the same time. If Windows partitions the disk during setup, Windows creates the MSR.

                            Why must the MSR be created when the disk is first partitioned?
                            After the disk is partitioned, there will be no free space left to create an MSR.

                            How big is the MSR?
                            When initially created, the size of the MSR depends on the size of the disk drive:
                            On drives less than 16GB in size, the MSR is 32MB.
                            On drives greater than or equal two 16GB, the MSR is 128 MB.
                            As the MSR is divided into other partitions, it becomes smaller.
                              0
                              What disks require an MSR?
                              Every GPT disk must contain an MSR

                              Это что за фигня вообще? А если Linux? Почему кусок от Microsoft является обязательным?
                                0
                                Потому что это выдержка из документа под названием «Windows and GPT».
                              0
                              " надо обязательно отключить fast boot"

                              и как это сделать?
                                0
                                и кстати потом можно будет винду переустанавливать?
                                  0
                                  автор можно Ваш е-мейд? есть пара вопросов по статье, плз
                                    0
                                    ответил в личку
                                    0
                                    Насколько я понимаю, статья описывает установку систем на один физический носитель. А теперь, внимание, вопрос: куда записывать grub-efi, если windows и Ubuntu устанавливаются на разные носители(ноутбук с 2 винтами каждый по 1TB)?
                                      0
                                      С этим не разбирался, но по идее порядок действий будет такой же:
                                      1. Поставить Винду с ее стандартным загрузчиком на один диск, скорее всего это уже будет efi boot partition
                                      2. Поставить linux и efi на другой диск
                                      3. Сконфигурить grub-efi, при необходимости прописав там строчку для загрузки винды.

                                      В случае нескольких загрузочных efi разделов, они должны автоматически подгружаться, поэтому по идее даже дополнительно настраивать ничего не надо будет.
                                        0
                                        Если диски стационарные, то EFI-раздел можно оставить только на одном диске (лучше на виндовом, т. к. Windows менее гибкая в этом плане). EFI-грабу всё равно, откуда грузить ядро.

                                        Если планируется диски вынимать или переставлять их в другие компьютеры, то лучше на каждом держать свой EFI-раздел. Но тут ещё надо учитывать, что на другом компьютере в UEFI будет отсутствовать загрузочная запись, указывающая на конкретный EFI-файл граба, так что придётся либо выбирать файл вручную (если прошивка это умеет), либо создавать дубликат в виде умолчального файла /EFI/BOOT/BOOTx64.EFI. Некоторые системы это сами делают, но не знаю, относится ли к ним Убунта.

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

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