2023年12月1日发(作者:)

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

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

件,进⾏引导修复

通过mbr扇区修复引导:

⼀、修复MBR

MBR(Master Boot Record主引导记录)

硬盘的0柱⾯、0磁头、1扇区称为主引导扇区。其中446Bytebootloader64BytePartition table,剩下的2Bytemagic number

备份MBR

#dd if=/dev/sda of=/root/ 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-.

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

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

列外:

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系统⼜能打开了,所以可以直接通过centosgrub2功能实现windows的引导。此时可以输⼊此命令直接搞

定:grub2-mkconfig -o /boot/grub2/,然⽽,输⼊该命令后并没有发现与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/ 系统就能⾃动找到win7系统或xp系统的引导项,并加⼊到了菜单中。这样就避免了⼿⼯改

动⽂件的危险,并且所有系统都能正常启动。不过,我多此⼀举的使⽤以下命令挂载了 windows NTFS 的分区(我的 Windows 分区分别是

/dev/sda1 /dev/sda2 /dev/sda4),注意:挂载是不必要的,因为在这个步骤中我们的真正⽬的是恢复win7的启动项,作为⼀个linux

⽩,我只是借此场景熟悉⼀下mount命令的⽤法⽽已。我⽤以下命令分别挂载了通过 grub2-mkconfig -o /boot/grub2/命令搜索到的所

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引导

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

上⾯这⼀步,要说两点:

1xxx-xxx是可以tab补全的。如果双tab后没有,有可能你第⼀步分区都没找对。

2/dev/nvme0n1p8这个分区,由于是在固态盘⾥,所以映射成nvme0n1p8了。猜测这⾥的8和第⼀步的gpt8中的8应该是⼀致的。但不能

写成/dev/sda8

initrd /boot/

boot

boot之后应该就可以重新进⼊ubutun了。重新进⼊后,要做的就是更新grub配置。很简单,只需要下⾯⼀句:

sudo update-grub

该事件原因分析:由于/boot/下的vmlinuz⽂件丢失(原因暂不详),但还是原先版本的vmlinuz,所以启动找不到,kernel起不来。顺提

⼀句,去掉grub多余引导项要修改的⽂件就是/boot/grub/. 去掉的内容可以。

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

引导顺序

UEFiBIOS初始化,运⾏POST开机⾃检

选择启动设备

引导装载程序, centos7grub2

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

加载initramfs驱动模块

加载内核选项

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

执⾏所有单元,包括挂载/etc/fstab

initramfs根⽂件系统切换到磁盘根⽬录

systemd执⾏默认target配置,配置⽂件/etc/systemd/system/

systemd执⾏初始化系统及准备操作系统

systemd启动下的本机与服务器服务

systemd执⾏下的/etc/rc.d/

Systemd执⾏下的及登录服务

systemd执⾏graphical需要的服务

设置内核参数

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

启动时,在linux16⾏后添加

=

=

=

emergency ⽀持更多的功能,例如⽇志等

systemctl default 进⼊默认target

破解CentOS7root⼝令

⽅法⼀:

启动时任意键暂停启动

e键进⼊编辑模式

将光标移动linux16开始的⾏,添加内核参数

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_ --force --force选项是必须的

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

cd /boot/grub2/

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

启动默认内核选择

/etc/default/grub⽂件中GRUB_DEFAULT= 0为第⼀项,1为第⼆,以此类推),修改此项即可

通过复制U盘⽂件,进⾏引导修复:

1、进⼊急救模式

⼤致就是因为开机时系统没有找到这个⽂件导致系统进不去了。于是开始进⾏系统修复(主要就是把丢失的这个⽂件给放到原来

的位置上去),我在⽹上找了很多⽂章,⼤致都是需要使⽤Centos系统安装盘光驱或者CentosU盘启动盘 在选择安装系统的界⾯如下

图:

进⼊rescue system,然后将/mnt/sysimage⽂件夹下⾯的⽂件复制到丢失⽂件⽬录/boot/efi/EFI/centos/下。

可能有些电脑在bios⾥⾯⽆法找到U盘启动选项,这些需要去找主板对应的bios设置进⾏设置,具体要看⾃⼰的电脑主板是什么品牌和型号

就不在这⾥细说了(⽹上都能找到这些设置)。

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

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

所以这个时候进⼊>dracut:/#后,执⾏:

查看/dev下⾯的硬盘和外部驱动器

ls /dev

1

2

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

选择Rescue a CentOS system,然后按e进⼊它的引导配置编辑页⾯,然后修改配置中的stage2=hd:LABEL=CentOSxxxx

stage2=hd:/dev/sdbx(sdbx为前⾯找到的U盘路径),然后按control + x运⾏,这时候就能正常进⼊rescue system了。

然后这个时候进⼊/mnt/sysimage⽂件夹下⾯,将⽂件复制到丢失⽂件⽬录/boot/efi/EFI/centos/下重启即可。但是我却发现这个⽬

录下⾯根本没有丢失那个⽂件,并且我在根⽬录下使⽤find . -name '*.efi’进⾏全局查找,其它⽬录下也没有丢失的这个⽂件,既然现在找不

到这个⽂件,那就只能从外部把这个⽂件放进去了。

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

了。

2、挂载U

查看磁盘列表

fdisk -l

1

2

找到U盘的盘符,U盘容量固定8G16G、或者32G64G的,⽽且⼀般都是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格式,并将放进去,然后进⾏挂载,结果发现挂载成功之后,⾥⾯并没有⽂件,⽽只有⼀个

found+local的⽂件夹,⾥⾯也是空空如也,并且卸载这个U盘挂载umount mntusb再插⼊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盘中的⽂件复制到/boot/efi/EFI/centos/⽬录中

cp /mnt/usb/EFI/BOOT/ /boot/efi/EFI/centos/

1

2

卸载U

umount /mnt/usb

1

然后拔出U盘,重启电脑将bios中的启动项改回电脑的系统硬盘就能进⼊系统了。如果还有其它的⽂件丢失的话,也可以使⽤同样的⽅式将

⽂件放⼊到丢失的位置上去。