Осилил UEFI и GPT
На дворе почти 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