ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2022-01-03 22:31:12  阅读:434  来源: 互联网

标签:grub centos mnt dev 改错 grub2 挂载 U盘


主要改错: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中的启动项改回电脑的系统硬盘就能进入系统了。如果还有其它的文件丢失的话,也可以使用同样的方式将文件放入到丢失的位置上去。

 

标签:grub,centos,mnt,dev,改错,grub2,挂载,U盘
来源: https://www.cnblogs.com/yeziwinone/p/15760777.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有