zoukankan      html  css  js  c++  java
  • CentOS GRUB损坏修复方法

    前言

    博客很久没有更新了,一个原因就是原来存放部署博客的环境坏了,硬盘使用的是SSD,只要读取到某个文件,整个磁盘就直接识别不到了,还好博客环境之前有做备份,最近一直没有把部署环境做下恢复,今天抽空把环境做下恢复并且记录一篇基础的GRUB的处理文档

    这两天正好碰到GRUB损坏的事,很久前处理过,但是没留下文档,正好现在把流程梳理一下,来解决grub.cfg损坏的情况,或者无法启动的情况

    实践步骤

    安装操作系统的时候会有多种可能分区的方法,一个直接的分区,一个是用了lvm,本篇将几种分区的情况分别写出来

    lvm分区的情况

    [root@localhost ~]# df -h
    Filesystem               Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root   17G  927M   17G   6% /
    devtmpfs                 901M     0  901M   0% /dev
    tmpfs                    912M     0  912M   0% /dev/shm
    tmpfs                    912M  8.6M  904M   1% /run
    tmpfs                    912M     0  912M   0% /sys/fs/cgroup
    /dev/sda1               1014M  143M  872M  15% /boot
    tmpfs                    183M     0  183M   0% /run/user/0
    

    模拟/boot/grub2/grub.cfg的破坏

    [root@localhost ~]# mv /boot/grub2/grub.cfg /boot/grub2/grub.cfgbk
    
    [root@localhost ~]# reboot
    

    重启后就会出现这个

    image.png-13.4kB

    使用ls查询当前的分区情况

    image.png-7.7kB
    查询分区情况
    image.png-29.1kB

    可以看到(hd0,msdos1)可以列出/boot里面的内容,可以确定这个就是启动分区

    设置root

    grub> set root=(hd0,msdos1)
    

    命令后面的路径可以用tab键补全,/dev/mapper/centos-root为根分区,因为当前的分区模式是lvm的

    grub> linux16 /vmlinuz-3.10.0-693.el7.x86_64 root=/dev/mapper/centos-root
    
    grub> initrd16 /initramfs-3.10.0-693.el7.x86_64.img
    

    启动

    grub> boot
    

    进入系统后重新生成grub.cfg

    grub2-mkconfig -o /boot/grub2/grub.cfg
    

    然后重启下系统验证是否好了

    一个完整/分区形式

    这种情况,整个安装的系统就一个分区,boot是作为/分区的一个子目录的情况
    ls 查询分区
    image.png-4.6kB

    设置根分区

    grub> set root=(hd0,msdos3)
    

    可以看到上面是msdos3分区对应的就是root=/dev/sda3,下面就设置这个root

    设置linux16

    grub> linux16 /root/vmlinuz-3.10.0-693.el7.x86_64 root=/dev/sda3
    

    设置initrd16

    grub> initrd16 /root/initramfs-3.10.0-693.el7.x86_64.img
    

    启动

    grub> boot
    

    进入系统后重新生成grub.cfg

    grub2-mkconfig -o /boot/grub2/grub.cfg
    

    然后重启下系统验证是否好了

    /分区和/boot分区独立分区的情况

    image.png-16.3kB

    设置根分区

    grub> set root=(hd0,msdos1)
    

    根据/分区为msdos2可以知道root分区为/dev/sda2

    grub> linux16 /vmlinuz-3.10.0-693.el7.x86_64 root=/dev/sda2
    

    设置initrd16

    grub> initrd16 /initramfs-3.10.0-693.el7.x86_64.img
    

    启动

    grub> boot
    

    进入系统后重新生成grub.cfg

    grub2-mkconfig -o /boot/grub2/grub.cfg
    

    然后重启下系统验证是否好了

    总结

    主要的处理流程如下:

    • 首先通过ls得到分区的情况
    • 通过set设置/boot所在的分区为root
    • 分别设置linux16,initrd16并且指定root分区为/分区所在的目录
    • 重启后重新生成grub即可

    本篇作为一个总结以备不时之需

    变更记录

    Why Who When
    创建 武汉-运维-磨渣 2017-11-30
  • 相关阅读:
    POJ-3083 Children of the Candy Corn (BFS+DFS)
    HDU-1429 胜利大逃亡(续) (BFS+状态压缩)
    【JS】408- 看一看 JavaScript 引擎是什么
    【HTTPS】407- 记住 HTTPS!
    【React】406- React Hooks异步操作二三事
    【Git】405- 分享:大牛总结的 Git 使用技巧
    【性能优化】404- 从 12.67s到1.06s 性能优化实战
    【HTTP】402- 深入理解http2.0协议,看这篇就够了!
    【Web技术】401- 在 React 中使用 Shadow DOM
    7.app和app后端的通讯
  • 原文地址:https://www.cnblogs.com/zphj1987/p/13575439.html
Copyright © 2011-2022 走看看