Настройка UEFI-загрузчика. Самое краткое руководство в мире
Как устроена загрузка современных ОС? Как при установке системы настроить загрузку посредством UEFI, не утонув в руководствах и ничего не сломав?
Я обещал «самое краткое руководство». Вот оно:
- Создаём на диске таблицу разделов GPT
- Создаём FAT32-раздел на пару сотен мегабайт
- Скачиваем из интернета любой UEFI-загрузчик
(нам нужен сам загрузчик, это один бинарный файл!) - Переименовываем и кладем этот файл на созданный раздел по адресу /EFI/Boot/bootx64.efi
- Создаём текстовый конфиг, кладем его там, где загрузчик ожидает его увидеть
(настройка и местоположение конфига зависят от конкретной реализации загрузчика, эта информация доступна в интернете) - После перезагрузки видим меню загрузчика
(Если на диске установлена Windows 8 или 10 — с большой вероятностью это руководство сокращается до пунктов 3 — 5.)
TL;DR не надо прописывать путь к загрузчику в новых загрузочных записях UEFI — надо файл загрузчика расположить по стандартному «пути по-умолчанию», где UEFI его найдет, и вместо загрузочного меню UEFI пользоваться меню загрузчика, которое гораздо проще и безопаснее настраивается
Как делать не надо
Есть, на самом-то деле, несколько способов настроить UEFI-загрузку. Я начну с описания других вариантов — чтобы было понятно, как (и почему) делать не надо. Если вы пришли за руководством — мотайте в самый низ.
Не надо лезть в NVRAM и трогать efivars
Наиболее «популярная» процедура установки загрузчика в систему такова: установщик ОС создаёт специальный раздел, на нём — структуру каталогов и размещает файлы загрузчика. После этого он с помощью особой утилиты (efibootmgr в linux, bcdedit в windows) взаимодействует с прошивкой UEFI-чипа, добавляя в неё загрузочную запись. В этой записи указывается путь к файлу загрузчика (начиная от корня файловой системы) и при необходимости — параметры. После этого в загрузочном меню компьютера появляется опция загрузки ОС. Для linux существует возможность вообще обойтись без загрузчика. В загрузочной записи указывается путь сразу к ядру вместе со всеми параметрами. Ядро должно быть скомпилировано с опцией EFISTUB (что давно является стандартом для большинства дистрибутивов), в этом случае оно содержит в себе заголовок «исполняемого файла EFI», позволяющий прошивке его запускать без внешнего загрузчика.
При старте системы, когда пользователь выбирает нужную ему загрузочную запись, прошивка UEFI сперва ищет на прописанном в этой записи диске особый EFI-раздел, обращается к файловой системе на этом разделе (обязательно FAT или FAT32), и запускает загрузчик. Загрузчик считывает из файла настроек свой конфиг, и либо грузит ОС, либо предоставляет загрузочное меню. Ничего не замечаете? Да, у нас два загрузочных меню — одно на уровне прошивки чипа UEFI, другое — на уровне загрузчика. В реальности о существовании второго пользователи могут даже не догадываться — если в меню всего один пункт, загрузчик Windows начинает его грузить без лишних вопросов. Увидеть экран с этим меню можно, если поставить вторую копию Windows или просто криво её переустановить.
Обычно для управления загрузочными записями руководства в интернете предлагают взаимодействовать с прошивкой UEFI. Есть аж пять основных вариантов, как это можно сделать: efibootmgr под linux, bcdedit в windows, какая-то софтина на «Маках», команда bcfg утилиты uefi shell (запускается из-под UEFI, «на голом железе» и без ОС, поскольку скомпилирована в том самом особом формате) и для особо качественных прошивок — графическими средствами UEFI (говоря популярным языком, «в настройках BIOS»).
За всеми вышенаписанными «многобуков» вы могли легко упустить такую мысль: пользователь, чтобы изменить настройки программной части (например, добавить параметр запуска ОС), вынужден перезаписывать flash-память микросхемы на плате. Есть ли тут подводные камни? О да! Windows иногда способна сделать из ноутбука кирпич, linux тоже, причём разными способами. Качество прошивок часто оставляет желать лучшего — стандарты UEFI либо реализованы криво, либо не реализованы вообще. По логике, прошивка обязана переживать полное удаление всех переменных efivars без последствий, не хранить в них критичных для себя данных и самостоятельно восстанавливать значения по-умолчанию — просто потому что пользователь имеет к ним доступ, и вероятность их полного удаления далека от нуля. Я лично в процессе экспериментов неоднократно (к счастью, обратимо) «кирпичил» свой Lenovo — из загрузочного меню исчезали все пункты, включая опцию «зайти в настройки».
Работа с загрузочными записями UEFI — тоже не сахар. К примеру, утилита efibootmgr не имеет опции «редактировать существующую запись». Если ты хочешь немного изменить параметр ядра — ты удаляешь запись целиком и добавляешь её снова, уже измененную. При этом строка содержит в себе двойные и одинарные кавычки, а также прямые и обратные слеши в не особо очевидном порядке. Когда я наконец заставил эту магию работать — я сохранил её в виде bash-скриптов, которые до сих пор валяются у меня в корневой ФС:
efibootmgr -c -L "Archlinux (debug)" -l '\EFI\archlinux\vmlinuz-linux' -u "root=/dev/mapper/vg1-lvroot rw initrd=\EFI\archlinux\initramfs-linux.img systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1M enforcing=0"
Не надо использовать GRUB
Это чёртов мастодонт, 90% функциональности которого предназначено для дисков с MBR. Для настройки необходимо отредактировать ряд файлов, после чего выполнить команду генерации конфига. На выходе получается огромная малопонятная нормальному человеку простыня. В составе — гора исполняемых файлов. Ставится командой, которую просто так из головы не возьмешь — надо обязательно лезть в документацию
grub-install --target=x86_64-efi --efi-directory=esp_mount --bootloader-id=grub
Для сравнения — самый простенький UEFI-bootloader, который есть в составе пакета systemd, ставится командой
bootctl install --path=/boot
Эта команда делает ровно две вещи: копирует исполняемый файл загрузчика на EFI-раздел и добавляет свою загрузочную запись в прошивку. А конфиг для неё занимает ровно СЕМЬ строчек.
«Самое краткое руководство» — чуть более подробно
Загрузочное меню надо реализовывать на уровне загрузчика — править текстовые конфиги гораздо проще и безопасней.
Загрузочная запись нам не нужна — дело в том, что при выставлении в настройках BIOS загрузки с диска прошивка UEFI сначала ищет на нём EFI-раздел, а затем пытается исполнить файл по строго фиксированному адресу на этом разделе: /EFI/Boot/BOOTX64.EFI
Что такое «EFI-раздел»? В теории, он должен иметь особый тип «EFI System» (ef00). На практике, годится первый раздел на GPT-диске, отформатированный в FAT32 и имеющий достаточно места, чтобы разместить загрузчик и вспомогательные файлы (если есть).
Пункт 3: «Скачиваем из интернета любой UEFI-загрузчик». Что это значит? Загрузчик — это просто исполняемый файл определенного формата, к которому в комплекте идет конфиг. К примеру, если у вас есть под рукой установленный пакет с systemd — файл загрузчика можно найти по адресу /usr/lib/systemd/boot/efi/systemd-bootx64.efi, переименовать его в bootx64.efi и скопировать в /EFI/Boot/ на EFI-разделе. Нет под рукой systemd? Скачайте архив с сайта Archlinux. Или с репозитария Ubuntu. Или Debian. Есть под рукой система с Windows? Возьмите виндовый загрузчик оттуда, тоже сгодится )) Если сумеете настроить, я честно говоря не пробовал.
Пункт 4: «Настроить конфиг». Как и обычная программа, когда загрузчик запускается — он ожидает найти по определенным путям файлы конфигурации. Обычно эту информацию легко найти в интернете. Для загрузчика systemd-boot нам необходимо в корне EFI-раздела создать каталог «loader», а в нём файл «loader.conf» с тремя строчками (привожу свои):
default archlinux timeout 10 editor 1
Параметр editor отвечает за возможность отредактировать пункт загрузочного меню перед запуском.
Рядом с loader.conf необходимо создать каталог entries — один файл в нём будет отвечать за одну загрузочную запись в boot-меню. У меня там один файл arch.conf с таким содержанием:
title Arch Linux linux /efi/archlinux/vmlinuz-linux initrd /efi/archlinux/initramfs-linux.img options root=/dev/mapper/vg1-lvroot rw initrd=\EFI\archlinux\intel-ucode.img
Я не упомянул, но довольно очевидно — ядро и initramfs должны лежать в одной файловой системе с загрузчиком, то есть на EFI-разделе. Пути к ним в конфигах отсчитываются от корня этой ФС.
Другие загрузчики
systemd-boot очень простой и предоставляет спартанского вида чёрно-белое меню. Есть варианты красивей, если душа просит красоты.
rEFind — очень красивый загрузчик. Скачать можно тут в виде deb-пакета. Использую на своём ноуте. Умеет создавать загрузочное меню автоматически, без конфига — просто сканируя файлы.
Clover. Позволяет выставлять нативное разрешение экрана, имеет поддержку мыши на экране загрузки, разные темы оформления. Дефолтная тема ужасна, конфиг в виде xml нечитаем, настроить не смог.
Различные неочевидные последствия
Вы можете легко попробовать эту схему в работе. Берёте USB-флешку, форматируете в таблицу разделов GPT, создаете FAT-раздел и копируете туда загрузчик. Комп сможет с неё стартовать.
Если просто скопировать на такую флешку boot-раздел установленного linux — система будет спокойно загружаться с флешки, не видя разницы.
GPT fdisk (Русский)
Состояние перевода: На этой странице представлен перевод статьи GPT fdisk. Дата последней синхронизации: 1 февраля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
GPT fdisk состоит из программ gdisk, cgdisk, sgdisk, и fixparts. Они представляет собой набор инструментов для разметки диска, созданный Родом Смитом. Они работают с дисками с глобальным уникальным идентификатором (GUID) с таблицей разделов (GPT), а не со старыми (и всё ещё более распространенными) таблицами разделов основной загрузочной записи (MBR).
gdisk, cgdisk и sgdisk имеют одинаковую функциональность, но предоставляют разные пользовательские интерфейсы. gdisk — текстовый и интерактивный режим, sgdisk — режим командной строки, и cgdisk — интерфейс на основе curses. Эта статья охватывает утилиты gdisk(8) и sgdisk(8) .
- Для базовых функций разметки можно использовать cgdisk(8) с текстовым пользовательским интерфейсом.
- На сайте GPT fdisk есть подробные пошаговые инструкции для gdisk, cgdisk, sgdisk и FixParts.
Установка
Список разделов
Чтобы просмотреть таблицы разделов и разделы на блочном устройстве, вы можете запустить gdisk, указав устройство (например: /dev/sda ), /dev/nvme0n1 , /dev/mmcblk0 , и т.д.):
# gdisk -l /dev/sda
или с помощью sgdisk:
# sgdisk -p /dev/sda
Резервное копирование и восстановление таблицы разделов
Перед внесением изменений в диск вы можете сделать резервную копию таблицы разделов и схемы разделов диска. Вы также можете использовать резервную копию, чтобы скопировать одну и ту же структуру разделов на несколько дисков.
Используя sgdisk, вы можете создать двоичную резервную копию, состоящую из защитной MBR, основного заголовка GPT, резервного заголовка GPT и одной копии таблицы разделов. В приведённом ниже примере таблица разделов /dev/sda сохраняется в файл sgdisk-sda.bin :
# sgdisk -b=sgdisk-sda.bin /dev/sda
Позже вы можете восстановить резервную копию, запустив:
# sgdisk -l=sgdisk-sda.bin /dev/sda
Если вы хотите клонировать структуру разделов вашего текущего устройства ( /dev/sda в данном случае) на другой диск ( /dev/sdc ) запустите:
# sgdisk -R=/dev/sdc /dev/sda
Если оба диска будут на одном компьютере, вам необходимо рандомизировать GUID диска и разделов:
# sgdisk -G /dev/sdc
Создание таблицы разделов и самих разделов
Первый шаг в разметке диска — создание таблицы разделов. После этого создаются собственно разделы в соответствии с желаемой схемой разметки.
Перед началом вы можете сделать резервную копию вашей текущей таблицы разделов и схемы.
Ниже показано, как использовать gdisk для выполнения как создания таблицы разделов, так и создания фактических разделов. Также вы можете использовать основанную на curses версию cgdisk, однако следующие инструкции к ней неприменимы. Смотрите cgdisk(8) для её использования.
gdisk автоматически выполняет выравнивание по 2048 512-байтовым секторам (1 МиБ) что должно быть совместимо со всеми расширенными форматами HDD и подавляющим большинством SSD.
Чтобы использовать gdisk, запустите программу с именем блочного устройства, которое вы хотите изменить. В этом примере используется /dev/sda :
# gdisk /dev/sda
Создание новой таблицы
Важно: Если вы создадите новую таблицу разделов на диске с данными, то все данные на нём будут удалены. Убедитесь, что это действительно то, что вы хотите сделать.
Чтобы создать новую таблицу разделов GUID и стереть все текущие разделы, напишите o в строке. Пропустите этот шаг, если нужная вам таблица уже создана.
Создание разделов
Создайте новый раздел с помощью команды n . Введите номер раздела, первый сектор, последний сектор и тип раздела.
Примечание: Рекомендации по размеру и расположению разделов можно почитать в статье Разметка дисков#Схема разметки.
Номер раздела
Номер раздела — это номер, присвоенный разделу, например, раздел с номером 1 на диске /dev/sda будет /dev/sda1 . Номера разделов могут не совпадать с реальным порядком разделов на диске, в этом случае их можно отсортировать.
Рекомендуется использовать номер по умолчанию, который предложит gdisk.
Первый и последний сектор
Первый и последний сектор раздела могут быть указаны в виде номеров секторов или в виде позиций, измеряемых в кибибайтах ( K ), мебибайтах ( M ), гибибайтах ( G ), тебибайтах ( T ) или пебибайтах ( P ).
Позиция может быть задана:
- в абсолютном выражении от начала диска. Например, 40M в качестве первого сектора указывает позицию 40 МиБ от начала диска.
- в относительном выражении, предваряя размер символами +размер или —размер . Например, +2G указывает на позицию через 2 ГиБ после сектора, предложенного по умолчанию, а -200M указывает на позицию 200 МиБ перед последним доступным сектором.
Нажатие Enter без ввода значения использует значение по умолчанию, которое является началом самого большого доступного блока для первого сектора и концом того же блока для последнего сектора.
- При разметке всегда рекомендуется указывать относительные размеры разделов с помощью нотации +размер и не использовать размеры меньше 1 МиБ. Такие разделы всегда будут выровнены в соответствии со свойствами устройства.
- Оставьте 1 МиБ свободного места в первых 2 ТиБ диска (например, используя +1M в качестве первого сектора раздела) на случай, если вам понадобится создать раздел загрузки BIOS.
Тип раздела
Выберите тип раздела, введя внутренний код gdisk или указав GUID типа раздела вручную. Значение по умолчанию Linux filesystem (GUID 0FC63DAF-8483-4772-8E79-3D69D8477DE4 , внутренний код gdisk 8300 ) должно быть подходящим для большинства случаев.
- Введите L для просмотра списка внутренних кодов gdisk.
- Рекомендуется следовать Discoverable Partitions Specification, поскольку systemd-gpt-auto-generator(8) будет монтировать их автоматически. Смотрите #Отключение автоматического монтирования раздела GPT, если вы хотите отключить автоматическое монтирование для раздела.
| Тип раздела | Точка монтирования | код gdisk |
GUID типа раздела |
|---|---|---|---|
| Файловая система Linux | Любая | 8300 | 0FC63DAF-8483-4772-8E79-3D69D8477DE4 |
| Системный раздел EFI | Любая 1 | ef00 | C12A7328-F81F-11D2-BA4B-00A0C93EC93B |
| Загрузочный раздел BIOS | Нет | ef02 | 21686148-6449-6E6F-744E-656564454649 |
| Linux x86-64 корень (/) | / | 8304 | 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 |
| Linux подкачка | [SWAP] | 8200 | 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F |
| Linux /home | /home | 8302 | 933AC7E1-2EB4-4F13-B844-0E14E2AEF915 |
| Linux /srv | /srv | 8306 | 3B8F8425-20E0-4F3B-907F-1A25A76F98E8 |
| Linux /var | /var 1 | 8310 | 4D21B016-B534-45C2-A9FB-5C16E091FD2D |
| Linux /var/tmp | /var/tmp 1 | 8311 | 7EC6F557-3BC5-4ACA-B293-16EF5DF639D1 |
| Linux LVM | Любая | 8e00 | E6D6D379-F507-44C2-A23C-238F2A3DF928 |
| Linux RAID | Любая | fd00 | A19D880F-05FC-4D3B-A006-743F0F84911E |
| Linux LUKS | Любая | 8309 | CA7D7CCB-63ED-4C53-861C-1742536059CC |
| Linux dm-crypt | Любая | 8308 | 7FFEC5C9-2D00-49B7-8941-3EA10A5586B7 |
- systemd-gpt-auto-generator(8) будет автоматически монтировать раздел только при выполнении определённых условий. Подробнее смотрите systemd (Русский)#Автомонтирование GPT-раздела.
Повторяйте эту процедуру, пока не получите желаемые разделы.
Запись изменений на диск
Совет: Используйте команду c , чтобы изменить имя раздела (PARTLABEL) для удобной его идентификации.
Для записи новой таблицы на диск и выхода используйте команду w .
Советы и рекомендации
Преобразование между MBR и GPT
Совет: Подробности можно почитать на сайте Рода Смита: Converting to or from GPT.
gdisk, sgdisk и cgdisk способны преобразовывать диски MBR и BSD disklabels в GPT без потери данных. После преобразования все первичные и логические разделы MBR становятся разделами GPT с правильными GUID типов разделов и уникальными GUID разделов.
После преобразования потребуется переустановить загрузчик, чтобы настроить его на загрузку с GPT.
- GPT хранит вторичную таблицу в конце диска. По умолчанию эта структура данных занимает 33 сектора по 512 байт (16,5 КиБ). MBR не имеет подобной структуры данных в конце диска, поэтому последний раздел на диске MBR иногда простирается до самого конца диска и не позволяет выполнить полное преобразование. Если это произошло, необходимо отказаться от преобразования и изменить размер последнего раздела.
- Известны проблемы с повреждением резервной копии GPT на ноутбуках с чипсетом Intel, работающих в режиме RAID. Решением является использование AHCI вместо RAID, если это возможно.
Для преобразования таблицы разделов MBR в GPT с помощью sgdisk используйте опцию -g / —mbrtogpt :
# sgdisk -g /dev/sda
Для преобразования GPT в MBR используйте опцию -m / —gpttombr . Имейте в виду, что преобразовать более четырёх разделов из GPT в MBR невозможно.
# sgdisk -m /dev/sda
Сортировка разделов
В ситуации, когда, например, новый раздел создаётся между двумя существующими или раздел удаляется, нумерация разделов может перестать соответствовать их реальному расположению на диске, и для исправления можно выполнить сортировку. В этом примере используется /dev/sda .
# sgdisk -s /dev/sda
Если вы не используете постоянные имена для блочных устройств, то вам может понадобиться обновить файлы конфигурации, в которых используется нумерация разделов, в частности /etc/fstab и/или /etc/crypttab .
Примечание: Перед использованием новых разделов ядро должно перечитать обновлённую таблицу. Перезагрузитесь или попросите ядро перечитать таблицу разделов.
Восстановление заголовка GPT
Если основной или резервный заголовок GPT оказался повреждён, можно восстановить его из сохранившегося заголовка с помощью gdisk. В данном примере используется /dev/sda .
# gdisk /dev/sda
Выберите r для опций восстановления и преобразования (только для экспертов). Далее выберите
- b : использовать резервный заголовок GPT (воссоздать основной)
- d : использовать основной заголовок GPT (воссоздать резервный)
После этого используйте команду w для записи новой таблицы на диск и выхода.
Расширение диска GPT
После увеличения диска (например, в аппаратном RAID-массиве или на диске виртуальной машины) вновь добавленное место можно будет использовать не сразу, так как GPT хранит свои данные в конце диска. Необходимо переместить резервный заголовок GPT в новый конец диска.
Запустите sgdisk с опцией -e / —move-second-header , например:
# sgdisk -e /dev/sda
После этого посмотрите список разделов, и вы должны увидеть появившееся свободное место.
Отключение автоматического монтирования раздела GPT
systemd-gpt-auto-generator(8) будет автоматически монтировать разделы в соответствии с Discoverable Partitions Specification. Иногда это нежелательно.
Автоматическое монтирование можно отключить путём добавления атрибута раздела 63 .
Запустите gdisk, например:
# gdisk /dev/sda
Введите p для просмотра списка разделов и посмотрите номера разделов, для которых вы хотите отключить автоматическое монтирование.
Введите x (экспертные команды).
Введите a — команду установки атрибута. Введите номер нужного раздела и затем номер атрибута 63 . После этого под строкой Set fields are: должно появиться 63 (do not automount) . Нажмите Enter для завершения изменения атрибутов. Повторите этот шаг для всех нужных разделов.
После завершения используйте команду w для записи новой таблицы на диск и выхода.
Также можно использовать sgdisk с опцией -A / —attributes= ; смотрите sgdisk(8) . Например, для установки атрибута 63 разделу /dev/sda2 выполните:
# sgdisk -A 2:set:63 /dev/sda
EFI-приложение gdisk
Его нет в пакетах, но Род Смит предоставляет собранное бинарное приложение EFI на SourceForge. Скачайте gdisk-efi-*.zip и распакуйте архив. Для использования скопируйте gdisk_x64.efi в системный раздел EFI и запустите его с помощью вашего загрузчика или через UEFI Shell.
gdisk_x64.efi позволяет редактировать таблицу разделов ещё до загрузки операционной системы. Он используется так же, как и двоичный файл gdisk в Linux.
Примечание: gdisk_x64.efi не умеет работать с файловыми системами, так что он не сможет делать резервную копию таблицы в файл или восстанавливать таблицу из файла резервной копии.
Смотрите README-efi.txt для более подробной информации.
Смотрите также
- GPT fdisk Tutorial — официальный сайт GPT fdisk.
- Страница GPT fdisk на SourceForge
Использование гибридного жесткого диска в MacBook и установка на него Windows
Эта история о том, как простая переустановка затянулась на несколько дней.
И как я пытался подружить EFI и Legacy на одном SSD в MacBook Pro

Предыстория
В 2018 году я себе приобрел в личное пользование MacBook Pro 15 дюймов, конца 2011 года. Можно уже сказать что он старый, да только на замену прошлого Lenovo он был просто как атомный реактор.
Очень удачно попался с нестандартной комплектацией, с 1680х1050 экраном и увеличенной графикой. И кажется что всё хорошо, можно пользоваться и будет тебе счастье, только для работы одной Mac OS будет мало и через некоторое время я стал ставить на его Windows. И тут я встретил большие проблемы.
Поиск проблем
Большинство информации в интернете рекомендуют ставить через bootcamp, что я и решил сделать как советуют. Только вот мой bootcamp не мог поставить windows. Из предложенного он мог только скачать пакет драйверов и создать\удалить раздел для новой ОС. На этом его функционал закончился. Поиск предлагает переписать несколько строк кода — безрезультатно.
Отложив это дело не надолго я стал искать по ноутбуку информацию. Банально это сверить серийный номер с сайтом и посмотреть что за он. Только официальный сайт ничего полезного не рассказывает. Позже я стал проверять по версии EFI(BootRom) и SMC. И тут я был очень удивлен!
Если версия EFI иногда обновляется с приходом новых обновлений из AppStore, то SMC не обновляется вообще. Конечно, на официальном сайте есть раздел и можно скачать новую версию, что кажется вполне логичным. Только вся проблема в том, что у каждого ноутбука своя версия SMC и всё, она не может меняться(только в самых крайних случаях). В интернете набрел на сайт где рассказывают по модельно в каком ноутбуке должна зашита «эта» версия SMC. Как оказалось, у меня версия от 13 дюймового 1.69f4. В конце концов я пытался понизить версию SMC, а результатов не было. Система говорила что обновилась, а изменений нет.
После всех поисков я терял надежды и решил просто поставить с флешки. И тут разочарование! Система мою звуковую карту видит в системных устройствах, а при попытке установить AMD графику я получаю код ошибки 32. И после установки Intel HD Graphichs я получаю чёрный экран. Пробовал разные сборки, везде один и тот-же результат. В конце концов решение было найдено довольно банально, придя к отцу, взяв его MacBook Pro mid 2012 и поставив в его свой SSD, я поставил Windows и всё было хорошо, я имел одну AMD графику и рабочий звук с остальной периферией. Только я знал что это не вечно и может случиться так что второго ноутбука не будет а переустановить надо. И вот тогда я столкнулся с этим снова.
Таблетка от всех болезней
Практически 95% ресурсов требуют установку через BootCamp, мне эта идея не нравилась, всегда было приятно ручками вручную всё делать. Из прошлой работы Windows я узнал что она работает в режиме Legacy. Я был очень удивлен и не понял как так может быть, если у меня всё работает в системах EFI. По этому в интернете набрел на информацию по конвертации диска из обычного в «гибридный». Тем самым я могу использовать его как GPT и MBR одновременно.
Первым делом мне нужно узнать разметку своего диска.
Я получаю ответ:
sudo gpt -r show /dev/disk0 gpt show: /dev/disk0: Suspicious MBR at sector 0 start size index contents 0 1 MBR 1 1 Pri GPT header 2 32 Pri GPT table 34 6 40 409600 1 GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B 409640 204799960 2 GPT part - 7C3457EF-0000-11AA-AA11-00306543ECAC 205209600 294907904 3 GPT part - EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 500117504 655 500118159 32 Sec GPT table 500118191 1 Sec GPT header
sudo fdisk /dev/disk0 Disk: /dev/disk0 geometry: 31130/255/63 [500118192 sectors] Signature: 0xAA55 Starting Ending #: id cyl hd sec - cyl hd sec [ start - size] ------------------------------------------------------------------------ *1: EE 0 0 2 - 1023 254 63 [ 0 - 500118191] 2: 00 0 0 0 - 0 0 0 [ 0 - 0] unused 3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused 4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused mbp-mansi:~ mansi$
Далее, я начинаю редактировать структуру, согласно информации о разделах:
sudo fdisk -e /dev/disk0 fdisk: could not open MBR file /usr/standalone/i386/boot0: No such file or directory Enter 'help' for information fdisk: 1> edit 1 Starting Ending #: id cyl hd sec - cyl hd sec [ start - size] ------------------------------------------------------------------------ 1: EE 0 0 2 - 1023 254 63 [ 1 - 409639] Partition id ('0' to disable) [0 - FF]: [EE] (? for help) EE Do you wish to edit in CHS mode? [n] N Partition offset [0 - 500118192]: [63] 1 Partition size [1 - 500118191]: [500118191] 409639 fdisk:*1> edit 2 Starting Ending #: id cyl hd sec - cyl hd sec [ start - size] ------------------------------------------------------------------------ 2: AF 1023 254 63 - 1023 254 63 [ 409640 - 204799960] HFS+ Partition id ('0' to disable) [0 - FF]: [AF] (? for help) AF Do you wish to edit in CHS mode? [n] N Partition offset [0 - 500118192]: [409640] 409640 Partition size [1 - 499708552]: [499708552] 204799960 fdisk:*1> edit 3 Starting Ending #: id cyl hd sec - cyl hd sec [ start - size] ------------------------------------------------------------------------ *3: 0C 1023 254 63 - 1023 254 63 [ 205209600 - 294907904] Win95 FAT32L Partition id ('0' to disable) [0 - FF]: [C] (? for help) 0C Do you wish to edit in CHS mode? [n] N Partition offset [0 - 500118192]: [205209600] 205209600 Partition size [1 - 294908592]: [294908592] 294907904 fdisk:*1>
После чего выставляем флаг на третий раздел командой flag 3, и закрываем утилиту, командой exit или q. И проверяем что у нас получилось.
sudo fdisk /dev/disk0 Disk: /dev/disk0 geometry: 31130/255/63 [500118192 sectors] Signature: 0xAA55 Starting Ending #: id cyl hd sec - cyl hd sec [ start - size] ------------------------------------------------------------------------ 1: EE 0 0 2 - 1023 254 63 [ 1 - 409639] 2: AF 1023 254 63 - 1023 254 63 [ 409640 - 204799960] HFS+ *3: 0C 1023 254 63 - 1023 254 63 [ 205209600 - 294907904] Win95 FAT32L 4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
И что бы убедиться у нас всё получилось на 100%, можно скачать дополнительный пакет gdisk и запустить его с такой командой
sudo gdisk /dev/disk0 GPT fdisk (gdisk) version 1.0.4 Warning: Devices opened with shared lock will not have their partition table automatically reloaded! Partition table scan: MBR: hybrid BSD: not present APM: not present GPT: present Found valid GPT with hybrid MBR; using GPT. Command (? for help):
И если всё сделали верно, раздел с MBR стал гибридным.
EFI shell legacy mode?
Самое интересное теперь в установке Windows. Она у нас не пойдет как обычно, система попросту не даст установиться. Это и логично, мы ведь загружаем установку в режиме EFI и требуем работу с GPT разметкой а система не ставит в данном режиме на MBR.
WinNTSetup отлично помогла установить операционную систему. После выбора языка, вызываем консоль сочетанием клавиш Shift + F10 и переходим в каталог с программой, которую предварительно скопировали на флешку. А тут всё просто, запускаем её, указываем файл с установкой, куда хотим ставить и жмём старт. После чего идёт распаковка файлов, запись загрузчика и всё, система почти установлена.

После успешной установки закрываем программу, выходим из установки и перезагружаем ноутбук и выбираем новый раздел с Windows и ждём чудо. Система может перезагрузиться несколько раз, что вполне нормально и после нескольких минут ожидания мы получаем рабочую версию Windows c одной графикой и работающим звуком.

Заключение
После подобных манипуляций и информации в интернете, работа приложения BootCamp становится всё понятнее и понятнее. Она делает данные операции автоматически, мы всё правили вручную. А теперь, после такой информации уже не страшно переустанавливать всё и замена ssd на больше с установкой всех ОС займет на много меньше времени.
Полезные ссылки:
Fdisk
fdisk не понимает GUID Partition Table (GPT), и не предназначен для для работы с крупными разделами. В случае необходимости, вы можете использовать более мощную команду GNU parted(8).
Устройства — это как правило /dev/sda , /dev/sdb и т.п.. Имя устройства относится ко всему диску. Если для обслуживания контроллера не используется библиотека libata (библиоткеув ядра, для обслуживания ATA контроллеров), то существует различие между именами IDE и SCSI дисками. Имена /dev/hd* закреплены за IDE устройствами, и /dev/sd* за SCSI устройствами. Внешние жёсткие диски , обслуживаемые через USB, также имеют имена типа /dev/sd*
Имя раздела состоит из буквенного имени и из номера раздела. Например /dev/sda1,- это первый раздел первого жесткого диска системы.
Диски типа sd могут иметь до 15 разделов. См. также документацию к ядру Linux (файл Documentation/devices.txt ).
- При использовании стиля BSD/SUN , каждый раздел ( спайс ) можно разделить на 8 меток подразделов ( DiskLabels ), один из которых, (третий подраздел) используется для доступа ко всему разделу. Нельзя начинайть раздел, который фактически использует его первый сектор (например, раздел подкачки) с цилиндра 0, так-как это уничтожит метку подраздела. Под своп принято отводить второй подраздел одного из разделов. При этом максимально получается один корневой раздел (занимающий весь первый раздел), один раздел подкачки и 20 подразделов в трёх оставшихся разделах (по семь на каждый). Также возможно разбиение диска, при котором три раздела не используются, а один разбит на подразделы (режим полного диска). Подробнее смотри документацию по FreeBSD.
- При использовании стиля IRIX/SGI первичный раздел может состоять из 16 подразделов, из которых, одиннадцатый представляет весь объем раздела (как третий в стиле BSD ) , а девятый помечен как заголовок томаIRIX/SGI машинах или специализированных для IRIX/SGI дистрибутивах.
- При использованиии стиля DOS , таблицы могут описывать неограниченное количество разделов. В нулевом секторе таблицы есть место для описания 4 разделов (Так называемых первичных разделов). Один из них может быть расширенным разделом, этот раздел можно назвать контейнером, в который можно помещать, «вторичные разделы» (логические диски) — аналогично тому, как в спайс помещаются вторичные разделы (Disklabels) в BSD стиле. В отличии от BSD стиля, где каждый из спайсов может содержать вторичные разделы, в DOS стиле только один (обычно последний) может содержать вторичные разделы. Официально «вторичные разделы» называются логическими дисками , что вносит некоторую путаницу, так-как и раздел, занимающий основной («первичный») раздел также можно назвать «логическим диском». Описание вторичных разделов представляют из себя связанный список дескрипторов, каждый из которых указывает на начальный сектор следующего раздела.
Если это возможно, fdisk стремится получить геометрию диска автоматически. Это не обязательно реальная физическая геометрия диска (на самом деле, современные диски имеют совсем другие физические параметры, чем те, которые выдаёт BIOS в виде C/H/S), но это логическая геометрия диска, которую использует стиль DOS в описании таблицы разделов диска.
Обычно все идет хорошо, без всяких проблем, если Linux — это единственная операционная система на диске. Однако, если на диске вместе с ним стоит другая операционная система, то часто удобно вначале создать хотя-бы один раздел средствами этой, другой, операционной системы. Когда Linux при загрузке увидит таблицу разделов, то попытается подобрать логическую геометрию раздела так, что она будет совпадать с геометрией, используемой в соседней операционной системе.
Всякий раз, когда выводится таблица разделов, происходит проверка соответствия записей таблицы разделов. Проверяется, идентичность физического и логического начала и конца раздела, и что он начинается и заканчивается на границе цилиндра (за исключением первой раздела).
В некоторых версиях MS-DOS создают первый раздел , начало которого находится не на границе цилиндра, а на втором секторе первого цилиндра. В этом случае начало первого раздела не может совпасть с границей цилиндра, но это обычно не вызывает какие-либо проблемы, если у вас не установлена OS/2.
При обновлении содержания таблицы разделов, перед выходом из fdisk вызываются функции sync() и BLKRRPART ioctl() с целью заново перечитать таблицу разделов на диске.
Раньше, после использования fdisk, было необходимо перезагрузить ОС. Сейчас в этом нет необходимости, напротив, быстрая перезагрузка может привести к потере недописанных данных. Заметим, что и ядро и буфер данных дисковой подсистемы может иметь данные в оперативной памяти.
ПРЕДУПРЕЖДЕНИЯ DOS 6.x
Команда DOS 6.x format ищет информацию о разделе в первом секторе области данных раздела, и рассматривает эту информацию как более надежную, чем информаци., содержащаюся в таблице разделов.
Команда format (DOS) ожидает что команда fdisk (DOS) очистила первые 512 байт данных области раздела, при изменении размера размера. Команда format будет проверять эту дополнительную информацию, даже если указать флаг /U, — мы считаем что это ошибка в командах DOS format и fdisk.
Суть в том, что если вы используете команды сfdisk или fdisk (Linux), чтобы изменить размер записи в таблице разделов DOS, то вы должны, используя команду dd, обнулить первые 512 байт, прежде чем использовать команду format (DOS) для форматирования раздела.
Например, если вы используете команду сfdisk для создания DOS раздела на /dev/sda1 , то после выполнения fdisk или cfdisk и перезагрузки Linux, с тем чтобы данные в таблице разделов, стали достоверными, надо выполнить команду
» dd if=/dev/zero of=/dev/sda1 bs=512 count=1 «
обнулив первые 512 байт раздела.
БУДЬТЕ КРАЙНЕ ОСТОРОЖНЫМИ при выполнении команды dd , так как небольшая опечатка в команде может привести к потере данных на диске или стиранию таблицы разделов.
Для лучших результатов, всегда используйте «родные» программы соответствующих ОС при работе с их разделами.
Например, для создания раздела DOS, иcпользуйте программу fdisk операционной системы DOS, а для создания разделов для Linux, используйте програмы fdisk, cfdisk, parted и т.п. )
ОПЦИИ
-b sectorsize задаёт размер сектора диска в байтах. Допустимые значения: 512, 1024, 2048, 4096. (последние версии ядра Linux сами определяют размером сектора диска. Используйте этот параметр только на старых ядрах, или в случае, если вы хотите изменить размер определённый ядром).
-h печать подсказки команды и выход.
-c выключение DOS-совместимого режима работы (рекомендуется).
-C cyls задаёт число цилиндров на диске. Не представляю зачем это надо.
-H heads задаёт число головок диска. (конечно, не реальное их число, а число, которое используется в таблице разделов). Разумное значений 255 и 16.
-S sect задаёт число число секторов на дорожку на диске. (не реальное значение, а число, которое используется в таблице раздела) разумные значения 63.
-l выдача списка разделов для указанного устройства. Если не указано ни одного устройства, то выдаётся информация об всех устройствах, указанных в файле /proc/partitions (если он есть)
-u при выдаче списка разделов, размеры указываются в секторах, а не в цилиндрах.
-s partition выдача размера раздела в блоках.
-v выдача версии программы fdisk.
КОМАНДЫ ИНТЕРАКТИВНОГО РЕЖИМА
Для входа в интерактивный режим даем команду (например для диска /dev/sdg)
fdisk /dev/sdg
Основные команды
Команда m выдаст все возможные команды интерактивного режима:
Help Работа с разбиением диска в стиле DOS (MBR)
a установить/сброосить флаг загрузки на раздел b редактировать вложенную BSD метку диска c установить/сброосить флагсовместимости с dos
d удалить раздел l выдать таблицу известных типов разделов n добавить новый раздел p выдать список видимых разделов t изменить тип раздела v проверить таблицу разделов
m распечатать список команд (эта справка) u изменить единицу измерения показываемых размеров x дополнительные функции (экспертный режим)
Сохранение и выход
w записать таблицу разделов на диск и выйти q выйти без сохранения сделанных изминений
Создание новых меток
g Создать новую пустую таблицу разделов GPT G Создать новую пустую таблицу разделов SGI (IRIX) o Создать новую пустую таблицу разделов DOS s Создать новую пустую таблицу разделов Sun
Комады экспертного режима
Help (expert commands) Работа с разбиением диска в стиле DOS (MBR)
b переместить начало данных в разделе i изменить идентификатор диска
c изменить число цилиндров h изменить число головок s изменить число секторов на дорожке
p выдать таблицу разделов v проверить таблицу разделов d выдать данные первого сектора устройства в необработанном виде D выдать данные метки диска (disklabel) в необработанном виде f исправить порядок разделов m выдать эту справку
Save & Exit
q выйти без сохранения изминений r вернуться в предыдущее меню
ОКРАСКА
Окраска по-умолчанию может быть отключена созданием пустого файла /etc/terminal-colors.d/fdisk.disable..
См terminal-colors.d(5)@ для получения более подробной информации о раскрашивания конфигурацииния.
Логические имена цветов, поддерживаемые FDISK являются: header - заголовок выходных таблиц. help-title - названия секций помощь. warn - предупреждающие сообщения. welcome - приветственное сообщение.
ИЗВЕСТНЫЕ ОШИБКИ И ПРОБЛЕМЫ
Существуют несколько программ с именем fdisk, сfdisk, sfdisk. На самом деле, сfdisk красивая программа, она понимает и создаёт таблицы разделов очень качественно, удовлетворяя строгим требованиям. Используйте её в первую очередь. По сравнению с ней, программа fdisk выглядит менее строгой. fdisk может создать неправильные описания разделов, нестандартные записи и т.п., но если вы знаете что вы делаете, то обычно всё заканчивается успешно. Ее преимущество заключается в том, что она может работать с таблицами в стилях, отличных от DOS ( BSD и проч.) Если у вас нет опыта и знаний работы с разделами, старайтесь.избегать её использование. Программа sfdisk прежде всего для професионалов - пользовательский интерфейс её ужасен, но её работа более корректна, чем fdisk и возможности у неё более мощные чем у fdisk или cfdisk. Кроме того её удобно использовать в неинтерактивном режиме, например в скриптах. В последнее время стала популярна программа parted, parted обладает гораздо большими возможностями - она не только может изменить размер раздела, но и изменить размер файловой системы, находящейся в разделе. Стили разделов IRIX/SGI в настоящее время не поддерживается ядрами Linux, кроме того заголовки директориев IRIX/SGI поддерживаются только частично. Опция dump partition table to file - сброс таблицы разделов в файл - отсутствует.
ПЕРЕМЕННЫЕ СРЕДЫ ОКРУЖЕНИЯ
Установка LIBFDISK_DEBUG=0xffff разрешает отладочный вывод.
СОСТАВ
Программа fdisk — это часть пакета util-linux-ng и доступна по адресу ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/.
СМОТРИТЕ ТАКЖЕ
Авторы
Karel Zak ⟨kzak@redhat.com⟩ Davidlohr Bueso ⟨dave@gnu.org⟩ Оригинальная версия была написана Andries E. Brouwer, A. V. Le Blanc и другими.
ПЕРЕВОД
Перевод с английского сделал Руслан Хихин
Примечание: Последний оригинальный английский man fdisk размещён в обсуждении этой статьи. Правки и предложения приветствуются.