2023年12月1日发(作者:)
centos启动grub引导修复以及改错过程
主要改错:1、通过mbr扇区修复引导 2、修复grub引导 3、centos7引导修复和更改启动顺序 4、通过复制U盘⽂
件,进⾏引导修复
通过mbr扇区修复引导:
⼀、修复MBR:
MBR(Master Boot Record主引导记录):
硬盘的0柱⾯、0磁头、1扇区称为主引导扇区。其中446Byte是bootloader,64Byte为Partition table,剩下的2Byte为magic 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系统⼜能打开了,所以可以直接通过centos的grub2功能实现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
上⾯这⼀步,要说两点:
(1)xxx-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引导修复和更改启动顺序
引导顺序
UEFi或BIOS初始化,运⾏POST开机⾃检
选择启动设备
引导装载程序, centos7是grub2
加载装载程序的配置⽂件:/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
破解CentOS7的root⼝令
⽅法⼀:
启动时任意键暂停启动
按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系统安装盘光驱或者Centos的U盘启动盘 在选择安装系统的界⾯如下
图:
进⼊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盘容量固定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格式,并将放进去,然后进⾏挂载,结果发现挂载成功之后,⾥⾯并没有⽂件,⽽只有⼀个
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中的启动项改回电脑的系统硬盘就能进⼊系统了。如果还有其它的⽂件丢失的话,也可以使⽤同样的⽅式将
⽂件放⼊到丢失的位置上去。
发布评论