1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > kali更新grub修复双系统windows10引导启动项

kali更新grub修复双系统windows10引导启动项

时间:2022-05-07 21:51:58

相关推荐

kali更新grub修复双系统windows10引导启动项

kali双系统grub修复windows10引导启动项

背景

本人笔记本只有一块SSD硬盘,装有一个UEFI启动模式的win10 操作系统,经过分区后安装了KALI,结果6月某次最新更新kali系统重启电脑后,grub引导界面没有了win10的启动项。

搜索过很多“双系统grub添加Windows10引导启动项”之类文章,照做总是提示不能识别efi启动分区sda1。估计是kali升级后添加的windows启动项不能再简要设置指定位置,要严格按照grub手册参数要求,$hints_string 和 $fs_uuid 缺一不可。

解决方法

1:

fdisk -l 查看确认efi启动分区是否sda1,或者其他分区;

首先要知道win10启动项分区的UUID,使用blkid /dev/sda1或者grub命令均可,详情如下

blkid /dev/sda1# 或者grub-probe -t fs_uuid -d /dev/sda1

2:修改grub.cfg文件

首先定位 /boot/grub/grub.cfg,修改权限为777;

UEFI/GPT 模式下安装的 Windows

这个模式寻找 Windows 的启动加载器的位置,然后当用户选择了相应的菜单条目的时候,通过链式载入的方法在 GRUB 之后加载它。这里主要的任务是找到 EFI 系统分区然后从上面运行启动加载器。

注意: 这个启动项仅在 UEFI 模式下才起作用,而且 Windows 和 UEFI 的位数必须相同。

if [ ‘${grub_platform}’ == ‘efi’ ]; thenmenuentry ‘Microsoft Windows Vista/7/8/8.1/10 UEFI/GPT’ {insmod part_gptinsmod fatinsmod chainsearch --no-floppy --fs-uuid --set=root $hints_string $fs_uuidchainloader /EFI/Microsoft/Boot/bootmgfw.efi}fi

其中 $hints_string 和 $fs_uuid 由下述两个命令得到。

$fs_uuid 命令检测 EFI 系统分区的 UUID:

grub-probe --target=fs_uuid esp/EFI/Microsoft/Boot/bootmgfw.efi

输出:1ce5-7f28

或者(以 root 身份)运行 blkid 然后从结果中找到 EFI 系统分区的 UUID:

blkid /dev/sda1

输出:/dev/sda1: SEC_TYPE=“msdos” UUID=“1ce5-7f28” BLOCK_SIZE=“512” TYPE=“vfat” PARTLABEL=“EFI system partition” PARTUUID=“d8cc1e8f-5tb8-4cd9-85v8-e7dfedcc327d”

$hints_string 命令可以确定 EFI 系统分区的位置,在当前的例子中是 harddrive 0:

grub-probe --target=hints_string esp/EFI/Microsoft/Boot/bootmgfw.efi

输出:–hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1

(如果输出为:–hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 那说明你的window是BIOS/MBR 模式下安装的 Windows)

这两个命令都是假设 Windows 使用的 ESP 是挂载在$esp上的。当然,Windows的 EFI 文件路径可能有变,因为这就是Windows…

本例中实际 /dev/sda1 是挂载在 /boot/efi ,所以用 /boot/efi 替换上述的 esp

结果

修改 /boot/grub/grub.cfg文件中:

### BEGIN /etc/grub.d/30_os-prober ###### END /etc/grub.d/30_os-prober ###

添加中间内容实际修改为:

### BEGIN /etc/grub.d/30_os-prober ###menuentry 'Microsoft Windows 10' {insmod part_gpt ## -> 现在一般是gpt格式的硬盘insmod fat ## -> 实际上是fat格式,可以自己试一下是vfat还是fatinsmod chainsearch --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 1ce5-7f28chainloader /EFI/Microsoft/Boot/bootmgfw.efi ## 注意大写}### END /etc/grub.d/30_os-prober ###

保存,重启,搞定。

结语

本文仅适合UEFI/GPT 模式下安装的 Windows,kali 双系统情况,如果你是BIOS/MBR 模式下安装的 Windows,请参考:GRUB:BIOS/MBR 模式下安装的 Windows

本人的台式机也是如此,试了很多文章的方法都是比较旧的依据grub方式复杂的命令模式,还不能修复,原因就是那些文章都是基于grub旧版,升级最新的linux都依据使用了grub2,启动文件和参数都发生了变化,最简单的方式是,首先修复windows的正常启动,安装使用 Grub2Win,定位到 linux 的grub2启动文件,通常在 /boot/grub/grub.cfg,在windows 模式下,使用 Grub2Win 导入这个grub.cfg(可以用 DiskGenius 读取linux文件系统的boot文件夹,将此文件复制到 win 的硬盘),就可以在win 启动菜单添加 linux(kali)的 grub 启动菜单项。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。