概述
这两天觉得 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 修复吧.不过这里可以指定内核引导,我这里就不做介绍了.
引导界面:
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