grub异常
时间:2022-07-24
本文章向大家介绍grub异常,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
开机出现 grub rescue 指令模式
假如看到grub rescue,表示mbr (master boot record)的资料,完全对应不上磁盘的状况,所以无法辨别系统的所有分区,更不用说连grub menu都无法读入。所以,处理的方法就是帮他找到grub的设置。
ls
# (hd0), (hd0,msdos3), (hd0,msdos2), (hd0,msdos1)
# ls可以列出所有的硬碟与分区,(hd0)是第一个硬碟,(hd0,msdos1)是第一颗硬碟的第一个分区。以此类推。输入指令时,可以简写成(hd0,1)表示。若是GPT分割,出现的会是(hd0,gpt0)的格式。
# 只出现(hd0),那表示你的分区表已经损坏;
ls (hd0,1)/
# 确定各个分区那个是 / ,哪个是/boot,就可以开始继续处理。现在假设 / 是(hd0,2),/boot 是(hd0,2)/boot。
- /boot/grub下的i386-pc或者x86_64-efi目录,是放置grub模组所在
- 前者出现在以mbr开机的系统,
- 后者出现在efi开机的系统 。
#正式设置
grub rescue> set root=(hd0,2)
grub rescue> set prefix=(hd0,2)/boot/grub
grub rescue> insmod normal
grub rescue> normal
第一行指令:设置根目录所在的分区
第二行指令:设置grub目录。这样他才知道哪里去找模组。此行设置错误,第三行指令执行时,就无法载入模组。假如你的 /boot 没有额外分割,那这行就要写成 set prefix=(hd0,2)/boot/grub
第三行指令:载入normal模组
第四行指令:执行normal模组
normal模组作用是什麼?
会把一些指令,文件系统模组,及其他需要的模组自动呼叫进来。假如你的grub.cfg没有问题,应该就可以看见grub菜单了。
开机出现grub指令模式
- 这类问题通常发生在,mbr可以找到对应的磁盘与各分区,却无法找到可用有效的grub.cfg。
- 这时候,相关的模组已经载入,所以比grub rescue好处理
- 同样用 ls 找出相关的分区,并检查哪个分区是根目录,哪个分区是 /boot ,方法与之前的grub rescue相同。
grub> set root=(hd0,2)
grub> linux /boot/vmlinuz-3.11.0-18-generic root=/dev/sda3
grub> initrd /boot/initrd.img-3.11.0-18-generic
grub> boot
# 第一行:设置根目录所在的分区
# 第二行:设置核心所在,并设置根目录所在分区
# 第三行:设置虚拟系统启动核心所在。
# 注:如果是grub0.9.8.e即grub-legacy在开机区,那么需要把linux改成kernel
# 第四行:开机,直接进入系统没有菜单
可见到grub menu,但无法开机
系统可以找到grub.cfg,但是上头的资料有问题,无法找到核心。常发生在变更分割表后,因grub无法辨识uuid或者label造成
处理grub的异常状况
- 检查并修改 /etc/fstab : /etc/fstab 是系统挂载分区的必要文件。请确认里面的uuid是否与实际状况相符?实际的uuid可以藉由sudo blkid取得。若有不符的状况,请修改。现在ubuntu已经默认使用uuid来辨识分区,这种辨识方式,可以避免系统的混淆。当然他仍支持以往用设备名称辨识的方法。
- 更新 /boot/grub/grub.cfg : sudo update-grub sudo update-grub2
- 重新安装grub到磁盘开头的开机区 sudo grub-install /dev/sda
- 若有问题,可能需要强制安装 sudo grub-install /dev/sda --force # 若不是/dev/sda,请自行修改。 # 以下三个参数要注意,必要时要特别加入 --boot-directory=[path] --efi-directory=[path] --uefi-secure-boot # man grub-install 查看帮助
本文由博客群发一文多发等运营工具平台 OpenWrite 发布
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 用SQL语句查看Oracle数据表的结构信息
- Oracle建表语法
- 剑指Offer第1题详解(附Java、Python实现代码)
- (美团)动态规划,打家劫舍!
- POIEasyExcel
- 剑指Offer第2题详解(附Python、Java代码实现)
- 剑指Offer第3题详解(附Java、Python源码)
- 从String中移除空白字符的多种方式!?差别竟然这么大!
- Stack.peek() 与 Stack.pop() 的区别
- 傅里叶变换有什么用?
- 剑指Offer第4题详解(附Java、Python源码)
- 帅地问我:Dubbo服务调用过程
- 用两个栈实现队列详解(附Java、Python源码)——《剑指Offer》
- PS2020制作电子签名
- 原创 | 险些翻车,差一点没做出来的基础算法题