linux内核启动修复

it2022-05-05  96

linux内核启动修复

首先看一下linux内核重要文件grub.conf

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # grub.conf generated by anaconda                                                                                                              # # Note that you do not have to rerun grub after making changes to this file # NOTICE:  You have a /boot partition.  This means that #          all kernel and initrd paths are relative to /boot/, eg. #          root (hd0,0) #          kernel /vmlinuz-version ro root=/dev/sda2 #          initrd /initrd-[generic-]version.img #boot=/dev/sda default=0     #如果有多个菜单,默认选择的菜单为0 timeout=5     #菜单选项栏等待5s splashimage=(hd0,0) /grub/splash .xpm.gz    #/dev/sda1即/boot下开机启动图片 hiddenmenu    #影藏菜单 title CentOS 6 (2.6.32-696.el6.x86_64)      #标题为CentOS 6 (2.6.32-696.el6.x86_64),此标题不能没有      root (hd0,0)      #第一块磁盘,第1个分区,指的是/boot      kernel  /vmlinuz-2 .6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet       #  kernel相对于/boot的路径,此处根值/boot,kenrl后面跟有系统启动相关参数  rhgb 图形化工具(转圈圈),删除rhgb直接到正常启动界面   quiet默认隐藏内核的启动过程      initrd  /initramfs-2 .6.32-696.el6.x86_64.img     title CentOS 6 (2.6.32-696.el6.x86_64)      #标题为CentOS 6 (2.6.32-696.el6.x86_64),此标题不能没有      kernel (hd0,0) /vmlinuz-2 .6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet       #  没有定义根,后面不能调用只能在前面添加(hd0,0)      initrd (hd0,0) /initramfs-2 .6.32-696.el6.x86_64.img

  

 

一 删除/boot/grub/*下所有文件,只保留grub.conf配置文件,系统能否正常启动修复?

系统能够正常启动 stage2阶段就是一个grub.conf配置文件,其它文件都不起到直接的作用         此时重新启动系统只会在一开始报一个没有启动图片的错误,此错误不影响系统的正常启动(可忽略),/boot/grub下的所有文件只做暂时备份使用即stage1 stage1_5阶段的备份文件,只有当1和1.5阶段出现故障的时候 可以通过一些命令进行修复,修复的时候会用到此处的备份文件  

二 破坏MBR的前446字节的信息,修复(stage1阶段修复)

1 [root@Centos6 ~] # dd if=/dev/zero of=/dev/sda bs=1 count=4426 破坏stage1阶段 此时发现系统重启进入光盘界面 重启系统直接进入光盘界面,也就是光盘上的MBR没有启动代码 选择第三项进入救援模式   修复步骤 1.切根  chroot /mnt/sysiamge 此时所处的位置并不是磁盘上的根,真正的根位于/mnt/sysimage下 起因:在救援模式自身是不提供grub-install的只有切根才可以   2.grub-install  /dev/sda   修复grub,此过程stage[1,1.5,2]都可以修复 此时出现分区别标签的错误,不用管,此步骤容易出现故障 3.sync 同步设置到磁盘,确保磁盘已经写入进去了 此时不仅修复了mbr还修复了grub里面不同stage的文件 4.退出shell,重新启动 总结:此时stage1阶段的恢复完成,主要通过grub-install进行恢复 -------------------------------补充关闭selinux--------------------------- 1、重启系统按c键,直接进入grub grub> kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2 selinux=0 grub> initrd /initramfs-2.6.32-696.el6.x86_64.img grub> boot 2、通过修改/etc/sysconfig/selinux     把selinux=disabled -----------------------------------------------------------------------------------  

三 破坏512字节之后的内容进行修复(stage1.5阶段过程)

dd if=/dev/zero of=/dev/sda bs=1 count=10240 seek=512

 

此时会发现菜单都看不到 stage1.5出故障使用光盘引导 修复步骤: 1.按Esc键进入光盘引导界面 2.选择第三项进入救援模式 3.切根  chroot /mnt/sysimage 4.grub-install或者使用grub命令 1 sh-4.1 # grub   1 grub>root (hd0,0)      #表示boot在第一块磁盘第1个分区   setup (hd0)      #此步骤依赖于/boot/grub/*下面的文件   -------------------------------------------------------------------------------------------------------- 表示把grub按在哪个硬盘上,没有写分区的原因在于有一部分是装在MBR里面的即boot分区里面,boot里面有一个目录名为grub,告诉各个路径在什么地方 ------------------------------------------------------------------------------------------------------------- 5.sync   #设置同步到磁盘 6.reboot  #退出shell,重启系统方可恢复  

四 在“三”的基础上在重新做“一”的操作,再启动会出现报错,状态码为Error 15

  修复方案: 如把stage2文件复制到/boot/grup目录下,系统可以重新启动 解释 重启系统,此时可以知道重新安装grub以后stage2并不是起备份作用了,“一”中之所以成功是通过磁盘上别的空间来读取数据,可以明白stage1.5阶段已经成功了 注:如果后期没有更改时间,grub.conf文件时间就是安装操作系统的时间 在grub.conf文件下kernel没有写 /boot分区是因为boot是一个独立分区,此文件是相对于boot分区,/=/boot 如果没有指定root的位置必须指定kernel,initrd的位置及在前面加上(hd0,0),即为/boot  

五  如果没有root(hd0,0)且kernel,initrd不指定/boot的位置会出现如下报错

1 2 3 title CentOS 6 (2.6.32-696.el6.x86_64)      #标题为CentOS 6 (2.6.32-696.el6.x86_64),此标题不能没有      kernel vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet       #  没有定义根,后面不能调用只能在前面添加(hd0,0)      initrd initramfs-2.6.32-696.el6.x86_64.img   1 2 3 4 #此时只能进入救援模式切根修改文件 title CentOS 6 (2.6.32-696.el6.x86_64)      #标题为CentOS 6 (2.6.32-696.el6.x86_64),此标题不能没有      kernel  /vmlinuz-2 .6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet       #  没有定义根,后面不能调用只能在前面添加(hd0,0)      initrd  /initramfs-2 .6.32-696.el6.x86_64.img

  

 

六 如果在默认文件中去掉root (hd0,0)一行系统启动会出现的情况

1 2 3 title CentOS 6 (2.6.32-696.el6.x86_64)               kernel  /vmlinuz-2 .6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet         initrd  /initramfs-2 .6.32-696.el6.x86_64.img   开头出现下面的提示,但是 系统能够正常的启动    

七 调换kernel和initrd调换顺序,开机启动情况?

1 2 3 title CentOS 6 (2.6.32-696.el6.x86_64)               initrd  /initramfs-2 .6.32-696.el6.x86_64.img      kernel  /vmlinuz-2 .6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet   

  

  解释:直接报错,大概意思是linux kernel必须在initrd之前加载,否则系统无法启动 只有加载kernel才会知道操作系统的根,找到根了才会找到内存用户驱动   修复步骤 修复方法,显示删除initrd添加一新行,在编辑新行grub> initrd /initramfs-2.6.32-696.el6.x86_64.img    

八 单用户模式下可以轻易破解口令,如何明文加密口令?

加上密码口令并不影响启动,只是不能菜单编辑 在title的上一行加上passwd    密码     此时验证的时候不知道都不会成功 1 password zangfans     验证会出现Failed   修复方案 在hidddenmenu上方和initrd下方各插入一行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 # grub.conf generated by anaconda                                                                                                              # # Note that you do not have to rerun grub after making changes to this file # NOTICE:  You have a /boot partition.  This means that #          all kernel and initrd paths are relative to /boot/, eg. #          root (hd0,0) #          kernel /vmlinuz-version ro root=/dev/sda2 #          initrd /initrd-[generic-]version.img #boot=/dev/sda default=0   timeout=5    splashimage=(hd0,0) /grub/splash .xpm.gz password centos6     #编辑菜单项输入密码 hiddenmenu  title CentOS 6 (2.6.32-696.el6.x86_64)         root (hd0,0)         kernel  /vmlinuz-2 .6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet          initrd  /initramfs-2 .6.32-696.el6.x86_64.img     title CentOS 6 (2.6.32-696.el6.x86_64)         kernel (hd0,0) /vmlinuz-2 .6.32-696.el6.x86_64 ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSF ONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet       #      initrd (hd0,0) /initramfs-2 .6.32-696.el6.x86_64.img      password centos6    #启动输入密码        

九 如何通过密文设置加密口令

使用加密算法对口令进行加密,可以使用MD5.SHA512 明文加密 1、使用grub-md5-crypt设置密码 1 2 3 4 [root@Centos6 ~] # grub-md5-crypt Password: Retype password: $1$Z.gAn/$Xd647hXfPj /sJ .i8A0By8.   进入/boot/grub/grub.conf文件使用vim编译器的功能 输入密码和验证,即可生成一段md5加密的字符串 1 password --md5 $1$V1hAn/$hSLRXWfIZWwVtYz4th5rg1     密文加密 2、使用grub-crypt及sha512进行加密 1 2 3 4 [root@Centos6 ~] # grub-crypt               Password: Retype password: $6$jkKAT.eUrv3d4bfM$f41lkKlqQk3fAPqNwgy93J6Wi6bVF.zB5b.24V1QPwAGXkVVmwk2MGdi1UxzStHBaPWarW20AppaOvwheNRRj.   修改/boot/grub/grub.conf文件 1 password --encrypted $6$ndPVD /LnVhjBwHaG $XlSiTmJfRJrWufrmH0tLzle /zlmCB .Zyi /WClkcL8G43NDpXlKuQPvsw4AiIJqT1fJrb2Kh8DgZLY68pIAKFI0

 

十 如果忘记root账号口令,如何修复?

修复方案: 可以通过救援模式删除口令   删除口令之后进入系统直接输入root用户 无需密码验证就可以登录  

十一 设置grub背景图片

图片像素和格式是有要求的 使用convert工具对图片像素进行设置 首先得安装convert命令所提供的包 1 2 3 4 5 6 7 8 [root@Centos6 ~] # which convert          /usr/bin/convert [root@Centos6 ~] # rpm -qf `which convert` ImageMagick-6.7.2.7-6.el6.x86_64 [root@Centos6 ~] # convert -resize 640x480 -colors 14 zf.jpg zf.xpm      #此命令必须在zf.jpg位置使用,使用less zf.xpm可以在头部看到相关信息 [root@Centos6 ~] # cp zf.xpm /boot/grub [root@Centos6 grub] # vim grub.conf splashimage=(hd0,0) /grub/zf .xpm   进入grub界面就能看到设置的背景图片 查看内核启动参数内核参数 1 2 [root@Centos6 ~] # cat /proc/cmdline ro root=UUID=9ca5bdac-ce61-410e-a9fb-19a7877163cc rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16   KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet  

十二 删除grub.conf文件,启动修复

环境:/boot/grub 目录下只有stage2文件,删除原有的grub.conf文件 重启系统进入如下界面 解释:stage1、stage1.5没有问题主要stage2有问题,连菜单都进不去,直接跳到grub 修复方案: grub支持交互式输入,如果没有grub.conf文件可以手动输入  

十三 删除/boot/grub整个目录,如何修复?

1 [root@Centos6 ~] # rm -rf /boot/grub   重启进入如下界面   修复方案: 1、进入救援模式 2、chroot /mnt/sysimage 切根 3、使用grub-install /dev/sda 4、sync同步磁盘,此时grub目录已经修复好了 5、写一个grub.conf文件 因为修复时并没有grub.conf文件必须手写 1 2 3 4 5 6 #必须写三项分别是title kernel initrd default 0 timeout 3 title  Centos6 kernel  /vmlinuz-2 .6.32-696.el6.x86_64 ro root= /dev/sda2        #方便的小技巧,防止手敲出错 initrd  /initramfs-2 .6.32-696.el6.x86_64.img     使用UUID也是可以的 注:r!blkid|grep /dev/sda2   #UUID后面注意去掉引号  

十四 删除/boot下所有文件如何修复?  

环境: 1 2 3 4 5 6 7 8 [root@Centos6 ~] # ls /boot config-2.6.32-696.el6.x86_64  initramfs-2.6.32-696.el6.x86_64.img  System.map-2.6.32-696.el6.x86_64 efi                           lost+found                           vmlinuz-2.6.32-696.el6.x86_64 grub                          symvers-2.6.32-696.el6.x86_64.gz [root@Centos6 ~] # rm -rf /boot rm : cannot remove ` /boot ': Device or resource busy [root@Centos6 ~] # ls /boot    [root@Centos6 ~] # 修复分析: 主要修复/boot里面的内核,虚拟文件系统,grub。内核:可以在光盘里面找或者去其它相同系统的机子上拷一份 修复方案: 1、进入救援模式 2、chroot /mnt/sysimage  切根 3、挂载光盘    mount /dev/sr0  /mnt 4、cd /mnt/selinux/ vmlinuz  大小和刚开始文件系统大小是一样的,说明内核是一个固定不变的东西 5、cp vmlinuz /boot  复制内核到/boot下 6、mkinitrd /boot/initramfs.img `uname -r` 7、grub-install /dev/sda 8、在/boot/grub目录下新建一个grub.conf文件 default o timeout 3 title Centos6 kernel  /vmlinuz ro root=/dev/sda2 initrd    /initramfs.img 9、重启恢复正常  

十五 误删除/sbin/init,无法进入系统如何修复?

1 [root@Centos6 ~] # mv /sbin/init ~/     恢复方案; 1、进入grub 2、按a键在后面添加 init=/bin/bash  #指定不用系统默认的init,使用/bin/bash来代替 用bash来作为计算机的第一个进程,bash内置了一些内部命令 4、回车之后进入如下界面,可以输入一些命令   5、查看/sbin/bash命令来自哪个包 1 2 bash -4.1 # rpm -qf /sbin/init #upstart包提供   此时挂载是只读挂载,不能安装此包   6、重新挂载根,默认只读挂载 1 bash -4.1 # mount -o remount,rw /     7、安装upstart包 注意此时光盘已经挂载,安装包要覆盖安装,--force选项,upstart包毕竟已经安装过了 1 2 3 #默认光盘已经挂载在/mnt bash -4.1 # cd /mnt bash -4.1 # rpm -ivh /Packages/upstart-xxxxxx  --force     8、同步到磁盘 1 bash -4.1 # sync     9、检查一下可以看到/sbin/bin 总结:/sbin/bin文件误删除后,不需要进入救援模式就可以直接通过命令进行修复,过程中发现根是只读挂载的,必须重新挂载才能安装upstart包  

十六 根文件系统放在逻辑卷上,若误操作删除/fstab,/boot/*文件该如何恢复?

1 2 [root@Centos6-LVM ~] # mv /etc/fstab /root [root@Centos6-LVM ~] # rm -rf /boot/*   此时boot里面的内核文件已经删除了,所以不能通过手写恢复,只有通过救援模式 重启直接进入grub 修复分析:boot分区是不能放在逻辑卷上的,那么有多快逻辑卷如何区分哪块逻辑卷是根? 恢复方案: 1、进入救援模式 2、创建一个临时目录   mkdir /mnt/tmp 3、激活逻辑卷  vgchage -ay    #当前逻辑卷状态处于非活动状态,必须激活才可以   4、根据我的机器我从里面文件的结构和大小了解到,Vo100,Vo101app,Vo102分别为root、app、swap 5、挂载/dev/vg_centos6lvm/LogVo100到/mnt/tmp mount /dev/vg_centos6lvm/LogVo100 /mnt/tmp 6、新建fstab文件 touch /mnt/tmp/etc/fstab 7、对fstab文件添加挂载信息 vi /mnt/tmp/etc/fstab 8、重启系统,挂载一下分区,然后进入救援模式 9、切根 chroot /mnt/sysimage 到此步不能用第十四题思路对grub解题 10、重新安装内核 rpm -ivh /mnt/Packege/kernel-xxxxx.rpm --force 这里不同于“十四”,重新安装内核,“十四”是通过复制光盘的文件到/boot,重写grub.conf进行恢复 11、重写grub.conf文件 1 2 3 4 5 6 #必须写三项分别是title kernel initrd default 0 timeout 3 title  Centos6_lvm kernel  /vmlinuz-2 .6.32-696.el6.x86_64  ro root= /dev/vg_centos6lvm/LogVo100   selinux=0    initrd  /initramfs-2 .6.32-696.el6.x86_64.img 12、重启系统,恢复正常  

十七 误删除/etc/fstab文件和/boot下的所有文件如何修复?

1 2 [root@Centos6 ~] # rm -rf /etc/fstab [root@Centos6 ~] # rm -rf /boot   重启后进入如下界面 修复分析:进入救援模式怎么区分/boot,/,/swap?可以通过挂载分区,进入挂载目录里面,查看内容,以区分区挂载目录   1 2 3 4 bash -4.1 # mkdir /mnt/tmp   #创建 bash -4.1 # mount /sda1 /mnt/tmp   #挂载到临时文件 bash -4.1 # ls /mnt/tmp    #查看里面的内容,此处可以看到没有任何文件可以判断为/boot 通过以上方法就可以知道每个分区到底是什么   恢复方案: 1、进入救援模式 2、chroot /mnt/sysimage   #切根 3、mkdir /mnt/tmp 4、mount /dev/sda2 /mnt/tmp 5、touch /mnt/tmp/etc/fstab   #创建删除的文件 6、vi /mnt/tmp/etc/fstab   /dev/sda1 /boot  ext4   defaults 0 0 /dev/sda2 /         ext4   defaults 0 0 /dev/sda5 swap  swap  defaults 0 0 错误一:扩展内存加上了/ 错误二:文件系统类型为ext4 注:此处是一个大坑,稍有出错会导致在救援系统里面无法挂载光盘 7、重启系统进入救援模式 8、切根挂载光盘 chroot /mnt/sysimage/ mount /dev/cdrom /mnt 9、重新安装内核 rpm -ivh /mnt/Packege/kernel-xxxxx.rpm --force 这里不同于“十四”,重新安装内核,“十四”是通过复制光盘的文件到/boot,重写grub.conf进行恢复 10、此时/boot会生成一些新文件  (看教程使用在强制安装kernel后在做grub-instlal /dev/sda,通过我的操作过程我了解在重新安装内核会自动生成grub目录里面的内容) 11、新建grub.conf文件 1 2 3 4 5 6 #必须写三项分别是title kernel initrd default 0 timeout 3 title  Centos6 kernel  /vmlinuz-2 .6.32-696.el6.x86_64 ro root= /dev/sda2       initrd  /initramfs-2 .6.32-696.el6.x86_64.img  

 12、重启系统,恢复正常

转载于:https://www.cnblogs.com/mydba-j/p/10119498.html


最新回复(0)