前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CentOS GRUB损坏修复方法

CentOS GRUB损坏修复方法

作者头像
用户2772802
发布2018-08-06 10:00:54
3.1K0
发布2018-08-06 10:00:54
举报
文章被收录于专栏:磨磨谈
前言

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

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

实践步骤

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

lvm分区的情况

代码语言:javascript
复制
[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的破坏

代码语言:javascript
复制
[root@localhost ~]# mv /boot/grub2/grub.cfg /boot/grub2/grub.cfgbk
代码语言:javascript
复制
[root@localhost ~]# reboot

重启后就会出现这个

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

查询分区情况

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

设置root

代码语言:javascript
复制
grub> set root=(hd0,msdos1)

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

代码语言:javascript
复制
grub> linux16 /vmlinuz-3.10.0-693.el7.x86_64 root=/dev/mapper/centos-root
代码语言:javascript
复制
grub> initrd16 /initramfs-3.10.0-693.el7.x86_64.img

启动

代码语言:javascript
复制
grub> boot

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

代码语言:javascript
复制
grub2-mkconfig -o /boot/grub2/grub.cfg

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

一个完整/分区形式

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

设置根分区

代码语言:javascript
复制
grub> set root=(hd0,msdos3)

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

设置linux16

代码语言:javascript
复制
grub> linux16 /root/vmlinuz-3.10.0-693.el7.x86_64 root=/dev/sda3

设置initrd16

代码语言:javascript
复制
grub> initrd16 /root/initramfs-3.10.0-693.el7.x86_64.img

启动

代码语言:javascript
复制
grub> boot

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

代码语言:javascript
复制
grub2-mkconfig -o /boot/grub2/grub.cfg

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

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

设置根分区

代码语言:javascript
复制
grub> set root=(hd0,msdos1)

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

代码语言:javascript
复制
grub> linux16 /vmlinuz-3.10.0-693.el7.x86_64 root=/dev/sda2

设置initrd16

代码语言:javascript
复制
grub> initrd16 /initramfs-3.10.0-693.el7.x86_64.img

启动

代码语言:javascript
复制
grub> boot

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

代码语言:javascript
复制
grub2-mkconfig -o /boot/grub2/grub.cfg

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

总结

主要的处理流程如下:

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磨磨谈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实践步骤
    • lvm分区的情况
      • 一个完整/分区形式
        • /分区和/boot分区独立分区情况
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档