参考:https://wiki.archlinux.org/index.php/Syslinux#Automatic_Install
查了很多资料,都不太对,我说一下这个问题的原因是Kali Linux 2025.2或在线安装过程中会搜索使用最新的镜像,里面会有grub2这个包,grub2的安装会遇到一些对UEFI主板支持不好的问题,gentoo Linux 是把grub2 排除在安装包外的。
知道了原理就好解决问题了,首先尽量在线安装,可补全一些缺少的插件,而且你知道是grub 2带来的问题反而处理起来很简单。
也可以使用带grub的随便什么系统安装盘,Windows电脑盘不太行,但是别人做好的那种带白菜工具包的,集成修复软件的安装盘是没问题,可以直接找到修复软件或者grub软件,修复、安装并引导硬盘的grub引导就行。
Linux程序猿的方法是:
用默认的分区程序测试了一下,grub-install也有个安装技巧,发现需要在其他分区前设置一个bios_grub分区。这个分区可以很小,1-2MB就可以。就是在分区前面加上一个1-2MB大小的分区,设定它的标志为“bios_grub",这样就可以正常安装Grub了。
注意grub-install总是失败,还最可能是和你的BIOS的设置直接相关的,这个问题来自过去的硬盘结构都是BIOS分区表,现代磁盘和多数系统都已经是GPT分区表结构了。对应不同的分区表,你需要修改不同的BIOS设置。
grub-install的频繁失败,你就需要修改自己的BIOS设置,你必须知道当前系统 BIOS Boot Mode 是 UEFI 还是 Legacy。
1、当 BIOS Boot Mode 是 UEFI
你的引导分区 Disklabel type 必须是 gpt。
grub-install --target=<TARGET> --boot-directory=/boot --efi-directory=/boot --bootloader-id=GRUB /dev/sda
该命令代表把 grub 安装到 sda 硬盘的引导扇区。
这里的 /dev/sda 根据你的实际情况修改。
< TARGET> 的取值:
Intel 32 位: i386-efi
Intel 64 位: x86_64-efi
Arm 32 位: arm-efi
Arm 64 位: arm64-efi
2、当 BIOS Boot Mode 是 Legacy
你的引导分区 Disklabel type 必须是 msdos。
grub-install --target=<TARGET> --boot-directory=/boot /dev/sda
该命令代表把 grub 安装到 sda 硬盘的引导扇区。
同样这里的 /dev/sda 根据你的实际情况修改。
< TARGET> 的取值:
Intel 32 位: i386-pc
Intel 64 位: i386-pc
Arm 32 位:不支持
Arm 64 位:不支持
grub-install /dev/sda1 代表把 grub 安装到 sda 硬盘的第一个分区。
如果是这种方式,需要由主引导分区的 bootloader 引导至这个分区。
grub-install 默认安装 GRUB 镜像到 /boot 目录。你可以使用 --boot-directory= 参数指定目录位置,比如当你在 USB 安装环境时,
--boot-directory=/mnt/boot
请自行区分自己在chroot环境或优盘或光盘修复环境中对grub-install的用法命令的改变。
3、第三点,注意到/boot/grub/grub.cfg一般避免错误是禁止直接修改的,一般使用
grub-mkconfig -o /boot/grub/grub.cfg
生成 /boot/grub/grub.cfg,无须手动修改。
Device Start End Sectors Size Type
/dev/sdb1 2048 4095 2048 1M Microsoft basic data bios_grub分区
/dev/sdb2 4096 58597375 58593280 27.9G Linux filesystem /boot/efi
/dev/sdb3 58597376 89847807 31250432 14.9G Linux swap
/dev/sdb4 89847808 1000214527 910366720 434.1G Linux filesystem /
修改了BIOS 配置,联网并重新分区,修复grub,安装成功