作为码农

  首先,建议了解下grub2的启动顺序和逻辑。可以参考这篇文章,grub.cfg详解

  从执行顺序倒推,如下如果全部执行成功,则会进入grub的启动菜单;如果最后一步,没有找到grub.cfg或者执行grub.cfg出错,则进入grub普通模式;如果倒数第二步,家在normal.mod模块失败,则进入grub secure模式。

GRUB2在BIOS平台上的常规启动步骤是这样的:BIOS --> boot.img[MBR] --> core.img[MBR gap/embedding area/BIOS Boot Partition] --> 设置"prefix root cmdpath"环境变量 --> 加载"normal.mod"模块[同时还包括它所依赖的 terminal crypto extcmd boot gettext 模块] --> 执行"normal $prefix/grub.cfg"命令

GRUB2在UEFI平台上的常规启动步骤是这样的:UEFI --> core.img[BOOTX64.EFI/BOOTX86.EFI] --> 设置"prefix root cmdpath"环境变量 --> 加载"normal.mod"模块[同时还包括它所依赖的 terminal crypto extcmd boot gettext 模块] --> 执行"normal $prefix/grub.cfg"命令

  

  这里我们分别介绍两种模式下的解决方式:

  • Grub普通模式

    • 手动引导进入系统

      • ls 可以看到形如 (hd0, gpt2)之类的硬盘分区, ls (hd0,gpt2)/root/之类的可以看到文件系统结构;
      • 找到要启动的系统路径,主要是grub目录、vmlinux、initrd,如下图
        •   

          # ll /boot/
          总用量
          drwxr-xr-x root root 7月 : ./
          drwxr-xr-x root root 7月 : ../
          -rw-r--r-- root root 4月 : abi-4.15.--generic
          -rw-r--r-- root root 5月 : abi-4.15.--generic
          -rw-r--r-- root root 4月 : config-4.15.--generic
          -rw-r--r-- root root 5月 : config-4.15.--generic
          drwxr-xr-x root root 1月 efi/
          drwxr-xr-x root root 8月 : grub/
          -rw-r--r-- root root 7月 : initrd.img-4.15.--generic
          -rw-r--r-- root root 7月 : initrd.img-4.15.--generic
          -rw-r--r-- root root 1月 memtest86+.bin
          -rw-r--r-- root root 1月 memtest86+.elf
          -rw-r--r-- root root 1月 memtest86+_multiboot.bin
          -rw-r--r-- root root 4月 : retpoline-4.15.--generic
          -rw-r--r-- root root 5月 : retpoline-4.15.--generic
          -rw------- root root 4月 : System.map-4.15.--generic
          -rw------- root root 5月 : System.map-4.15.--generic
          -rw-r--r-- root root 4月 : vmlinuz-4.15.--generic
          -rw------- root root 5月 : vmlinuz-4.15.--generic
      • 设置grub boot环境,其中root的地址为要启动的linux系统(如Ubuntu)所在的硬盘分区节点名。hd0对应sda,hd1对应sdb,以此类推。。。(hd0,gpt1)对应sda1,(hd1, gpt2)对应sdb2以此类推。。。
        • grub> set boot=(hd0,gpt2)
          grub> linux /boot/vmlinuz-4.15.--generic root=/dev/sda2
          grub> initrd /boot/initrd.img-4.15.--generic
          grub> boot
    • 修复引导
      • 一般为了避免进入系统后,下次再进入还要输入以上命令,可以用如下方法

        • # sudo update-grub
          # sudo grub-install /dev/sda
      • 然而我发现,这个方式在我的case里不生效,尝试找下根本原因    
  • Grub Secure模式
    • 手动引导进入系统, LInk
    • 修复引导

最新文章

  1. Spring Boot 乐观锁加锁失败 - 使用AOP恢复错误
  2. linux-------------计划任务crond:如何创建linux里面的计划任务
  3. hdu5737(2016多校联赛第2场D)
  4. 【dubbo】dubbo项目基本结构及provider构建
  5. PHP+Nginx环境搭配
  6. git-配置公司账号
  7. GetWindowText和GetDlgItemText的区别
  8. C++11常量表达式
  9. ASP.NET MVC 3 配置EF自动生成模型
  10. springboot(二):web综合开发
  11. [IB]PeopleSoft异步详细信息中状态“已完成”但订阅合同状态“新建”问题
  12. selenium如何屏蔽谷歌浏览器弹出的通知
  13. jmeter入门案例(二)
  14. Charles篡改后台数据
  15. [Swift]错误提示:Method does not override any method from its superclass
  16. MT【239】离心率最大
  17. javascript计算字符串长度
  18. Linux抓包
  19. HTML深入探究(一)HTML入门
  20. LeetCode刷题第一天

热门文章

  1. Salesforce LWC学习(十一) port 1717报错的处理
  2. 执行sql中的 函数,function
  3. React Hooks 一步到位
  4. HttpClient工具类的使用
  5. Django 数据库连接缓存的坑
  6. JS前端时间格式化
  7. 前端之css的基本使用(一),行内、内部、外部样式,语法格式、注释、选择符、属性等
  8. [bzoj1375] [Baltic2002] Bicriterial routing 双调路径
  9. 06hive企业调优
  10. 制作一个类“全能扫描王”的简易扫描软件(opencv)