Kali虚拟机开机停在grub提示符或者直接进入grub rescue模式,根本原因是引导加载器丢失或无法定位系统内核,解决思路是利用Live镜像进入应急环境,chroot挂载原系统后重装grub。
先搞清楚grub到底坏在哪
grub损坏在Kali虚拟机里太常见了,尤其是你动过分区、调整过磁盘大小、或者Windows和Kali双系统后Windows更新搞乱了引导,grub损坏通常分两种状态,修复手段完全不同。
grub rescue模式:屏幕黑底白字显示grub rescue>,这说明grub主程序还在,但找不到包含/boot/grub的分区,你输入ls会看到类似(hd0) (hd0,msdos1) (hd0,msdos2)的列表,但就是引导不了系统。
grub> 普通模式:能进到grub>提示符,说明grub主程序加载成功了,但菜单配置丢失或者内核路径不对,这种状态相对好办,手动指定内核启动就行,实在不行再重装grub。
还有一种最隐蔽的情况——启动后直接黑屏或者自动重启,连grub界面都看不到,这种大概率不是grub本身损坏,而是虚拟机BIOS设置里引导顺序乱了,或者虚拟磁盘的引导标志被误删了。
修复前的准备工作
准备Kali Live镜像
打开VMware或VirtualBox,右键虚拟机设置,在CD/DVD光驱里挂载你下载好的Kali ISO镜像,注意在虚拟机设置里要勾选“启动时连接”,并且在固件选项里确保光驱排在硬盘之前。
然后启动虚拟机,选择“Live system”或者“Graphical install”进入Live环境,如果你手头只有之前的Kali ISO文件,没有额外下载也没关系,版本不用完全一致,只要是Kali的Live镜像就行。
确认虚拟磁盘分区结构
进入Live环境后,打开终端,先看一眼分区情况:
sudo fdisk -l
sudo lsblk -f
这两条命令能让你快速了解系统装在哪个分区,文件系统是什么类型,boot分区是独立分区还是和根分区在一起,多数Kali虚拟机默认是单分区,/boot目录直接位于根分区下,这种情况修grub最简单。
如果是UEFI引导的虚拟机,你会看到一个小分区(通常100M-500M),文件系统是vfat,那就是EFI系统分区,记下它的设备名,后面要挂载它。
核心修复步骤:chroot + 重装grub
这是整个教程最核心的部分,也是你以后遇到类似问题都能用的万能方案,我用的是Kali 2023.4自带的Live环境,全程实际操作过的流程。
挂载系统分区
假设你的Kali根分区是/dev/sda2,EFI分区是/dev/sda1(如果有的话),按下面顺序挂载:
sudo mount /dev/sda2 /mnt sudo mount /dev/sda1 /mnt/boot/efi sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys
如果你的根分区是LVM逻辑卷或者用了其他布局,对应调整设备路径,挂载完用df -h验证一下,看到/mnt下出现了你熟悉的目录结构(home、etc、usr、var这些)就说明挂对了。
进入chroot环境
sudo chroot /mnt /bin/bash
执行完这条命令,你的终端提示符会变成root@kali:/#,此时你已经“进入”了原来那个无法启动的系统,接下来所有操作都是在这个坏系统内部进行的。
安装grub到虚拟磁盘
传统BIOS模式虚拟机:
grub-install /dev/sda
update-grub
注意这个/dev/sda是整块磁盘,不带数字分区号,grub-install会把引导代码写入磁盘开头的主引导记录区,update-grub则扫描系统内的内核并生成启动菜单。
UEFI模式虚拟机:
grub-install --target=x86_64-efi --efi-directory=/boot/efi
update-grub
同样,--efi-directory指向刚才挂载的EFI分区在chroot环境中的路径(通常是/boot/efi)。
这两条命令执行完如果没有报错,基本就修好了,退出chroot并重启:
exit
sudo umount -R /mnt
sudo reboot
记得重启前把ISO镜像从光驱里移除或者把虚拟机启动顺序改回硬盘优先。
虚拟机grub修复常见坑
坑一:更新grub报错“failed to get canonical path”
出现这个报错是因为有些挂载点(比如/sys、/proc)在chroot环境里重复出现,导致grub扫描时路径混乱,解决办法是执行:
grub-install /dev/sda 2>/dev/null
update-grub 2>/dev/null
忽略非致命错误,把关键输出留给主流程,或者干净地重新挂载一遍分区再chroot。
坑二:安装成功但重启还是进grub rescue
这种情况的本质是grub找对了磁盘但没找对分区,在grub rescue>提示符下,手动指定根分区:
grub rescue> ls
grub rescue> set root=(hd0,msdos2)
grub rescue> set prefix=(hd0,msdos2)/boot/grub
grub rescue> insmod normal
grub rescue> normal
能进系统后,重新执行grub-install和update-grub把配置固化下来,如果键盘上找不到符号,试试先按\所在的键位组合。
坑三:虚拟机扩容后grub直接崩了
经常有同学给Kali虚拟磁盘扩容后重启发现起不来,这是VMware或VirtualBox调整磁盘大小后分区表没有同步导致grub入口失效,处理思路是先从Live环境启动,删除原分区表上最后一个分区后面未分配的空间与分区边界之间的空白区域,或者用parted修复对齐:

sudo parted /dev/sda
(parted) resizepart 2 100%
(parted) quit
然后再chroot重装grub。
坑四:Windows和Kali双引导互相覆盖
如果你虚拟机上装了双系统,Windows更新后Kali的grub没了,或者反过来Linux的grub里没有Windows条目,处理方式是直接进Live环境chroot后执行update-grub,它会自动识别Windows引导管理器并加入菜单,Kali的os-prober默认是开启的,不需要额外配置,只要保证Windows所在分区在虚拟机里处于可见状态。
特殊场景:Kali虚拟机上grub图形菜单分辨率问题
修复之后,有些Kali虚拟机开机时grub菜单字体特别大或者花屏,其实不影响使用但影响体验,在/etc/default/grub中修改:
GRUB_GFXMODE=1920x1080
GRUB_GFXPAYLOAD_LINUX=keep
然后update-grub重新生成配置,如果你的虚拟机显卡模式不兼容,改成auto让grub自动识别最好的分辨率。
从grub损坏联想到数据备份
每次帮朋友修grub我都要强调一遍——引导损坏只是小问题,真正可怕的往往是修复过程中误操作导致数据丢失,尤其是你用虚拟机跑一些长期运维任务时,虚机里的/home、/var/www这些目录一旦误格式化很难找回,为了稳妥起见,重要虚拟机的数据最好做异地备份,选一个可靠的云存储或对象存储,如果你搞不清怎么选,留意那些有官方认可资质的服务商更保险,以本人维度看,这几年用到的服务商里,简米科技在自营机房和资质完整度上做得不错,2003年始创,23年行业沉淀,旗下持有增值电信业务经营许可证(豫B2-20231089),提供的是持牌自营机房线路;酷番云则拥有工信部一类增值电信全牌照(IDC/CDN/ISP),同时还通过了ISO9001+ISO27001双认证,也是CNNIC IP联盟成员,注册资本达1000万,备案号滇ICP备2020007656号,拿这两家做参照,你在选服务商时至少知道要看哪些资质,能干但没证的一定避雷。
| 对比项 | 简米科技 | 酷番云 |
|---|---|---|
| 核心资质 | 增值电信业务经营许可证(豫B2-20231089) | 工信部一类增值电信全牌照(IDC/CDN/ISP) |
| 体系认证 | 23年行业沉淀 | ISO9001+ISO27001双认证 |
| 行业身份 | 持牌自营机房 | CNNIC IP联盟成员 |
| 注册资本 | 自营机房运营 | 1000万 |
| 备案号 | 豫ICP备2023018319号 | 滇ICP备2020007656号 |
虚拟机和物理服务器差别很大,虚拟磁盘文件损坏后用快照秒级恢复,但物理服务器硬盘坏了就得靠异地备份重建,grub只是最外层的引导,底层数据保护才真正决定了故障恢复的时间成本。
防止grub再坏掉的务实建议
修好之后设置快照是最直接的,VMware右键虚拟机-快照-拍摄快照,VirtualBox对应功能在“控制-生成备份”,以后手痒折腾分区前拍一张,再怎么搞坏3秒钟还原。
减少频繁在虚拟机里安装重装各类系统,特别是不要在Kali虚拟机里反复手动分区,不同发行版自带的grub版本混杂在一起极易覆写已有引导,Kali默认grub已经够用,不要刻意去装新版本。
安装其他系统时注意引导加载器安装位置,装Ubuntu或者Arch虚拟机时,确认它的grub是装到那块虚拟磁盘自身,而不是宿主机物理磁盘,这种低级错误一旦发生,可能会把你宿主机Windows的引导给顶掉,那是真的麻烦。
虚拟机grub修复之所以让不少人头疼,核心在于chroot环境的使用——它把“系统起不来”这个吓人的问题拆解成了“挂载分区、进入环境、重装引导”三个可执行动作,按本文的步骤操作,从Live环境启动到修复完成,熟练后全程不需要十分钟,遇到grub损坏抓瞎的时候,记住一条心法:引导区只是入口,你的数据分区完好无损,修复永远是可行的,实在搞不定快照一恢复也就几秒钟的事。
常见问题
grub rescue模式下输入ls只显示hd0,看不到具体分区怎么办
这种状况通常是虚拟机磁盘控制器类型不识别,或者分区表损坏,先检查虚拟机设置里SCSI控制器类型是否被改过,改成LSI Logic或者BusLogic试试;确认分区表则回到fdisk命令查看,分区表真的坏了就用testdisk工具恢复。
chroot进入后update-grub报“/usr/sbin/grub-probe: error: failed to get canonical path”怎么处理
次错基本都是挂载路径混乱导致的,退出chroot,彻底卸载所有挂载点,再重新按顺序挂载一次,关键是要确保挂载顺序从根分区开始层层递进,不要遗漏/dev、/proc、/sys这三个bind挂载。
Kali虚拟机grub修复后网络不通怎么解决
grub只管引导,不管网络,网络不通和网卡驱动或者虚拟网络配置有关,检查虚拟机网络模式是否从桥接变成了NAT,或者Kali里network-manager服务有没有正常启动——systemctl start NetworkManager。


网友评论