EFI System Partition و efibootmgr
آشنایی با EFI System Partition، متغیرهای EFI، efibootmgr و مدیریت ورودیهای بوت در UEFI.
EFI چیست؟
EFI (Extensible Firmware Interface) و جانشین آن UEFI، استاندارد مدرن firmware رایانهها هستند که جایگزین BIOS شدهاند. EFI از متغیرهای ذخیرهشده در NVRAM برای مدیریت ورودیهای بوت استفاده میکند؛ این متغیرها در مسیر /sys/firmware/efi/efivars در دسترساند.
برای نصب Gentoo روی UEFI، باید با سه مفهوم اصلی آشنا باشید: EFI System Partition (ESP)، متغیرهای EFI و ابزار efibootmgr.
EFI vs UEFI
UEFI نسخهٔ استانداردشده و توسعهیافتهٔ EFI است. در عمل این دو اصطلاح بهجای هم استفاده میشوند. در Gentoo معمولاً از UEFI صحبت میکنیم.
EFI System Partition (ESP)
ESP یک پارتیشن FAT32 است که فایلهای بوتلودر در آن قرار میگیرند. EFI firmware مستقیماً فایلهای با پسوند .efi را روی ESP اجرا میکند. ESP معمولاً در یکی از این مسیرها سوار میشود:
/boot/efi— رویکرد سنتی Gentoo/boot— رویکرد سادهتر، کل/bootبهعنوان ESP
حجم ESP
برای نصب تکتوزیعه، ۵۱۲ مگابایت ESP کافی است. اما اگر چند توزیع یا چند بوتلودر روی ESP دارید، حداقل ۱ گیگابایت توصیه میشود.
ساخت ESP
# ساخت پارتیشن ESP با parted
parted /dev/sda mkpart ESP fat32 1MiB 513MiB
parted /dev/sda set 1 esp on
# ساخت فایل سیستم FAT32
mkfs.fat -F 32 /dev/sda1
# سوار کردن در مسیر بوت
mkdir -p /mnt/gentoo/boot/efi
mount /dev/sda1 /mnt/gentoo/boot/efiمتغیرهای EFI
متغیرهای EFI در NVRAM ذخیره میشوند و ورودیهای بوت، ترتیب بوت و تنظیمات firmware را شامل میشوند. در لینوکس این متغیرها در /sys/firmware/efi/efivars قابل دسترسیاند.
# بررسی دسترسی به متغیرهای EFI
ls /sys/firmware/efi/efivars | head
# خروجی:
# Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c
# BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c
# BootOptionSupport-8be4df61-93ca-11d2-aa0d-00e098032b8cهرگز efivars را دستی پاک نکنید
فایلهای /sys/firmware/efi/efivars/* فایلهای معمولی نیستند؛ هر تغییری روی آنها مستقیماً در NVRAM ذخیره میشود. حذف دستی آنها میتواند firmware را خراب کند. همیشه از efibootmgr استفاده کنید.
ابزار efibootmgr
efibootmgr ابزار خط فرمان برای مدیریت ورودیهای بوت EFI است. ابتدا آن را نصب کنید:
emerge --ask sys-apps/efibootmgrنمایش ورودیهای بوت
efibootmgr
# خروجی:
# BootCurrent: 0001
# Timeout: 5 seconds
# BootOrder: 0001,0000,0002
# Boot0000* Linux Boot Manager
# Boot0001* Gentoo HD(1,GPT,12345678-...)/File(\EFI\Gentoo\grubx64.efi)
# Boot0002 UEFI:CD/DVD Driveتوضیح خروجی:
| فیلد | توضیح |
|---|---|
BootCurrent | ورودی که اکنون از آن بوت شده |
Timeout | زمان انتظار منوی بوت به ثانیه |
BootOrder | ترتیب اولویت بوت |
BootXXXX* | ورودیهای بوت (* یعنی فعال) |
ساخت ورودی بوت جدید
اگر GRUB بهصورت خودکار ورودی بوت نساخت، میتوانید بهصورت دستی آن را ایجاد کنید:
# ساخت ورودی بوت برای Gentoo
efibootmgr --create --disk /dev/sda --part 1 --label "Gentoo" --loader '\EFI\Gentoo\grubx64.efi'
# خروجی:
# BootCurrent: 0001
# BootOrder: 0001,0000,0002
# Boot0001* Gentooتوجه: در مسیر --loader باید از بکاسلش (backslash) استفاده کنید، چون این مسیر توسط firmware خوانده میشود که از قرارداد ویندوزی پیروی میکند.
تغییر ترتیب بوت
# قرار دادن Gentoo در اولویت اول
efibootmgr --bootorder 0001,0000,0002
# تنظیم timeout به ۱۰ ثانیه
efibootmgr --timeout 10حذف یک ورودی بوت
# حذف ورودی Boot0002
efibootmgr --bootnum 0002 --delete-bootnumنصب GRUB برای EFI
پس از ساخت ESP و نصب GRUB، دستور grub-install بهصورت خودکار ورودی بوت ایجاد میکند:
# نصب GRUB برای UEFI
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Gentoo
# خروجی مطلوب:
# Installation finished. No error reported.سپس ورودی ایجادشده را بررسی کنید:
efibootmgr -v
# خروجی شامل خطی شبیه:
# Boot0001* Gentoo HD(1,GPT,xxx)/File(\EFI\Gentoo\grubx64.efi)Secure Boot
Secure Boot قابلیتی در UEFI است که فقط بوتلودرهای امضاشده با کلید معتبر را اجرا میکند. این قابلیت برای جلوگیری از بدافزار در زمان بوت طراحی شده است.
Gentoo و Secure Boot
Gentoo بهصورت پیشفرض Secure Boot را فعال نمیکند. برای فعالسازی، باید کلید خود را به firmware اضافه کنید یا از بستههایی مانند app-crypt/sbsigntools و sys-boot/shim استفاده نمایید. در نصب اولیه، توصیه میشود Secure Boot را در firmware غیرفعال کنید تا دردسر کمتری داشته باشید.
برای بررسی وضعیت Secure Boot:
# اگر 1 باشد، Secure Boot فعال است
cat /sys/firmware/efi/efivars/SecureBoot-*
# یا
bootctl statusخطاهای رایج
۱. خطای efibootmgr: EFI variables are not supported
efibootmgr: EFI variables are not supported on this systemدلیل: سیستم در حالت Legacy BIOS بوت شده است. راهحل: از آموزش Legacy BIOS استفاده کنید یا سیستم را با فلش UEFI بوت کنید.
۲. عدم ایجاد ورودی بوت توسط GRUB
اگر grub-install خطا ندهد ولی ورودی بوت ایجاد نشود:
# ایجاد دستی ورودی
efibootmgr -c -d /dev/sda -p 1 -L "Gentoo" -l '\EFI\Gentoo\grubx64.efi'۳. خطای Could not prepare Boot variable
دلیل: NVRAM پر است یا firmware قفل شده. راهحل: ورودیهای قدیمی را حذف کنید یا firmware را بهروز نمایید.
# حذف ورودیهای غیرضروری
efibootmgr -b 0002 -B
efibootmgr -b 0003 -Bبهروزرسانی firmware
برخی مشکلات EFI با بهروزرسانی firmware سازندهٔ مادربرد حل میشوند. همیشه از آخرین نسخهٔ firmware استفاده کنید.
خلاصه و مرحله بعد
EFI System Partition و متغیرهای EFI هستهٔ مدیریت بوت در UEFI هستند. با ابزار efibootmgr میتوان ورودیهای بوت را مدیریت کرد و کنترل کاملی روی فرایند بوت داشت.
برای نصب کامل Gentoo روی UEFI، آموزش UEFI را بخوانید. برای آشنایی با GPT که مکمل UEFI است، آموزش GPT را ببینید. نصب GRUB نیز در آموزش GRUB توضیح داده شده است.
این صفحه در تاریخ ۱ تیر ۱۴۰۵ بهروزرسانی شده است.