centos启动grub引导修复以及改错过程

2022/1/4 7:07:47

本文主要是介绍centos启动grub引导修复以及改错过程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

主要改错:1、通过mbr扇区修复引导    2、修复grub引导   3、centos7引导修复和更改启动顺序  4、通过复制U盘文件,进行引导修复

 


 通过mbr扇区修复引导:

转自:https://blog.csdn.net/weixin_39940425/article/details/111539260?share_token=7a099836-255d-45d5-9f2f-c36398033f53   centos 引导修复mbr扇区修复,具体没有实验

一、修复MBR:

MBR(Master Boot Record主引导记录):

硬盘的0柱面、0磁头、1扇区称为主引导扇区。其中446Byte是bootloader,64Byte为Partition table,剩下的2Byte为magic number。

备份MBR:

#dd if=/dev/sda of=/root/mbr.bak count=1 bs=512

破坏bootloader:

#dd if=/dev/zero of=/dev/sda count=1 bs=200

这里边block size只要小于等于446即可。

修复方式:

1、借助其他系统挂载磁盘修复。

修复方式同光盘修复类似,也是使用grub2-install命令。

2、借助安装光盘修复。

1.装入光盘,在光盘引导界面选择troubleshooting:

2.选择进入救援模式:

3.按回车键继续:

4.进入磁盘挂载选择模式:

磁盘将会被挂载至/mnt/sysimage/下

continue 以rw方式挂载分区。

read only 以ro方式挂载分区。

skip 跳过,将来自己手工挂载磁盘。

5.选择continue,稍等片刻,提示已经挂载完成。

6.此时进入救援模式的命令行:

7.使用grub2-install命令重建bootloader:

#grub2-install root-directory=/mnt/sysimage /dev/sda

显示无错误,使用sync写入硬盘,reboot重启系统。

8.重启后无错误,grub正常运行:

至此,MBR修复完成。

二、修复grub

grub配置文件丢失:

开机后会直接进入grub界面,显示为grub>:

修复步骤如下:

grub>insmod xfs

grub>set root=(hd0,1)

grub>linux16 /vmlinuz-xxxxx root=/dev/mapper/centos-root

grub>initrd16 /initramfs-.xxxxx.img

修复完成后即可进入系统,重建配置文件。

注意:CentOS7因为使用的是grub2,配置文件同grub有不少变化,一定要切记备份grub.cfg以便恢复。

列外:

1.

win pe修复win7引导后centos7引导消失的恢复方法:

步骤(一):用centos iso 制作启动u盘进入到安装centos的界面,开机选择的时候不要选择安装centos,而是选择trouble shooting疑难解答选项,然后选择rescue a centos system。按tab键选择continue (一定要选),然后选择ok.

步骤(二): 进入命令行界面,输入:chroot /mnt/sysimage ,接着就是重要的一步,安装grub2了。执行以下命令: /sbin/grub2-install /dev/sda, 安装成功后执行reboot重新启动系统。但是以上步骤只是又把centos的启动项找回来了,windows7的引导又不见了,win7的引导需要在后续步骤通过grub2来完成。

2.

恢复centos引导后继续恢复windows7引导的方法:

经过前面所述步骤之后centos系统又能打开了,所以可以直接通过centos的grub2功能实现windows的引导。此时可以输入此命令直接搞定:grub2-mkconfig -o /boot/grub2/grub.cfg,然而,输入该命令后并没有发现与window相关的任何信息,纠结了半天发现是centos不能识别本人win7系统的磁盘格式。也就是说使用上述命令的前提是centos能够识别windows7系统的磁盘格式。

由于本人的windows7系统安装在ntfs格式的分区中,所以我先安装ntfs-3g,使centos能识别出windows所在的分区。

步骤(一):安装ntfs-3g的步骤如下:

添加ntfs-3g下载源, 输入:

yum update

开始安装ntfs-3g,输入:

yum install ntfs-3g

至此,ntfs-3g安装完毕,只要成功安装了ntfs-3g, 那么恢复win7启动项的光辉时刻就已经到了,并且,步骤及其简单,您只需再次输入之前提到的命令:

grub2-mkconfig -o /boot/grub2/grub.cfg, 系统就能自动找到win7系统或xp系统的引导项,并加入到了grub.cfg菜单中。这样就避免了手工改动文件的危险,并且所有系统都能正常启动。不过,我多此一举的使用以下命令挂载了 windows NTFS 的分区(我的 Windows 分区分别是 /dev/sda1、 /dev/sda2、 /dev/sda4),注意:挂载是不必要的,因为在这个步骤中我们的真正目的是恢复win7的启动项,作为一个linux小白,我只是借此场景熟悉一下mount命令的用法而已。我用以下命令分别挂载了通过 grub2-mkconfig -o /boot/grub2/grub.cfg命令搜索到的所有windows分区:

cd /mnt

mkdir forwin

mount -t ntfs-3g /dev/sda1 /mnt/forwin

mkdir forwin2

mount -t ntfs-3g /dev/sda2 /mnt/forwin2

mkdir forwin3

mount -t ntfs-3g /dev/sda4 /mnt/forwin3

 

 

修复grub引导

转自:https://blog.csdn.net/tpmamba/article/details/105083021         双系统grub引导时,出现error: file '/boot/vmlinuz-xxx-xxx-xxx' not found的解决方法

在grub引导的页面可以按c键进入grub命令模式

首先需要确定你的ubutun安装到哪个硬盘哪个区;
1.1 可以先使用ls命令,查看所有硬盘分区,如(hd0), (hd1,gpt1)等等。
1.2 然后再使用ls (hd1, gpt8)查看。如果出现unknown filesystem则尝试其他的;如出现的是你ubutun主文件夹和文件的名字,基本就是它了。

确定之后,按照4步下面进行设置;
set root=(hd1,gpt8)
set prefix=(hd1,gpt8)/boot/grub
linux /boot/vmlinuz-xxx-xxx root=/dev/nvme0n1p8

上面这一步,要说两点:
(1)xxx-xxx是可以tab补全的。如果双tab后没有,有可能你第一步分区都没找对。
(2)/dev/nvme0n1p8这个分区,由于是在固态盘里,所以映射成nvme0n1p8了。猜测这里的8和第一步的gpt8中的8应该是一致的。但不能写成/dev/sda8。

initrd /boot/initrd.img
boot
boot之后应该就可以重新进入ubutun了。重新进入后,要做的就是更新grub配置。很简单,只需要下面一句:

sudo update-grub
该事件原因分析:由于/boot/下的vmlinuz文件丢失(原因暂不详),但grup.cfg还是原先版本的vmlinuz,所以启动找不到,kernel起不来。顺提一句,去掉grub多余引导项要修改的文件就是/boot/grub/grub.cfg. 去掉的内容可以。

 

 

centos7引导修复和更改启动顺序

转自https://www.bbsmax.com/A/x9J240wWd6/             关于centos7的引导启动顺序以及修复过程

引导顺序

  UEFi或BIOS初始化,运行POST开机自检

  选择启动设备

  引导装载程序, centos7是grub2

  加载装载程序的配置文件:/etc/grub.d/  /etc/default/grub  /boot/grub2/grub.cfg

  加载initramfs驱动模块

  加载内核选项

  内核初始化,centos7使用systemd代替init

  执行initrd.target所有单元,包括挂载/etc/fstab

  从initramfs根文件系统切换到磁盘根目录

  systemd执行默认target配置,配置文件/etc/systemd/system/default.target

  systemd执行sysinit.target初始化系统及basic.target准备操作系统

  systemd启动multi-user.target下的本机与服务器服务

  systemd执行multi-user.target下的/etc/rc.d/rc.local

  Systemd执行multi-user.target下的getty.target及登录服务

  systemd执行graphical需要的服务

设置内核参数

  设置内核参数,只影响当次启动

  启动时,在linux16行后添加

    systemd.unit=desired.target

    systemd.unit=emergency.target

    systemd.unit=rescue.target

  rescue.target 比emergency 支持更多的功能,例如日志等

  systemctl default 进入默认target

破解CentOS7的root口令

  方法一:

    启动时任意键暂停启动

    按e键进入编辑模式

    将光标移动linux16开始的行,添加内核参数rd.break

    按ctrl-x启动

    mount –o remount,rw /sysroot            重新挂载根目录为读写

    chroot /sysroot                  切根

    passwd root                    修改root密码

    touch /.autorelabel                  创建文件,为避免selinux报错

    exit

    reboot

  方法二:

    启动时任意键暂停启动

    按e键进入编辑模式

    将光标移动linux16开始的行,改为rw init=/sysroot/bin/sh          挂载为读写模式

    按ctrl-x启动

    chroot /sysroot                       切根

    passwd root                         修改root密码

    touch /.autorelabel                                                                    创建文件,避免selinux报错

    exit

    reboot

故障排除

  /boot路径下所有文件丢失

    进入救援模式

    chroot /mnt/sysimage

    mkdir /mnt/cdrom

    mount /dev/sr0  /mnt/cdrom

    rpm -ivh /mnt/cdrom/Packages/kernel-3.10.0-693.e17.x86_64.rpm --force              --force选项是必须的

    grub2-install /dev/sda                            为boot所在磁盘修复grub文件

    cd /boot/grub2/

    grub2-mkconfig   -o grub.cfg             如果不在/boot/grub2路径下需要指明路径grub2-mkconfig -o /boot/grub2/grub.cfg

    

启动默认内核选择

  /etc/default/grub文件中GRUB_DEFAULT=    (0为第一项,1为第二,以此类推),修改此项即可

 

通过复制U盘文件,进行引导修复:

转自:https://blog.csdn.net/zds00virtue/article/details/120181959?share_token=a762b38f-8455-461e-9627-5b4e151b816a    centos7修复引导问题,通过u盘复制文件

1、进入急救模式

大致就是因为开机时系统没有找到grubx64.efi这个文件导致系统进不去了。于是开始进行系统修复(主要就是把丢失的这个文件给放到原来的位置上去),我在网上找了很多文章,大致都是需要使用Centos系统安装盘光驱或者Centos的U盘启动盘 在选择安装系统的界面如下图:
2-1

3-1

进入rescue system,然后将/mnt/sysimage文件夹下面的grubx64.efi文件复制到丢失文件目录/boot/efi/EFI/centos/下。

可能有些电脑在bios里面无法找到U盘启动选项,这些需要去找主板对应的bios设置进行设置,具体要看自己的电脑主板是什么品牌和型号就不在这里细说了(网上都能找到这些设置)。

在进入rescue system时,也有可能会报modprobe:ERROR: could not insert 'floppy’和modprobe:ERROR: could not insert ‘edd’:No。

4-1

然后后面会打印200个脚本执行超时,并最终进入>dracut:/#,这时候是因为进入rescue system选择设置中的stage2=xxxx路径不正确导致的,所以这个时候进入>dracut:/#后,执行:

查看/dev下面的硬盘和外部驱动器
ls /dev
  • 1
  • 2

一般U盘会是sdbx(x是数字)或者sdc这样的挂载路径,找到插入的U盘是哪一个,然后重启电脑,再次进入选择rescue system的页面
5-1

选择Rescue a CentOS system,然后按e进入它的引导配置编辑页面,然后修改配置中的stage2=hd:LABEL=CentOS\xxxx为stage2=hd:/dev/sdbx(sdbx为前面找到的U盘路径),然后按control + x运行,这时候就能正常进入rescue system了。
6-1

然后这个时候进入/mnt/sysimage文件夹下面,将grubx64.efi文件复制到丢失文件目录/boot/efi/EFI/centos/下重启即可。但是我却发现这个目录下面根本没有丢失那个文件,并且我在根目录下使用find . -name '*.efi’进行全局查找,其它目录下也没有丢失的这个文件,既然现在找不到这个文件,那就只能从外部把这个文件放进去了。

我在制作完成CentOS启动盘后,我的U盘中是有这个CentOS需要的系统文件的,那么我可以将的U盘挂载进去,就能拿到我的这个文件了。

2、挂载U盘

查看磁盘列表
fdisk -l
  • 1
  • 2

找到U盘的盘符,U盘容量固定8G、16G、或者32G、64G的,而且一般都是sdbx或者sdc这类名称,所以比较好找。

查看挂载列表
df -h
  • 1
  • 2

这个时候会发现CentOS并没有将U盘挂载上去。

挂载U盘

# 创建挂载的文件夹
mdkri /mnt/usb
# 将U盘挂载到文件夹下面
mount /dev/sdbx /mnt/usb
  • 1
  • 2
  • 3
  • 4

这个时候会发现CentOS的启动盘U盘无法进行挂载,估计可能是因为之前做了启动盘的原因,无法再次挂载,然后我使用了另外一个U盘,将U盘也格式化为FAT32格式,并将grubx64.efi放进去,然后进行挂载,结果发现挂载成功之后,里面并没有grubx.efi文件,而只有一个found+local的文件夹,里面也是空空如也,并且卸载这个U盘挂载umount \mnt\usb再插入windos电脑显示无法读取,只能进行格式化才行。可见这样进行挂载之后U盘的文件系统被破坏了,里面的文件也丢失了,这之后我还尝试过挂载另外的Liunx硬盘,依然是失败的。

3、最终解决办法

其实很简单,将CentOS的启动U盘拔出来,这时候运行命令

fdisk -l
  • 1

可以发现启动盘还在,这是因为启动盘在启动了之后其实已经复制内容到系统中了,并虚拟了一个盘符进行挂载,这个时候的盘符跟插在电脑上的启动U盘已经没有什么关系了,并且因为这种启动U盘的特性,在启动之后并不能再看到真实的U盘盘符,所以把U盘拔掉再重新插上去即可。

再次插上去之后,会发现有一个名为sdc文件系统为FAT32(其它的类型U盘文件系统可能不一样)的盘符,我们直接使用命令将这个盘符挂载上去即可

mount /dev/sdc /mnt/usb
  • 1

这个时候进入 /mnt/usb目录就能访问U盘中的文件了。

然后执行copy命令

# 将U盘中的grubx64.efi文件复制到/boot/efi/EFI/centos/目录中
cp /mnt/usb/EFI/BOOT/ /boot/efi/EFI/centos/grubx64.efi
  • 1
  • 2

卸载U盘

umount /mnt/usb
  • 1

然后拔出U盘,重启电脑将bios中的启动项改回电脑的系统硬盘就能进入系统了。如果还有其它的文件丢失的话,也可以使用同样的方式将文件放入到丢失的位置上去。

 



这篇关于centos启动grub引导修复以及改错过程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程