设为首页 收藏本站
查看: 992|回复: 0

[经验分享] centos 启动流程及grub、initramfs修复

[复制链接]

尚未签到

发表于 2018-4-21 10:59:30 | 显示全部楼层 |阅读模式
启动流程、grub配置及修复、initramfs修复


  目录:

  •    centos启动流程

  •   grup配置及修复
      
      2.1 grub配置
      2.2 grub命令启动
      2.3 grub修复

  •   initramfs修复
  •   boot破坏修复
  

  1.centos启动流程
  

     在centos5和6中启动流程如下:
(1).POST加电自检
硬件加电自检程序(安装在CMOS中的BIOS程序)BIOS负责检测硬件设备是否正常运行,如cpu、内存、硬盘、外接设备等是否正常,在生产中服务器内存较大,由多条内存组成较大内存的服务器,因此对内存的安装顺序等要严格的控制,不同品牌服务器要根据各自厂家的设计及要求进行安装。
BIOS初始化硬件后会关联硬盘分区格式, 如:新购PC机自带Windows10(GPT分区)系统修改为Windows7(MBR)系统时,将BOIS中boot菜单的boot mode默认格式UEFI修改为Legacy Support。因为不同的硬盘分区格式,需要不同的硬件启动程序支持。
(2).MBR主引导分区
在BIOS初始化硬件后,调动INT13硬件读取MBR信息,其中MBR在硬盘的第一个扇区,一个扇区大小为512byte,前446byte存储bootloader,64byte存储硬盘分区表,2byte存储硬盘标志位。但446byte不足以启动系统,因此会在MBR后面的扇区存储1.5阶段的引导启动程序,其中1.5阶段主要负责读取boot分区(存储内核、虚拟文件系统和grup的配置文件),真正的分区一般从第63个扇区开始进行分区。
系统引导分为三个阶段:
第1阶段:在MBR分区中,主要作用加载boot loader,进入1.5阶段;

第1.5阶段:主要作用加载/boot分区的文件系统驱动,进入文件系统;
第2阶段:主要作用通过/boot/grub/grub.conf配置文件进行加载内核等,其中在/boot/grub/*下只有grub.conf配置文件生效,其他都是第1阶段和1.5阶段的备份文件。

(3).Kernel、initrd/initramfs
在系统通过Boot loader引导进入boot分区后,先是通过grub.conf中的参数root (hd0,0)从第一块磁盘中的第一个分区进行读取数据,参数kernel/vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2读取内核数据及真正加载根的为,参数initrd /initramfs-2.6.32-696.el6.x86_64.img读取初始化虚拟根系统(注意:一定要先读取内核,然后再读取虚根系统,因为只有加载内核后才能),然后加载启动过程中所定义的内核模块,最后释放虚根,切换为真实的根文件系统。
(4).init
当系统切换为真正的根后,系统从内核空间转到用户空间,执行第一个初始化程序/sbin/init,通过init初始化程序将用户空间预定义的启动级别进行执行/etc/rc.d/rc#.d/S*.sh脚本启动相关服务。
  

  2.grub配置及修复
  

      grub配置文件存储位置为/boot/grub/*,其中在此目录下能够看到关于启动第1阶段、第1.5阶段、第2阶段的备份文件和grub的配置文件grub.conf
  

    2.1 grub配置文件
      grub配置文件通过参数的配置控制默认启动的菜单、菜单超时时间、单用户模式登录的密码、菜单的背景图片设置、引导boot的磁盘如hd0,0(第一块磁盘的第一分区),kernel的指定、initrd的指定等相关

  [root@centos6 grub]# grub-crypt                    #对密码进行256位加密算法计算
Password:
Retype password:
$6$7KtGRwtyOq5ves0w$ujUp94VFUA0m8oeXN1/kF/mgzi5l0UPfdqox8fs0PeSIe0EfyyNJBkogOCSWI1P2XqVgTbH1hE2nJQRABJQFN0
  [root@centos6 grub]# vim /boot/grub/grub.conf                                               

  default=0                   #默认

  timeout=5
  splashimage=(hd0,0)/grub/splash.xpm.gz
  password --encrypted $6$7KtGRwtyOq5ves0w$ujUp94VFUA0m8oeXN1/kF/mgzi5l0UPfdqox8fs0PeSIe0EfyyNJBkogOCSWI1P2XqVgTbH1hE2nJQRABJQFN0                       #经过加密后的密码,此密码是进入防止单用户的密码

  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=/dev/sda2 rhgb quiet #rhgb是开机转圈的动作

      initrd  /initramfs-2.6.32-696.el6.x86_64.img                              #quiet内核启动隐藏显示

  
  title CentOS 6 (4.6.32-696.el6.x86_64)     

      root (hd0,0)
      kernel  /vmlinuz-2.6.32-696.el6.x86_64 ro  root=UUID=/dev/sda2 quiet
      initrd  /initramfs-2.6.32-696.el6.x86_64.img
      password root0987                            #此密码是引导加载内核的密码也就是系统启动密码

  

  
  2.2 grub命令启动
      在开机启动进入菜单后,按c命令进入grub提示符,在grub命令提示符下即可输入相关启动命令,启动系统只需4条指令root、kernel、initrd、boot,分别加载boot分区位置、内核位置、虚根位置,最后重新启动虚拟机即可完成通过命令加载系统,进入系统之后再选择编辑/boot/grub/grub.conf的文件

      第一步:输入"root (hd" 然后按两次 TAB 键出现磁盘块,选中需启动的磁盘,再按两次TAB键出现磁盘分区编号,选中boot分区所在的磁盘分区;
      第二步:输入"kernel /vm"然后按两次TAB键出现内核,再选中要选择启动的正根root=/dev/sda2
      第三步:输入"initrd /init"然后按两次TAB键出现虚根系统
      第四步:输入boot启动系统,完成加载系统
  
         GUN GRUB version 0.97 (635K lower /1046400K upper memory)                       

  grub>kernel /boot/vmlinuz-2.6.15-26-386 ro dev=/dev/hda3          #启动内核参数

  grub>initrd /boot/initrd.img-2.6.15-26-386                        #启动虚根参数

  grub>root (hd0,0)                                                 #启动boot的位置

  grub>boot            

                                                           (具体也可参考http://man.linuxde.net/grub)

  
  2.3 grub修复
      grub修改有两种方法:
      第一种方法:重构grub引导程序
      在误删grub的第一阶段(446byte字节)、第1.5阶段或第三阶段的数据导致系统无法正常启动时,通过万能的方法重新构建新的grub引导程序,但是如若分区表64tyte删除则无法恢复,具体恢复如下令:

  #!/bin/bash                                                                           

  sh-4.1# grub-install /dev/sda                #安装grub程序到/dev/sda这块磁盘
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
  sh-4.1#reboot
  #################################重启后指定引导配置文件进入系统####################################

           GUN GRUB version 0.97 (635K lower /1046400K upper memory)                       

  grub>kernel /boot/vmlinuz-2.6.15-26-386 ro dev=/dev/hda3          #启动内核参数

  grub>initrd /boot/initrd.img-2.6.15-26-386                        #启动虚根参数

  grub>root (hd0,0)                                                 #启动boot的位置

  grub>boot            
  ##################################登录系统重构配置文件##############################################
  [root@centos6 grub]# vim /boot/grub/grub.conf                                               

  default=0                   #默认

  timeout=5
  splashimage=(hd0,0)/grub/splash.xpm.gz
  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=/dev/sda2 rhgb quiet

      initrd  /initramfs-2.6.32-696.el6.x86_64.img                              

  

       第二种方法:利用备份文件恢复
      利用/boot/grub/*第1阶段的备份文件和第1.5的备份文件进行恢复,此种方法有效率相对较高无需进入救援模式
   GUN GRUB version 0.97 (635K lower /1046400K upper memory)  

  grub>setup (hd0)                                                #利用备份文件恢复              

  grub>kernel /boot/vmlinuz-2.6.15-26-386 ro dev=/dev/hda3          #启动内核参数

  grub>initrd /boot/initrd.img-2.6.15-26-386                        #启动虚根参数

  grub>root (hd0,0)                                                 #启动boot的位置

  grub>boot            
  
  3.initramfs修复
  

      initramfs虚根系统是安装系统时,系统利用自身的命令生成相关的文件系统,如若此文件系统可以利用mkinitrd
  ##################################生成虚拟文件系统##################################################

  [root@centos6 bak]#mkinitrd /boot/initramfs-$(name -r).img $(name -r)                           

  

     



  

  

  

  

  

  

  

  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-449968-1-1.html 上篇帖子: centos7双网卡bond失败 下篇帖子: Linux自学笔记——Centos启动流程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表