zoukankan      html  css  js  c++  java
  • 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 查看帮助
      

    MBR与GPT

    BIOS+mbr

    • 前446字节村存放grub程序
      • 为什么要grub引导:因为bios不识别文件系统格式
      • grub是操作系统安装后写入的,因此会识别文件系统
    • 后64,存放分区表每个分区的起始,结束柱面号

    img

    UEFI+gpt

    img

    • 在GPT分区表中引导记录被.efi文件所接管,统一放在一个叫ESP的分区中,
      • 这个分区的文件系统必须是FAT文件系统这样才能被UEFI所识别,
      • 这个分区可以放置引导不同分区以及不同的硬盘多个系统的.efi,不过要在UEFI启动项中设定
      • 也可以使用grub2进行设定引导。
    • UEFI这些启动项将会去引导ESP分区中的.efi文件,
      • Linux中的grubx64.efi, shimx64.efi,
      • window10中是ESP分区EFIBOOTootx64.efi,或是bootmgfw.efi,具体引导哪个.efi文件要看UEFI启动项中的设定。

    本文由博客群发一文多发等运营工具平台 OpenWrite 发布

  • 相关阅读:
    Minimum Path Sum,最短路径问题,动态规划
    UniquePaths,UniquePaths2,路径问题。动态规划。
    LengthOfLastWord,字符串最后一个子串的长度
    间隔问题,合并间隔(merge interval),插入间隔(insert interval)
    矩阵螺旋遍历Spiral Matrix,Spiral Matrix2
    Centos 5.2 下配置 php 的 json 扩展
    一个睡五分钟等于六个钟头的方法
    js div 排除内部的点击事件 就是 冒泡的处理
    做微信开发 “人脉圈的” 总结
    YII 学习笔记
  • 原文地址:https://www.cnblogs.com/Dean0731/p/13757299.html
Copyright © 2011-2022 走看看