Помните те времена, когда 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. Источник

Комментарии (35)


  1. Meklon
    01.06.2015 19:28

    Спасибо. Как раз на Kubuntu. Только до сих пор сиду на привычном MBR. Ключевой вопрос — а нафига, если grub и так сам находит все разделы с ОС?


    1. Bringoff
      01.06.2015 20:35

      Не знаю, с чем это связано (возможно, и вправду не в EFI раздел ставил), но после обновления Ubuntu Grub отказывался запускать винду и всякие фиксы ребилды списков не помогали.


      1. Meklon
        01.06.2015 20:48

        Сложно сказать. У меня сейчас Kubuntu 15.04, MBR, grub2, Windows 7, Windows 10. Все работает.


        1. xlin
          01.06.2015 20:52

          Потому что MBR для людей =)


          1. Meklon
            01.06.2015 21:20
            +1

            Да вот фиг его знает. Я не трогаю, пока понятно и работает. Явных минусов нет)


      1. AmdY
        02.06.2015 00:00

        Та же беда была, после обновления кубунты и двух перезагрузок всё само починилось и винда нашлась грабом


    1. Extrapolator Автор
      01.06.2015 21:07

      Согласен, с MBR пока еще вполне можно работать. Однако в самом дизайне MBR много недочетов, которые вынуждают использовать разные хаки, такие как запись в нестандартизированную область диска между собственно MBR и первым разделом диска, и использование extended partitions для создания более 4 разделов.
      Вообще сейчас тенденция идет к тому, что скоро все производители перейдут на GPT, поэтому я просто решил заранее изучить тему :)


      1. Meklon
        01.06.2015 21:21

        У меня GPT только на 3 ТБ винчестере — хранилище в домашнем сервере. Из-за ограничений по размеру.


  1. ilrandir
    01.06.2015 21:54
    +1

    Единственная причина использовать GPT это необходимость одного раздела больше 2 тб размером. Я так понимаю что проблем с восстановлением разделов с GPT диска еще не было? Посмотрим как пойдет.


    1. Ivan_83
      02.06.2015 01:08
      -5

      Вы просто не в курсе про рукожопых кодеров UEFI из ASUS и ещё пары контор.
      Благодаря этим «гениям» биос считает что если диск в GPT то там не может быть leagacy загрузчика, только UEFI. И хз как сейчас, но год назад rEFInd на этим матерях так же не мог запустить legacy загрузчик с GPT.

      GPT нужен ещё и потому что там есть UUID на каждый раздел, это весьма актуально когда у тебя больше одного диска с системой и загрузчиками.

      В целом, я недоумеваю:
      1. Нафик винда, когда многое можно запустить в WINE. (старые игрушки скорее в вайне пойдут, в новой винде им не жить)
      2. Почему автор не заюзал rEFInd. (ещё не поздно!)
      3. Нахрена нужен своп когда есть 16 гигов оперативы. (тоже ещё не поздно переформатировать под что то полезное)

      Я бы вообще накатывал винду на отдельный диск: пишут её хер пойми как — с другими ОС как то тяжко уживается, любит свой загрузчик везде пихать и проверять наличие альтернативных (видите ли злобные хакеры так SLIC загружают, когда биос лень патчить).


      1. achekalin
        02.06.2015 11:42

        > винду на отдельный диск

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

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

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

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

        P.S. Спасибо автору за напоминание про вредность fast boot. На SSD скорость загрузки несущественно меньше, а вот шансы что-то отгрести — выше, так что не стоит оно того.


        1. Scraelos
          02.06.2015 17:20

          если в ноутбуке есть mSATA, то ничто не мешает поставить это market.yandex.ru/product/10777568?hid&show-uid=610417314332547891


      1. CaptainFlint
        02.06.2015 14:27

        3. Нахрена нужен своп когда есть 16 гигов оперативы.
        Например, чтобы использовать Suspend to Disk, который записывает данные именно в своп.


  1. 0x18h
    01.06.2015 22:17
    +5

    Сначала устанавливаем Windows 8
    … ну не так сильно то все и поменялось с MBR :)


  1. larrabee
    01.06.2015 22:59
    +3

    Ставить можно в любом порядке. Что меня удивило, так это то, что винда при установке найдя EFI раздел с gummiboot (он грузит мой Arch) не стала его форматировать и творить с ним всякие непотребства, а просто записало туда свое EFI приложение. gummiboot умеет сам находить виндовый загрузчик на разделе, поэтому вся инструкция сводится к такой:

    1. Разбить диск в GPT и создать EFI раздел и раздел под Linux
    2. Поставить Linux
    3. Поставить Windows


    1. Extrapolator Автор
      01.06.2015 23:21

      О, интересный расклад. Я даже не стал пробовать винду после линукса ставить — почему-то посчитал, что она все сломает по умолчанию. Спасибо за информацию, это очень полезно знать.


    1. Botkin
      02.06.2015 06:37

      С 7 версии так делает (как минимум).
      Люди почему-то привыкли судить о винде по версиям 12летней давности


      1. larrabee
        02.06.2015 11:52

        Потому что обычно это помогает избежать лишних разочарований.
        Недавно пробовал поставить 7ку на ультрабук от Sony в режиме UEFI.
        Первая проблема- загрузчик установочного диска вылетает с ошибкой. Бага известна с релиза Win 7, но почему то не пофикшена ни в SP1, не отдельным фиксом. Решил заменой загрузчика на версию от Windows 8. После этого получил зависания на экране загрузки. Судя по форумам проблема известная, возникает на некотрых ноутах и ПК и не решается (виноват драйвер disk.sys).
        И как после этого верить в силу винды, если элементарные баги пятилетней давности висят без нормальных фиксов?


        1. Botkin
          02.06.2015 15:32
          +1

          после 7 уже вышло 2 версии ОС


          1. lvx
            02.06.2015 16:09

            Разве это что-то меняет в том факте, что Windows 7 всё ещё поддерживается мелкомягкими?


            1. Bringoff
              02.06.2015 17:54

              Основная поддержка уже закончилась.


  1. CaptainFlint
    02.06.2015 00:57
    +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.


    1. Bringoff
      02.06.2015 07:42

      Рекомендую иметь в виду, что это не всегда так. Я уже неоднократно сталкивался с ноутбуками и планшетами, в которых прошивка UEFI (и порой даже с поддержкой Secure Boot), но интерфейс настроек биоса — всё тот же убогий сине-белый набор менюшек в текстовом режиме.

      Имеется такое непотребство. Lenovo g500, с которого пишу — EFI, Secure Boot, а на вид все тот же BIOS. Я когда только купил, даже не сразу понял, а где, собственно, UEFI.


      1. CodeRush
        16.06.2015 21:38

        Расскажу вам как разработчик UEFI, что вот этот «убогий сине-белый набор менюшек в текстовом режиме» превосходит по стабильности и отлаженности графический сетап на порядок. И работает даже в text mode, когда с VBIOS или GOP-драйвером что-то стряслось. И serial redirection в нем работает замечательно, а не как попало. И ломаться там почти нечему, ибо 90% кода уже лет 5 входит в состав открытого проекта TianoCore.
        UEFI — это не сетап и не менюшки, это в первую очередь интерфейс для драйверов и загрузчиков, свободный груза легаси-костылей времен царя Гороха, способный не загружать неподписанные option ROM'ы и выступать в качестве root-of-trust для ОС.


  1. mefikru
    02.06.2015 04:12

    Есть задача разбить диск в GPT под досом… Диск меньше 2Tb. Именно GPT и именно из под DOS. Ghost зараза не умеет. Я уже и такие извращение как HX DOS Extender пробовал, но DLL для diskpart не хватает. Кто-нибудь может что подсказать?


    1. Cobolorum
      02.06.2015 07:53
      +2

      У вас под досом какая то многозадачная и реалтайм прикладуха крутится, что нельзя ее выключить на 5 минут?
      Может проще загрузиться с live usb и разбить?


      1. mefikru
        02.06.2015 11:47

        У меня диск, с кучей софта, для прошивки BIOS, MAC адресов и т.п. Почти весь такой софт только зараза для DOS, загружается досовое меню, из которого выбираешь какую плату шить. Не EFI разделы раньше лил через ghost, а сейчас хочется накатывать UEFI загрузчик виндовый, с GPT. Хочется сделать единым меню. На линух не могу перейти, кучу досовых тулзов. Некоторые тулзы не работают из под win32, т.е. winpe тоже блин не катит.


  1. justabaka
    02.06.2015 11:13

    Всю работу за автора делает grub-install/update-grub и программы установки ОС, никаких граблей нет, никакого виртуозного соло в консоли не требуется. Скучно и обыденно, максимум тянет на заметку в блокноте эникея :(

    Увы, но в итоге всю статью (кроме вводных пассажей о UEFI) можно выразить двумя фразами:
    1. Cтавим сначала Windows, затем Linux, выбрав efi-раздел для установки загрузчика.
    2. В Windows отключаем Fast Boot.


  1. en1gma
    02.06.2015 12:57
    +2

    когда же человеки привыкнут, что есть uefi, есть bios, (есть u-boot, есть coreboot, есть....) и есть конфигуратор для их настройки.
    не любой графический конфигуратор есть uefi (у меня был доступ к «машинам белой сборки» в середине-конце 90х с графическим конфигуратором для bios, вылитым win3.x).
    аналогично, не любой текстовый конфигуратор есть bios (те же uefi от insyde, которые с конца 00х, если не раньше, «ставятся» на многие ноуты).
    есть и графические конфигураторы, стилизованные под текстовые.

    прям болезнь какая-то: джип, ксерокс, симка, кола…


    1. ntfs1984
      02.06.2015 13:21

      Именно.
      BIOS — базовая система, загружающаяся после старта ПК.
      UEFI — набор костылей, позволяющий по идее софту работать с железом через единый интерфейс. Например позволяет виндам работать с USB3.0 без установки драйвера.

      Графическая утилита настройки - не обязательно UEFI
      вот это — графический BIOS 90-хх


    1. JerleShannara
      02.06.2015 13:40

      Белая сборка 90ых годов «вылитый win3.1» и есть этот самый win 3.1 (а сборка есть компак), и BIOS/UEFI/PopaBigimota Setup в классическом понимании там отсутствует, а то, что им кажется — грузится либо с 1-3 дискет, либо ставится на жесткий диск. И эта дребедень у компаков тянулась с 80ых годов до покупки их HP.
      Да и смысла это улучшать, очень мало кому нужно на своей рабочей машине постоянно лезть в настройки биоса (оверклокеры, хотя там один раз разогнал и забыл).


      1. ntfs1984
        02.06.2015 16:04

        Не шутите так больше.
        У меня эта штука была на 386DX-66. Запускалась и без дискет, и без жесткого диска.
        При чем некоторые параметры изменялись из-под DOS, так же само как и для других BIOS.

        Да и врядли это было улучшением. Это скорее было из серии потешить ЧСВ + конфигуратор мышкой, и маловероятно, что оно потребовало больше ресурсов, чем текстовая версия.


  1. Jeditobe
    02.06.2015 21:22

    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.


    1. Meklon
      02.06.2015 22:28

      What disks require an MSR?
      Every GPT disk must contain an MSR

      Это что за фигня вообще? А если Linux? Почему кусок от Microsoft является обязательным?


      1. CaptainFlint
        03.06.2015 01:33

        Потому что это выдержка из документа под названием «Windows and GPT».