LINUX.ORG.RU

Осилил UEFI и GPT

 ,


6

1

На дворе почти 2015 год, а вы все еще используете BIOS с Bootloader'ами вместо так всеми ненавистного UEFI? Да и вообще, кто использует MBR, когда объемы жетских дисков давно перевалили за 2TiB?

Установка Linux с использованием GPT-таблицы разделов (вместо MBR) и без использования загрузчика (на самом деле загрузчик сам UEFI) немногим отличается от своего классического варианта.

На картинке и видео процесс загрузки такой системы. Как видно, от замыкания Power Switch пин-контактов на материнской плате и до загрузки системы проходит ровно 10 секунд.

Как всегда, начинаем установку с подготовки диска.
Забудьте про fdisk и MBR, на его смену пришел parted и GPT.

# parted -a optimal /dev/sda
(parted) mklabel gpt
(parted) unit MiB
(parted) mkpart esp fat32 1 513
(parted) mkpart primary ext4 513 33281
(parted) set 1 boot on
(parted) quit

И получаем такую картину с двумя разделами.

# parted /dev/sda -s unit GiB print
Model: ATA SanDisk SSD U110 (scsi)
Disk /dev/sda: 58.7GiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start    End      Size     File system  Name     Flags
 1      0.00GiB  0.50GiB  0.50GiB  fat32        esp      boot
 2      0.50GiB  32.5GiB  32.0GiB  ext4         primary

Первый раздел используется как загрузочный, в нем предпологается хранить ядра. FAT32/16 обязательное требование к файловой системе, т.к. его понимает UEFI и сможет загрузить что угодно с этого раздела.

# mkfs.vfat -F 32 /dev/sda1
# mkfs.ext4 /dev/sda2

# mount /dev/sda2 /mnt
# mount /dev/sda1 /mnt/boot

Запускаем какой-нибудь setup и устанавливаем дистрибутив в обычном режиме. Во время сборки ядра Linux необходимо включить опцию CONFIG_EFI_STUB=y, а в CONFIG_CMDLINE=root=/dev/sda2 ro quiet перечислить все нужные вам параметры ядра.

# cp arch/x86_64/boot/bzImage /boot/vmlinuz64.efi

Прописываем загрузку ядра в UEFI и собственно на этом все.

# efibootmgr -c -l "\vmlinuz64.efi" -L "Linux64"
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000,0007
Boot0007 UEFI: Built-in EFI Shell
Boot0000* Linux64

Выигрыш в скорости загрузки UEFI-системы по сравнению с grub/lilo/syslinux около ~3-5 секунд.

А теперь вопрос. Обязательно ли перечислять параметры ядра в CONFIG_CMDLINE? Потому что пробовал их указать в efibootmgr в конце — непроканало. ЧЯДНТ? Получается, надо каждый раз пересобирать ядро?

Перемещено leave из talks

★★★★★

-l /vmlinuz-linux -u "cryptdevice=/... root=/... rw loglevel=3"

Под рачем работает указать с параметром -u

evilmanul ()
Последнее исправление: evilmanul (всего исправлений: 1)

Потому что пробовал их указать в efibootmgr в конце — непроканало.

Я добавлял ядро с нужными параметрами следующим образом:

echo 'root=UUID=33a02342-70da-4f8d-9868-2f8e7330ec90 ro rootfstype=ext4 add_efi_memmap initrd=\EFI\ubuntu\initrd.img' | iconv -f ascii -t ucs2 | efibootmgr -c -g -d /dev/sda -p 1 -L "Kubuntu" -l '\EFI\ubuntu\vmlinuz.efi' -@ -
Всё работает.

Andrew ★★★ ()

полгода так гружу.

Получается, надо каждый раз пересобирать ядро?

я пересобираю, но мне как-то в удаленном треде посоветовали полурабочий, уже чем неподходящий не помню вариант.

vim ()

И стоит ли переходить с MBR (fdisk) на GPT (parted) разметку, если винт всего 64гб?

Да и вообще, кто использует MBR, когда объемы жетских дисков давно перевалили за 2TiB?

Ты наркоман?

Выигрыш в скорости загрузки UEFI-системы по сравнению с grub/lilo/syslinux около ~3-5 секунд.

Ну охренеть теперь, пойду поем.

Valkeru ★★★★ ()
Ответ на: комментарий от Valkeru

Поддерживаю, на буке с ссд разницы нет, а на десктопе только сеть с бриджами с минуту поднимается. Больше разделов, угу, и тутже -1 тупо для загрузки да еще и ничего сложнее fat32 не умеет, прогресс блин

anonymous ()
Ответ на: комментарий от Spoofing

используя uefi вместо загрузчика помимо прочего выигрышь в скорости 3-5 секунд

Дай угадаю, это когда стоит GRUB_TIMEOUT=3 и GRUB_TIMEOUT=5 соотвественно. Но внезапно, можно поставить '0'

anonymous_sama ★★★★★ ()
Ответ на: комментарий от anonymous

Там есть особый кейс, когда загрузиться не с чего, но файлы достать надо. Можно запустить какой-то бинарник, дающий консоль, прямо из UEFI, но я в подробности не вникал.

tlx ★★★★★ ()

(parted) mkpart esp fat32 1 513

На дворе почти 2015-й год, а вы все еще используете fat32?

Да и вообще, кто использует MBR, когда объемы жетских дисков давно перевалили за 2TiB?

Я использую, диск на 3Тб. Брат жив, камней никаких.

Lavos ★★★★★ ()
Ответ на: комментарий от evilmanul

Тратить полезное место на диске на какой-то ненужный раздел с некрофс? Ну, вот еще! И_так_все_работает.

Lavos ★★★★★ ()

Забудьте про fdisk и MBR, на его смену пришел parted и GPT.

про parted тоже забудь. он забагован не хило так (имеется ввиду что сделан поидеотски: создаёт какие-то пустные места в разделах и мутные дефаулты имеется всякие).

используй gdisk\cgdisk (из пакета gptfdisk)

user_id_68054 ★★★★★ ()

А у меня винда 8 грузится 6 секунд с момента включения пк. Убунта примерно 7-8.. Кстати, тут был чел с генточки, у которого за 4 секунды в терминал грузит :-) Все эти GPT на маках уже с 2009 года, кстати, пользы от GPT, имхо, никакой.

menangen ★★★★★ ()
Ответ на: комментарий от user_id_68054

Про parted согласен, муть какая-то, gdisk нормально создаёт разделы.

anonymous ()

Я использую загрузку UEFI вместе с Grub-EFI. У меня на лаптопе некоторые ядра не грузятся (есть баг на багзилле), а через Grub все в порядке. Да и иногда нужно отредактировать cmdline, но для этого можно просто отдельный пункт в меню сделать, конечно.

К слову, UEFI поддерживает загрузку драйверов, и для всех современных ФС они есть, поэтому совершенно необязательно хранить на FAT32-разделе ядро и initramfs, достаточно загрузить драйвер ext4/btrfs и загрузиться уже нормально.

ValdikSS ★★★★★ ()
Ответ на: комментарий от ValdikSS

У меня на лаптопе некоторые ядра не грузятся (есть баг на багзилле)

Та же фигня была, думал, что у меня кривой UEFI, помогало пересобрать ядро с чуть другим конфигом. Можно ссылочку на багзиллу?

К слову, UEFI поддерживает загрузку драйверов, и для всех современных ФС они есть, поэтому совершенно необязательно хранить на FAT32-разделе ядро и initramfs, достаточно загрузить драйвер ext4/btrfs и загрузиться уже нормально.

Можно положить модули ядра на EFI-раздел и загружать их оттуда через UEFI? Как это организовать?

gentoo_root ★★★★★ ()
Ответ на: комментарий от gentoo_root

Только это не модули ядра, а драйверы для UEFI.

ValdikSS ★★★★★ ()
Ответ на: комментарий от ValdikSS

Починили уже.

Здорово, я как раз давно не замечал этот баг, думал, мне просто везёт. Хорошо, что это оказался всё-таки баг ядра, а не прошивки.

Только это не модули ядра, а драйверы для UEFI.

А, я понял, это чтобы UEFI научилось читать не только с FAT... Тоже прикольно, надо будет заюзать, чтобы ядра не копировать в /boot/efi.

Спасибо!

gentoo_root ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.