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

重启后就会出现这个

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

查询分区情况

可以看到(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 查询分区

设置根分区

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分区独立分区情况

设置根分区

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即可

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

原文发布于微信公众号 - 磨磨谈(momotan1987)

原文发表时间:2017-11-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

小知识之Linux系统中的最大进程数,最大文件描述,最大线程数

4264
来自专栏北京马哥教育

如何部署Samba服务

一、samba存在的意义 有时为了方便windows与linux虚拟机之间的文件共享,我们一般用SAMBA服务来解决,有人会问,VMTool不是可以直接设置sh...

5345
来自专栏搞前端的李蚊子

微信小程序 登录流程规范解读

一. 官方登录时序图 ? 二. 简单理解 这里仅按照官方推荐的规范来 0. 前置条件 一共有三端:  - 微信小程序客户端  - 第三方服务器端(自己搭建)  ...

5459
来自专栏小李刀刀的专栏

在WebKit中并行加载外部脚本译:

作者:Tony Gentilcore 原文:http://webkit.org/blog/1395/running-scripts-in-webkit/ Web...

3517
来自专栏Vamei实验室

Linux常用命令

我总结了常用的Linux命令,方便你的Linux使用。下面是格式说明,你现在可以跳过,直到遇到疑问时再来查询。 $ 命令行提示符 粗体表示命令 斜体表示参数 ...

3397
来自专栏奔跑的蛙牛技术博客

Java虚拟机加载类文件大全-精细版

类加载器存在父子关系 例如系统类加载器要加载java.util.ArrayList,首先要求扩展类进行加载,然后扩展类加载器要求引导类加载器进行加载。

861
来自专栏difcareer的技术笔记

Android调试小技巧

当我们想要用attach方式调试某个应用时,如何做到在程序启动时就下断点? 这是一个悖论:你要先启动程序,才能获取pid进行attach,但程序启动到你att...

952
来自专栏Java面试笔试题

JDBC中如何进行事务处理?

Connection提供了事务处理的方法,通过调用setAutoCommit(false)可以设置手动提交事务;当事务完成后用commit()显式提交事务;如果...

1722
来自专栏互联网杂技

nodejs+ftp+linux+nginx 自动部署前端

原理就是利用 1.nodes中ftp模板,上传本地的前端文件到服务器指定目录; 2.在服务器上安装nginx已经搭建了ftp服务 下面就是详细步骤: 1.lin...

54413
来自专栏Linyb极客之路

nginx常见架构

总结 开启压缩主要是为了减少网络传输消耗,浏览器会对压缩的文件进行解压缩,这个过程要快很多。

1554

扫码关注云+社区

领取腾讯云代金券