前言
由于之前电脑系统都是自己分区自己装的,所以并没有单独给windows系统预留出winRE分区,毕竟这个实在不太常用,系统出了问题还不如进PE来的实在.结果这次微软推送windows 10一周年更新,果然毫不犹豫的从最后一个ntfs分区内强行分了一个winRE分区出来,这对windows倒是没什么影响,但这多出来的一个分区改变了我原本硬盘的分区方式,原来的分区号都向后推了一位,第8个分区变成了第9个分区,导致我的另一个系统引导出现错误,引导软件找不到linux的根目录.
/dev/sda4 346904576 348596223 1691648 826M Windows 恢复环境 /dev/sda7 1607491584 1674600447 67108864 32G Linux root (x86-64) /dev/sda8 1674600448 1682989055 8388608 4G Linux swap /dev/sda9 1682989056 1953525134 270536079 129G Linux home
对于这种情况,不同的引导软件有不同的修复方式
systemd-boot(针对arch)
开机调u盘启动,进入livecd,挂载分区,并chroot到硬盘系统
mount /dev/sda7 /mnt mount /dev/sda1 /mnt/boot arch-chroot /mnt /bin/bash
修改/boot/loader/entries/arch.conf为
title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options root=/dev/sda7 rw #原来是sda6,现在改为sda7
其中/dev/sda7也可以改为第7快硬盘的UUID,reboot重启即可进入
syslinux
依然是u启进livecd,挂分区,chroot,然后修改/boot/syslinux/syslinux.cfg
LABEL arch MENU LABEL Arch Linux LINUX ../vmlinuz-linux APPEND root=/dev/sdb7 rw INITRD ../initramfs-linux.imgLABEL archfallback MENU LABEL Arch Linux Fallback LINUX ../vmlinuz-linux APPEND root=/dev/sdb7 rw INITRD ../initramfs-linux-fallback.img
修改完重启
grub
接下来就是本篇博文的关键内容了,因为现在大部分Linux发行版本默认以grub作为引导软件,所以着重记录一下grub下引导问题的修复问题
当开机系统找不到grub路径或grub的配置文件出现问题时,会自动进入grub救援模式,也就是屏幕会出现下列信息
error: file '/boot/grub/i386-pc/normal.mod' not found. Entering rescue mode... grub rescue>
此时的救援模式并非平时使用的shell终端,在这里可以执行的命令很有限,仅有
set,ls,insmod,root,prefix等
首先使用ls命令,该命令会列出所有的磁盘信息
grub rescue>ls (hd0),(hd0,msdos4),(hd0,msdos2),(hd0,msdos9),(hd0,msdos7),(hd0,msdos5),(hd0,msdos3),(hd0,msdos1),(hd0,msdos8),(hd0,msdos6)
依次替换msdos1位置的数字以查看每个磁盘下的文件,当显示文件则说明linux安装在这个分区
grub rescue>ls(hd0,msdos1)/boot/grub
假设linux系统被装在了(hd0,msdos7)上,使用下列命令找回丢失的grub菜单
grub rescue>set root=(hd0,msdos7) grub rescue>set prefix=(hd0,msdos7)/boot/grub grub rescue>insmod /boot/grub/normal.mod
使用以下命令显示grub菜单
grub rescue>normal
这时应该就进入grub菜单项了,选中linux系统,摁e键临时编辑grub配置文件,我以kali为例
将上图中(hd0,msdos1)替换为自己的linux所在分区(hd0,msdos7),然后ctrl+x就可以进入系统了,但这只是临时的,当电脑重启,问题依然存在,所以要重新安装grub并修改配置文件
sudo update-grub grub-install --target=i386-pc /dev/sda grub-mkconfig -o /boot/grub/grub.cfg
这样问题就解决了,当然,具体到不同的环境修复方法或多或少会有些不同,但基本命令熟悉了之后再遇到这种问题随机应变就可以了
作者: JenI 转载请注明出处,谢谢
Comments !