Arch Linux 未在 UEFI 系統上顯示引導載入程序
我最近在我的筆記型電腦(Dell Precision M4500)上安裝了 Arch。我剛剛更換了硬碟,所以在安裝過程中我不得不從頭開始分區。我選擇了 GPT 分區並將我的系統設置為使用 UEFI 啟動。
在安裝過程中,我嘗試安裝 GRUB 並失敗,因為我使用傳統命令安裝到 MBR 磁碟 (
grub-install /dev/sda
)。這失敗了一條關於 EFI 的消息(恐怕我不記得是什麼),所以我轉而選擇了bootctl
。我按照Arch Beginners Guide寫了這封信:# bootctl install
boot/loader/entries/arch.conf
使用以下內容創建:title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options root=/dev/sda2 rw
和
/boot/loader/loader.conf
timeout 3 default arch
然後我繼續正常安裝系統。但是,在重新啟動後,系統 POST 後出現黑屏並且沒有引導載入程序。進入引導載入程序的唯一方法是按下
F12
以調出系統的引導菜單(與讓我進入 BIOS 的菜單相同,或者當系統不是 EFI 時讓我進入 BIOS),然後選擇“linux bootloader”從菜單中。這將帶我進入一個引導載入程序螢幕,我可以在其中選擇“Arch”。
- 按下時我得到的菜單
F12
:再次選擇“grub”只會讓我直接回到同一個菜單。 3. 如果從第一個菜單中選擇“Linux Boot Manager”,我會得到一個帶有 Arch 條目和“EFI 預設載入程序”條目的菜單:
選擇“Arch”啟動我的 Arch 安裝並選擇“EFI 預設載入程序”將我帶到下面 4 所示的菜單。 4. 如果從第一個菜單中選擇“UEFI:INT 13(RAID.0x80)”,我會得到一個只有 Arch 條目的菜單,選擇哪個將啟動我的 Arch 系統:
我也嘗試安裝
grub
(這次是正確的):pacman -S efibootmgr grub os-prober grub-install --target=x86_64-efi --efi-directory=/boot/EFI --bootloader-id=grub --recheck grub-mkconfig -o /boot/grub/grub.cfg
這使得
F12
啟動菜單中出現了一個新的“grub”條目,但選擇它會使我進入黑屏,然後返回啟動菜單。我
grub.cfg
的是(已刪除評論):insmod part_gpt insmod part_msdos if [ -s $prefix/grubenv ]; then load_env fi if [ "${next_entry}" ] ; then set default="${next_entry}" set next_entry= save_env next_entry set boot_once=true else set default="0" fi if [ x"${feature_menuentry_id}" = xy ]; then menuentry_id_option="--id" else menuentry_id_option="" fi export menuentry_id_option if [ "${prev_saved_entry}" ]; then set saved_entry="${prev_saved_entry}" save_env saved_entry set prev_saved_entry= save_env prev_saved_entry set boot_once=true fi function savedefault { if [ -z "${boot_once}" ]; then saved_entry="${chosen}" save_env saved_entry fi } function load_video { if [ x$feature_all_video_module = xy ]; then insmod all_video else insmod efi_gop insmod efi_uga insmod ieee1275_fb insmod vbe insmod vga insmod video_bochs insmod video_cirrus fi } if [ x$feature_default_font_path = xy ] ; then font=unicode else insmod part_gpt insmod ext2 set root='hd0,gpt2' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 98202b4b-af35-413a-b3ff-87c149c5061d else search --no-floppy --fs-uuid --set=root 98202b4b-af35-413a-b3ff-87c149c5061d fi font="/usr/share/grub/unicode.pf2" fi if loadfont $font ; then set gfxmode=auto load_video insmod gfxterm set locale_dir=$prefix/locale set lang=en_US insmod gettext fi terminal_input console terminal_output gfxterm if [ x$feature_timeout_style = xy ] ; then set timeout_style=menu set timeout=5 else set timeout=5 fi menuentry 'Arch Linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-98202b4b-af35-413a-b3ff-87c149c5061d' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod fat set root='hd0,gpt1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 9943-114D else search --no-floppy --fs-uuid --set=root 9943-114D fi echo 'Loading Linux linux ...' linux /vmlinuz-linux root=UUID=98202b4b-af35-413a-b3ff-87c149c5061d rw quiet echo 'Loading initial ramdisk ...' initrd /initramfs-linux.img } submenu 'Advanced options for Arch Linux' $menuentry_id_option 'gnulinux-advanced-98202b4b-af35-413a-b3ff-87c149c5061d' { menuentry 'Arch Linux, with Linux linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-advanced-98202b4b-af35-413a-b3ff-87c149c5061d' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod fat set root='hd0,gpt1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 9943-114D else search --no-floppy --fs-uuid --set=root 9943-114D fi echo 'Loading Linux linux ...' linux /vmlinuz-linux root=UUID=98202b4b-af35-413a-b3ff-87c149c5061d rw quiet echo 'Loading initial ramdisk ...' initrd /initramfs-linux.img } menuentry 'Arch Linux, with Linux linux (fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-fallback-98202b4b-af35-413a-b3ff-87c149c5061d' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod fat set root='hd0,gpt1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 9943-114D else search --no-floppy --fs-uuid --set=root 9943-114D fi echo 'Loading Linux linux ...' linux /vmlinuz-linux root=UUID=98202b4b-af35-413a-b3ff-87c149c5061d rw quiet echo 'Loading initial ramdisk ...' initrd /initramfs-linux-fallback.img } } if [ -f ${config_directory}/custom.cfg ]; then source ${config_directory}/custom.cfg elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then source $prefix/custom.cfg; fi
我的分區表(注意錯誤,我不知道這是否相關):
$ sudo parted /dev/sda print Error: The backup GPT table is corrupt, but the primary appears OK, so that will be used. OK/Cancel? OK Model: ATA TOSHIBA MQ01ABD0 (scsi) Disk /dev/sda: 750GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 538MB 537MB fat32 boot, esp 2 538MB 32.7GB 32.2GB ext4 3 32.7GB 462GB 429GB ext4 4 462GB 479GB 17.2GB linux-swap(v1) 5 479GB 750GB 271GB ntfs msftdata
並且
/etc/fstab
:# /dev/sda2 UUID=98202b4b-af35-413a-b3ff-87c149c5061d / ext4 rw,relatime,data=ordered 0 1 # /dev/sda3 UUID=baa9dd1e-835c-4d88-af8a-31dc97ac7af6 /home ext4 rw,relatime,data=ordered 0 2 # /dev/sda1 UUID=9943-114D /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 2 # /dev/sda4 UUID=8eaf91cd-f638-487b-8299-50d39342df0d none swap defaults 0 0
(我的 EFI 分區 (
sda1
) 安裝在/boot
; 應該是這樣/boot/EFI
嗎?)所以,我的問題是,我怎樣才能讓我的系統直接啟動到可用的引導載入程序而無需按下
F12
?我更喜歡這個引導載入程序,但如果有必要grub
我可以忍受。bootctl
在嘗試了各種各樣的事情之後,沒有任何區別,我終於發現我必須做的是在我的 BIOS 中禁用快速啟動。就我而言,它是:
將其從“最小”更改為“徹底”讓我無需點擊即可直接進入我的引導載入程序
F12
。