在 Ubuntu 22.04 里装双系统,输了 grub-install 命令,结果蹦出个 “cannot find EFI directory”?瞬间懵了,这啥意思?EFI 目录是啥?为啥找不到?别慌,小编前阵子帮同事装系统就碰见过这情况,折腾了俩小时才搞定。其实这错误看着吓人,说白了就是系统没找到引导程序该待的 “家”,只要把 “家” 的位置指对了就行。今天就把解决步骤拆解开,连为啥会出这错、咋避免下次再犯,都给你说明白,新手跟着做,不用半小时就能搞定。
先说说这 EFI 目录到底是啥。你可以把它想成引导程序的 “专属房间”,UEFI 模式的电脑必须有这个 “房间” 才能正常启动系统。Ubuntu 22.04 在 UEFI 模式下安装时,会自动创建一个 EFI 分区(一般几百 MB 大小),里面存着启动必需的文件。grub-install 命令要往这个分区里装引导程序,要是找不到它,自然就报错了。
那为啥会找不到呢?常见的就这几个原因:
- 你可能把系统装在了 BIOS 模式下,却用了 UEFI 模式的命令(虽然 Ubuntu 22.04 基本都是 UEFI 了,但老电脑可能还有 BIOS 模式)
- EFI 分区没挂载上,就像 “房间” 没开门,命令进不去
- 挂载的路径错了,比如把 EFI 分区挂到了 /mnt/efi 而不是 /boot/efi,系统自然找不到
先确认你的系统是不是 UEFI 模式。开机时按 F2 或 F12 进 BIOS(不同电脑按键不一样,开机时屏幕下方会提示),找 “Boot Mode” 选项,要是显示 “UEFI”,那就是 UEFI 模式;显示 “Legacy” 或 “BIOS”,就是 BIOS 模式。要是 BIOS 模式,这错误就不是 EFI 目录的问题了,得换别的命令,这点先记着。
要是确认是 UEFI 模式,那就按这几步来:
第一步,找到 EFI 分区。打开终端,输 “lsblk” 命令,会列出所有硬盘分区。EFI 分区一般长这样:大小几百 MB,类型是 “vfat”(你看 “TYPE” 那一列),名字可能是 sda1、nvme0n1p1 之类的(nvme 是固态硬盘,sda 是机械硬盘)。小编同事的电脑里,EFI 分区是 sda1,你得自己看清楚自己的。
第二步,挂载 EFI 分区。这步最关键,很多人错就错在这。先建个挂载目录,输 “sudo mkdir /boot/efi”(要是提示目录已存在,就跳过这步)。然后挂载找到的 EFI 分区,比如你的是 sda1,就输 “sudo mount /dev/sda1 /boot/efi”。输完没报错,就说明挂好了;要是提示 “mount: /boot/efi: special device /dev/sda1 does not exist”,那就是分区名记错了,回去看 lsblk 的结果再试。
第三步,重新运行 grub-install 命令。这次得把 EFI 目录的位置说清楚,输 “sudo grub-install –target=x86_64-efi –boot-directory=/boot –efi-directory=/boot/efi/dev/sda”。这里的 /dev/sda 是你的硬盘(不是分区),要是你有多个硬盘,别写错了,比如第二块硬盘是 sdb,就换成 /dev/sdb。
输完等几秒,要是显示 “Installation finished. No error reported”,那就成了!重启电脑,引导菜单就能正常显示了。
可能有人会问,我挂载了 EFI 分区,命令也对,咋还是报错?那你得看看这几点:
- 是不是没加 sudo?这命令得用管理员权限,少了 sudo 肯定不行,小编第一次试就忘了,白跑一趟
- EFI 分区是不是满了?用 “df -h /boot/efi” 看看,要是 Used 那一列到了 100%,就得删点没用的文件(比如旧的引导程序)
- 分区格式对不对?EFI 分区必须是 vfat 格式,用 “blkid /dev/sda1” 看看,要是 TYPE 不是 “vfat”,就得重新格式化(格式化前记得备份里面的文件!)
再给你个表格,对比下 UEFI 和 BIOS 模式下的区别,免得下次搞混:
模式 | 要不要 EFI 分区 | grub-install 命令 | 常见错误 |
---|---|---|---|
UEFI | 必须要 | sudo grub-install –target=x86_64-efi –efi-directory=/boot/efi /dev/sda | cannot find EFI directory |
BIOS | 不需要 | sudo grub-install /dev/sda | 一般不会报 EFI 相关错误 |
其实这错误真不算复杂,小编后来总结,多半是自己急着操作,没仔细看分区名或命令格式。比如有次把 sda1 写成了 sda,输完命令才发现,白等半天。新手操作时,每输一个命令前多看两眼,确认路径、分区名没写错,基本都能一次成。
最后说句实在的,遇到这种问题别慌,Linux 的错误提示虽然是英文,但大多把原因说清楚了。“cannot find EFI directory” 就是告诉你 “没找到 EFI 目录”,那咱就想办法让它找到呗。多试两次,熟悉了这些步骤,以后再碰到类似问题,你也能当别人的 “技术指导” 了。