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

[经验分享] CentOS启动流程与grub

[复制链接]

尚未签到

发表于 2018-4-27 13:10:46 | 显示全部楼层 |阅读模式
DSC0000.png

  微内核设计使每种功能都单独独立出来.导致相互之间的逻辑关系变得很复杂.也有安全上的隐患.现在linux的内核是在单内核的基础上支持了模块化

  linux把核心文件(文件系统之类)之外的其他功能多做成了模块化.支持了运行时的动态装/卸载
DSC0001.png

  ramdisk就是为了解决这个矛盾的关系才存在的  ramdisk在内核之前装载到内存中 把内存中的某段空间当成磁盘来使用 让内核来当成根目录使用.内核把真根挂在进来之后让位
  

  

  CentOS系统启动流程: (仅用于MBR类型结构)

  

  ①POST(自检):
  加电自检,检查计算机各种硬件是否存在

  ROM : CMOS(最有代表性的)  通过ROM加载自检程序
      BIOS: Basic Input and Output System
      ROM+RAM  可被CPU访问,线性寻址的物理空间
  ②Boot Sequence
  根据BIOS中设定的启动顺序引导设备. 第一个有引导程序的设备即为文辞启动要用到的设备

  bootloader: 引导加载器.程序. 提供一个菜单.允许用户选择要启动的系统或不同的内核版本.

  并加载到RAM中 解压 把系统控制权移交给内核

  Linux :
      LILO: LIlux LOader  无法加载1024以后柱面的系统  --安卓中还用
      GRUB: Grand Uniform Bootloader
      CentOS 5/6 : GRUB 0.x  -->重命名 : Grub Legacy
      CentOS 7 : GRUB 1.x  -->重命名: Grub2
  bootloader装在MBR

  MBR:  (磁盘分区讲过) Master Boot Record
          512bytes
          446bytes: bootloader
          64bytes : fat
          2bytes : 55AA   55AA表示bootloader有效 其他表示无效
  注: GRUB会在最后进行单独介绍
  ③Kernel:
  自身初始化:
      探测可识别到的所有硬件设备
      加载硬件驱动程序(有可能会借助与ramdisk加载驱动)  加载硬件驱动时加载真正跟文件系统      所在设备驱动程序 这是有可能用到ramdisk
      以只读方式挂载跟文件系统 --以防内核bug把跟文件修改
      运行用户控件的第一个应用程序 /sbin/init
  init程序的类型:
          CentOS 5之前: SysV init
              配置文件 : /etc/inittab
          CentOS 6 : Upstart init  -支持并发服务启动
              配置文件 : /etc/inittab -没用. 为了兼容CentOS5  运行系统级
            /etc/init/*.conf
          CentOS 7 : Systemd
  ramdisk:
          Linux内核的特性之一: 使用缓冲和缓存来加速对磁盘上的文件访问 -前提是硬盘是机            械是硬盘
          ramdisk -->  ramfs 提速机制
  由于ramdisk是把内存中的部分空间当成硬盘来使用.所以需要数据时还是会从硬盘再            加载过来.这就造成了数据的两次读取 .所以会把ramdisk做成ramfs来优化

           CentOS 5 : initrd
           工具程序: mkinitrd
           CentOS 6,7 : initramfs
              工具程序: dracut, mkinitrd
          配置文件 : /usr/lib/systemd/system/ , /ets/systemd/system
  

  至此:内核级别的系统初始化流程为:

  POST-->BootSequence(BIOS)-->Bootloader--> kernel(ramdisk)-->rootfs(只读方式)-->/sbin/init
  rootfs以只读方式挂载根是因为防止在启动过程怕对文件进行修改 对系统造成损害
  在启动了init之后就会init就会开始执行一系列操作:
  用户空间的系统启动流程
  设定默认运行级别-->系统初始化脚本-->启动/关闭相应级别下的服务-->启动终端
  

  /sbin/init
  CentOS 有7个运行级别:

  0: 关机 init0
      1: 单用户模式 (sigle user) 只有root 并且无需认证   维护模式
      2: 多用户模式 (multi user) 启动网络功能.不会启动NFS(网络文件系统) 维护模式
  3: 多用户模式 (multi user) 完全功能模式 文本界面 不激活桌面系统
      4: 预留级别 目前无特别使用目的  但是习惯同3级别功能使用
      5: 多用户模式 (multi user) 完全功能模式 启动图形接口
      6: 重启模式
  init # : 级别切换

  who -r | runlevel 可以查看当前系统的运行级别

  init的配置文件在/etc/inittab中

DSC0002.png

  以id:runlevels:action:process来定义每个相应级别的对应任务

  id: 任务的标识符

  runlevels: 在哪些级别启动此任务 #,###, 可以为空表示所有级别

  action: 在什么条件下启动此任务

  process: 任务 (通常是一个程序或者是脚本)

  action有:

  wait: 等待切换至此任务所在的级别时执行一次
          respawn: 此任务终止时 就自动重新启动 (登陆界面)
          initdefault: 设定默认运行级别 此时 process省略
          sysinit: 设定系统初始化方式,此处一般指定/etc/rc.d/rc.sysinit
  id的例:
  si::sysinit:/etc/rc.d/rc.sysinit   完成系统初始化
  tty1:2345:respawn:/usr/sbin/mingetty tty1
          ...是指定级别的时候会运行mingetty程序  后面跟着的tty表示这命令是用来启动虚              拟终端的 这就是能用ctrl+alt+F1~F6 切换终端的原因
      mingetty只是用来打开终端的
      tty6:2345:respawn:/usr/sbin/mingetty tty6
      mingetty会调用login程序
  打开虚拟终端的程序除了mingetty之外 还有 getty
          tty7:5:respawn:/etc/X11/
  启动图形界面   tty系列命令会一起出现 缺了哪个tty那个tty就无法运行
  l0:0:wait:/etc/rc.d/rc 0
      l1:1:wait:/etc/rc.d/rc 1
          ....
          l6:6:wait:/etc/rc.d/rc 6
  只有切换至指定级别时运行一次 给 /etc/rc.d/rc  传递参数0~6
  这个脚本会在切换界别时执行一次 对该级别下需要启动|关闭的服务进行相应操作

  核心部分为通过下面这段代码
DSC0003.png

  在每个级别对应的 /etc/rc.d/rc#.d 目录下存放着这些文件

DSC0004.png     K开头的文件表示下次切换到该级别时需要关闭的服务

  S开头的文件表示下次切换到该级别时需要启动的服务
  上面的代码会通过读取指定开头全部文件来做相关的开启 关闭操作
  chkconfig 命令 : 管控/etc/init.d/每个服务脚本在各级别下的启动或关闭状态
      查看: chkconfig --list [name]
      添加: chkconfig --add name   file必须是在/etc/init.d 下创建的才可以添加
       能被添加的服务的脚本定义格式
      #!/bin/bash
      # chkconfig: L L L NN NN   ll表示添加后自动为on的level 第一个NN启动优先级                              第二个NN 关闭优先级 没有被添加到的level下文件一                              直都会是k开头的格式存在
   level里 - 表示所有级别一直都是关闭状态
      删除: chkconfig --del name
      chkconfig [--level LEVELS] name <on|off|reset>  开机自启
            --level LEVELS : 指定要控制的级别 默认为2345
  

  ===========================================================================================
  grub
  grub的主要作用是加载用户所选定的内核
  grub在工作时有三个步骤:
  stage1:mbr   无法加载逻辑卷  所以内核只能放在基本卷中
  stage1-5: 在mbr之后的扇区.让stage1中的bootloader能识别stage2所在的分区上的文件系统
  stage2: 这个阶段存放在磁盘分区(/boot/grub)  这个分区上还有内核文件 ramdisk等 所以      grub能加载到内核文件
  stege2 及内核通常会单独放置于一个基本分区 但是不是必须的
  功用:
  (1).提供菜单.并提供交互式接口
  e: 编辑模式 用于编辑菜单
  c: 命令模式 交互式接口
  p: 输入密码 设定了密码的情况下 要先输入密码 否则没反应
  (2).加载用户选择的内核或操作系统
  允许传递参数给内核
  可隐藏此菜单
  (3).为菜单提供了保护机制
  为编辑菜单进行认证
  为启用内核或操作系统进行认证
  grub的命令行接口:
DSC0005.png

  help: 获取帮助列表
  help keyword : 详细指定命令的帮助
  find (hd#,#) /path/to/somefile  find能查找到的文件是与启动相关的文件
  root (hd0,0) 把哪个设备分区设定为根设备
  (hd#,#) 第几块磁盘第几个分区 . 从零开始编号 hd0,0 第一个磁盘上的第一个分区
  -root是设置grub的跟设备  在root指定根设备的过程分为两种情况
  ①/boot在一个独立的分区
  root把grub所在的分区指为根 这样就能直接通过 /grub来启动了
  否则会出现一下这种情况

DSC0006.png

  此时root把/boot所在的区域指为根 就能解决这个死循环问题 grub是直接通                 过/grub来访问的

  ②/boot没有单独分区 在/分区下面 此时root就直接把真根指为根
  此时grub的访问路径为 /boot/grub

  kernel /PATH/TO/KERNEL_FILE 设定本次启动时用到的内核文件  额外还可添加许多                内核支持使用的cmdline 参数
  例如 : init=/path/to/init  selinux=0  禁用selinux
      内核文件通常被取名为vmlinuz  z表示文件是以压缩格式存放的意思
  initrd /PATH/TO/INITRAMFS_FILE:为选定的内核提供额外文件的ramdisk 必须与内核                                号完全匹配
  boot: 引导启动选定的内核
  

  配置文件: /boot/grub/grub.conf   <-- /etc/grub.conf  链接指向/boot
    配置项:
  default=# 设定默认启动的菜单项: 菜单项(title)编号从0开始
  timeout=# 指定菜单选项等待选择的时长
  splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE  指明菜单背景图片文件路径
  hiddenmenu: 是否隐藏菜单
  password [--md5] STRING 设定认证方式
  title TITLE: 定义菜单项标题   可出现多次 定义多个选项
  root (hd#,#):grub查找stage2及kernel文件所在设备分区  必须要缩进写
  kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS] : 启动的内核
  initrd /PATH/TO/INITRAMFS_FILE : 内核匹配的ramfs文件
  password [--md5] STRING : 启动选定的内核或操作系统时进行的位置
DSC0007.png

  这个设置对应于
DSC0008.png

  亲测 :不支持中文  按e进行编辑

DSC0009.png

  可以按ESC返回  按C进入编辑模式

  注: 进入救援模式是从这里进行操作 进入的 具体方法 在上文中已经说过
  

运维网声明 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-452757-1-1.html 上篇帖子: CentOS 6.5 drbd 下篇帖子: Centos6.4下zabbix的安装配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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