红联Linux门户
Linux帮助

Fedora23引导修复

发布时间:2015-11-19 15:13:14来源:aqcoder.com作者:aqcoder

概述

这两天觉得 D 盘不够用了,就用分区助手扩张了下 D 容量,不知道什么原因,Fedora 引导失败了(我是双硬盘双系统,还好 win7 能用)。在 3 天间断的各种折腾下终于搞清楚了 grub2 的基本知识。下面做个记录,希望对和我有相同情况的同学有所帮助。


系统 & 硬盘

这里还是先介绍下我的系统分布,因为后面一些命令和硬盘及系统所在分区有关,命令根据自己的情况调整。
我的机器是双硬盘双系统,win7 在 ssd 上共一个分区, fedora 在机械硬盘上第二个分区,第一个分区为 /boot 引导分区。其他 D、E、F。

[aquarius@localhost-localdomain ~]$ ll /dev/ | grep sd
brw-rw----. 1 root     disk      8,   0 Nov 17 23:02 sda     // ssd
brw-rw----. 1 root     disk      8,   1 Nov 17 23:02 sda1
brw-rw----. 1 root     disk      8,  16 Nov 17 23:02 sdb    
brw-rw----. 1 root     disk      8,  17 Nov 17 23:02 sdb1    // boot 分区
brw-rw----. 1 root     disk      8,  18 Nov 17 23:02 sdb2    // linux 分区
brw-rw----. 1 root     disk      8,  19 Nov 17 23:02 sdb3
brw-rw----. 1 root     disk      8,  21 Nov 17 23:02 sdb5    // D
brw-rw----. 1 root     disk      8,  22 Nov 17 23:02 sdb6    // E
brw-rw----. 1 root     disk      8,  23 Nov 17 23:02 sdb7    // F


手动引导

首先介绍一种手动引导方法,此方法可以引导进入 Linux,但是进入后不做任何操作的话在重启还是会引导错误。

error: unkown file system.
Entering rescue mode...
grub rescue>

以上就是我的引导错误界面(我就不截图了,因为已经修复好了。),错误信息为未知的文件系统。我们可以输入命令 set 来看下:

error: unkown file system.
Entering rescue mode...
grub rescue>set
root=(hd0,msdos2)
prefix=(hd0,msdos2)/grub2

发现 (hd0,msdos2) 这个分区是我的 linux 分区(LVM文件系统),而非我的 boot 分区(ext4 文件系统),所以它才会识别不出文件系统。


知道原因就好办了:

error: unkown file system.
Entering rescue mode...
grub rescue>set
root=(hd0,msdos2)
prefix=(hd0,msdos2)/grub2
grub rescue>
grub rescue>set root=(hd0,msdos1)   // 输入这两行命令
grub rescue>set prefix=(hd0,msdos1)/grub2

输入以上两行命令指定 root 和 prefix。可能有写童鞋不知道自己的 boot 目录在哪。可以用 ls 命令一个一个的尝试。

grub rescue>ls  // 直接 ls 列出所有磁盘及分区
(hd0) (hd0,msdos1) (hd0,msdos2) (hd0,msdos5) (hd0,msdos6) (hd0,msdos7) (hd1) (hd1,msdos1)
grub rescue>ls (hd0, msdos5) // 这个是 windows 的 NTFS 分区,会报错
unkown file system.
grub rescue>ls (hd0,msdos1) // 这个就对了
ext4 file system.
grub rescue>ls (hd0,msdos1)/ // 注意后面多了正斜杠,就是查看目录下的内容
config-4.1.6-100.fc21.x86_64
config-4.1.7-200.fc22.x86_64
config-4.2.5-300.fc23.x86_64
efi
elf-memtest86+-5.01
extlinux
grub2
initramfs-0-rescue-f2bce17deae6475d9e341aba0fd1d20f.img
initramfs-4.1.6-100.fc21.x86_64.img
initramfs-4.1.7-200.fc22.x86_64.img
initramfs-4.2.5-300.fc23.x86_64.img
initramfs-fedup.img
initrd-plymouth.img
lost+found
memtest86+-5.01
System.map-4.1.6-100.fc21.x86_64
System.map-4.1.7-200.fc22.x86_64
System.map-4.2.5-300.fc23.x86_64
vmlinuz-0-rescue-f2bce17deae6475d9e341aba0fd1d20f
vmlinuz-4.1.6-100.fc21.x86_64
vmlinuz-4.1.7-200.fc22.x86_64
vmlinuz-4.2.5-300.fc23.x86_64
vmlinuz-fedup

经过几次尝试,你就可以找到你的 boot 分区了.然后在载入 normal 模块,启动 normal 模块,就进入引导了.

grub rescue>insmod normal
grub rescue>normal

这里有的童鞋可能会报 /boot/grub2/i386-pc/normal.mod not found 错误.那是因为你的系统中没有这个模块.那就改用 LiveCD 修复吧.不过这里可以指定内核引导,我这里就不做介绍了.


引导界面:

Fedora23引导修复


Linve CD

如果你不能通过上述方法进入系统,还有个必杀技 – Live CD。当然,你需要一个引导 USB。

至于启动 U 盘整么制作,这里就不介绍了,推荐个工具 LinuxLive USB Creator:http://www.linuxliveusb.com/。

进入 Live CD 后,选中 live 模式,不是安装的硬盘哦~ 除非你想重装系统。

打开终端,执行下列命令(不要把前面的提示符和注释粘进去哦,这个不是小白应该都知道吧):

[live cd ~]$ mount /dev/sdb2 /mnt/           // 挂载 linux 分区
[live cd ~]$ mount /dev/sdb1 /mnt/boot       // 挂载 boot 分区
[live cd ~]$ chroot /mnt/boot                // 注意一定要有这步


修复引导项

注意:此处接的是手动 grub2 recuse 引导或者 live CD 引导,进入系统后的终端操作。

这部分其都是 grub2 的基本概念和用法,想了解全的童鞋可以查 grub2 手册 http://fedoraproject.org/wiki/GRUB_2

执行下列命令:

[live cd ~]$ grub2-install /dev/sdb
[live cd ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg

第一条命令是写入 MBR,所以这步操作一定要谨慎,你必须知道你在干什么,硬盘要选对,我是用机械硬盘引导的,所以我选了 /dev/sdb

只有一颗硬盘且双系统的童鞋要注意了:你确定你是想用 grub2 做为引导。如果你用 winload 作为引导那上面所诉都是错,请马上关闭网页,我在胡说八道。

第二套命令是自动生成引导配置,如果你查阅过一些老的资料修改 /boot/grub/menu.lst 这是 grub 的配置, grub2 已经放弃了这种配置,grub2 的配置都有脚本生成。这条命令会读取 /etc/default/grub /etc/grub.d/* 等配置文件及系统环境,自动生成配置,详见手册。

注意:如果你的系统用的是 EFI 配置目录可能在 /boot/efi/EFI/fedora/grub.cfg


重启

重启。如果顺利的话,应该就大功告成了。

本文的一些操作是一些基本的引导操作,请确保你知道你在干什么,重要的话要多说几遍,所以本文所述都是错的,错的,错的。


安装了Ubuntu进不了win8.1(引导修复):http://www.linuxdiyf.com/linux/15196.html

Ubuntu 14.04引导修复:http://www.linuxdiyf.com/linux/11942.html

引导修复工具boot-repair最新安装方法:http://www.linuxdiyf.com/linux/11245.html