</>

لینوکس‌پارسی

مرجع فارسی آموزش لینوکس

Gentoo • Arch • Debian • Ubuntu • Kali • Parrot
پرش به محتوای اصلی

Command Palette

Search for a command to run...

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 توضیح داده شده است.

اشتراک‌گذاری:

این صفحه در تاریخ ۱ تیر ۱۴۰۵ به‌روزرسانی شده است.