设为首页 收藏本站
查看: 1284|回复: 1

[经验分享] centos系列的启动流程及基础知识点

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-9-11 11:22:31 | 显示全部楼层 |阅读模式
下面介绍的是基于Intel x86架构的CentOS系列操作系统的启动流程。

1、Linux系统基础简介
(1)、Linux【系统组成】:内核+应用程序 或 内核+rootfs
(2)、Linux的【运行环境】:内核空间 --------内核进程占用CPU和内存资源总和
                            用户空间 --------应用程序占用CPU和内存资源总和
(3)、【内核】主要具有6个【功能】:进程管理、文件系统管理、内存管理、网络协议管理、驱动管理、内存功能。
  对于内核,有两种设计:单内核、微内核。单内核,是所有功能聚集于一个程序,表现为一个进程。微内核,是所有功能都有单独的子系统。对于Linux系统,采用的是单内核、模块化设计。

(4)、Linux内核的三部分:内核核心文件、内核对象文件、ramdisk
Linux的【核心文件】 ----------/boot/vmlinuz
内核【模块文件】 --------/lib/moduls/2.6.32-573.el6.x86_64/kernel
ramdisk ------------/boot/initramfs-2.6.32-573.el6.x86_64.img  (其以.img结尾)
   centos5的ramdisk 为 /boot/initrd -----------用mkinitrd 工具生成
   centos6/7的ramdisk 为 /boot/initramfs -------用dacut 工具生成(限于7使用),但也兼容mkinitrd
ramdisk 是双缓冲和双缓存。

2、CentOS6 操作系统启动流程
(1)、POST加电自检
    加电自检中,运用ROM中的BIOS程序。主板上ROM中存储的BIOS程序,被主板芯片映射入内存,从而协助CPU完成。
(2)、Bootsequence启动程序
    据BIOS找启动程序,找第一个引导程序。根据BIOS的启动顺序,一次访问各个存储设备,检查其MBR中是否有引导程序,如果有则将引导程序加载至内存,并且将硬件的管理权移交给引导程序。
(3)、引导加载器BootLoader
    一般使用MBR中的grub,应用grub加载文件系统,grub能提供一个用户菜单,命令行接口交互操作。-----------应用grub legacy。
    引导程序grub,开始加载stage1.5,以驱动根文件系统,然后从根设备加载stage2至内存,stage2的代码将会从同一磁盘分区加载kernel至内存,同时将硬件的管理权移交给kernel
(4)、加载内核kernel ----------------内核核心文件放在【基本分区】上
    对内核进行初始化,加载硬件的驱动程序。
    kernel试图挂载根文件系统,如果其内部有直接编译成内核的文件系统驱动程序,则无需其他辅助直接以只读方式挂载根文件系统即可,否则,必须依赖于ramdisk提供的临时根文件系统作为过渡,待根文件系统驱动成功以后,完成切换的工作,以只读方式挂载真正的文件系统。
(5)、加载根文件系统rootfs -----以只读的方式挂载根文件系统。
    如果没有驱动,借助于ramdisk加载驱动。
(6)、运行用户空间的第一个应用程序: /sbin/init。
  CentOS 6的Init程序为:upstart(基于事务驱动)。
  配置文件:/etc/inittab ----------仅定义默认运行级别
            /etc/init/*.conf --------rcS.conf(系统初始化脚本); rc.conf(运行级别关闭或开启系统服务的任务); start-ttys.conf(终端相关的任务); prefdm.conf(图形界面的任务)。
(7)、设定默认运行级别 ----------/etc/inittab
(8)、系统初始化 ------------/etc/init/*.conf
(9)、并行执行任务:定义ctrl+alt+del热键功能;关闭对应级别下应停止的服务,开启对应级别下应开启的服务;电源管理;dbus管理等。根据运行级别,选择打开的终端数量及位置。
(10)、登录提示符
  使用mingetty命令来调用login命令,来为用户打印登录提示符。


3、CentOS5基础
(1)、CentOS基础
  CentOS5的7个运行级别为0-6,0为关机、6为重启、1为单用户模式、2-5为多用户模式,3为多用户的命令行界面,5为多用户的图形化界面。

  查看运行级别:# who -r 或 # runlevel
  切换运行级别:# init 0-6

  CentOS5的第一个引用程序为Init,其配置文件为/etc/inittab。配置文件指明系统初始化的任务
  执行【规定的任务】,格式为:id:runlevels:action:process。 action表示启动此任务,通常为sysinit,一般是运行/etc/rc.d/rc.sysinit脚本。所有由rc脚本关闭或启动的链接文件的源文件都在/etc/rc.d/init.d,该目录创建了链接/etc/init.d。
  在init引导启动用户空间进程时,不需要写在系统服务中的内容,写在/etc/rc.d/rc.local脚本中。

(2)、chkconfig命令
  chkconfig命令 ------------查看和管理系统服务的运行状态。
    # chkconfig --list [name]
    # chkconfig --add name
    # chkconfig --del name
  修改/etc/rc.d/rc#.d/,管理系统服务。例如:# chkconfig: 2345 90 60 (其中,2345为运行级别,90为开启的优先级,60为关闭的优先级。)
  单独制定系统服务开启或关闭:# chkconfig [--level levels] name <on|off|reset>
  在init引导启动用户空间进程时,不需要写在系统服务中的内容,写在/etc/rc.d/rc.local脚本中。

(3)CentOS5操作系统的启动流程
    1)、POST加电自检
      加电自检中,运用ROM中的BIOS程序。主板上ROM中存储的BIOS程序,被主板芯片映射入内存,从而协助CPU完成。
    2)、Bootsequence启动程序
      据BIOS找启动程序,找第一个引导程序。根据BIOS的启动顺序,一次访问各个存储设备,检查其MBR中是否有引导程序,如果有则将引导程序加载至内存,并且将硬件的管理权移交给引导程序。
    3)、引导加载器BootLoader
      一般使用MBR中的grub,应用grub加载文件系统,grub能提供一个用户菜单,命令行接口交互操作。-----------应用grub legacy。
      引导程序grub,开始加载stage1.5,以驱动根文件系统,然后从根设备加载stage2至内存,stage2的代码将会从同一磁盘分区加载kernel至内存,同时将硬件的管理权移交给kernel
    4)、加载内核kernel ----------------内核核心文件放在【基本分区】上
      对内核进行初始化,加载硬件的驱动程序。
      kernel试图挂载根文件系统,如果其内部有直接编译成内核的文件系统驱动程序,则无需其他辅助直接以只读方式挂载根文件系统即可,否则,必须依赖于ramdisk提供的临时根文件系统作为过渡,待根文件系统驱动成功以后,完成切换的工作,以只读方式挂载真正的文件系统。
    5)、加载根文件系统rootfs -----以只读的方式挂载根文件系统。
      如果没有驱动,借助于ramdisk加载驱动。
    6)、运行用户空间的第一个应用程序: /sbin/init。
      kernel试图启动第一个进程:/sbin/init,而后kernel转入后台,将用户空间的进程管理任务交给init进程来完成
      配置文件:/etc/inittab  /etc/init/*.conf  /etc/rc.d/rc.sysinit  /etc/rc.d/rc
    7)、执行/sbin/init 和 /etc/inittab文件
    8)、设置默认的运行级别
    9)、执行/etc/rc.d/rc.sysinit脚本,完成系统初始化
    10)、执行/etc/rc.d/rc脚本,关闭对应级别下应停止的服务,开启对应级别下应开启的服务
    11)、设置热键,如:Ctrl+Alt+Del热键功能
    12)、UPS电源的失效与恢复
    13)、生成终端,默认启动图形界面。

4、Bootloader
grub通用统一加载器有两种,即grub legacy和grub2。
grub legacy分为三个阶段,分别是第一阶段、第二阶段和中间的1.5阶段。中间阶段的作用是,让第一阶段的引导程序识别第二阶段分区的文件系统。stage2提供了很多功能,其中最重要的是加载操作系统的内核核心文件,还可以提供菜单和交互接口、允许用户编辑菜单、命令行操作模式、具身份验证机制。

grub命令行常用的6个命令如下:
  1)、help:获得grub命令的名称列表
  2)、help GRUB_CMD:特定命令的详细帮助信息
  3)、root (hd#,#):指定grub程序的根设备(磁盘的指定分区)。hd# 为磁盘编号,# 为分区编号,# 一般是从0开始的数字,如0表示第一个分区,如 (hd0,0),表示当前计算机上的第一块磁盘的第一个分区。
  4)、find (hd#,#):指定分区中搜索文件,显示出文件所在的位置
  5)、kernel /PATH/TO/KERNEL_CORE_FILE:本次启动的内核文件的绝对路径。额外内核参数:ro root=/dev/sda3 selinux=0 init=/sbin/init quiet rhgb {1|s|S|single}
  6)、initrd /PATH/TO/initramfs-VERSION-release.img:内核所对应的ramdisk(ramfs)文件

grub的配置文件为 /boot/grub/grub.conf 和 /etc/grub.conf(链接)。配置文件里的内容如下:
   default=0 ------默认启动菜单项,title是从0开始编号
   timeout=5 ------倒计时
   splashimage=(hd0,0)/grub/splash.xpm.gz -----图片背景
   hiddenmenu ------------(是否)隐藏grub的启动菜单
   password --md5 CRYPTED_PASSWORD ------------菜单的保护密码
   title CentOS 6 (2.6.32-573.el6.x86_64) ------菜单标题,可多个title
     root (hd0,0)
     kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=UUID=5ebb0e76-bb19-4a80-9c70-0d101c0778e1 nomodeset rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
     initrd /initramfs-2.6.32-573.el6.x86_64.img
     password --md5 CRYPTED_PASSWORD

5、CentSO7 操作系统启动流程
(1)、POST加电自检
    加电自检中,运用ROM中的BIOS程序。主板上ROM中存储的BIOS程序,被主板芯片映射入内存,从而协助CPU完成。
(2)、Bootsequence启动程序
    据BIOS找启动程序,找第一个引导程序。根据BIOS的启动顺序,一次访问各个存储设备,检查其MBR中是否有引导程序,如果有则将引导程序加载至内存,并且将硬件的管理权移交给引导程序。
(3)、引导加载器BootLoader
  一般使用MBR中的grub2,应用grub2加载文件系统,grub2能提供一个用户菜单,命令行接口交互操作。
(4)、装载引导程序的配置文件:/etc/grub.d /etc/default/grub /boot/grub2/grub.cfg
(5)、加载initramfs驱动模块
(6)、加载内核kernel ----------------内核核心文件放在【基本分区】上
  对内核进行初始化,加载硬件的驱动程序。
(7)、内核以只读方式挂载rootfs,启动systemd进程。
(8)、执行initrd.*.target所有的unit,包括挂载/etc/fstab所有有效的文件系统
(9)、根切换
(10)、systemd执行默认的target


6、centos7基础
centos7的init程序采用systemd风格,systemctl命令,使用兼容以前的版本,所以也可以使用service类的命令。
Systemd具有许多centos6里面没有的四个特点:(1)、并行开启,即在系统引导的时候可以实现服务的并行开启;(2)、按需激活,即能够实现按需激活进程,即在系统启动时,需要随系统启动服务,其服务进程并没有启动,但是Ststemd为每一个此类服务进程都注册了套接字,我们称这种服务处理方式为“半激活状态”。(3)、快照功能,即能够对当前系统的用户空间的每个进程进行状态快照,以后如果进程出现问题或故障,可以迅速恢复进程状态至过去的某一时候。(4)、服务控制逻辑,systemd内部有一种基于基于依赖关系来定义的服务控制逻辑。
  # systemctl {start|stop|restart|status} name[.service] ----------管理服务
  # systemctl set-default {multi-user.target | graphical.target} ----------设置运行级别
  # systemctl get-default  -----------设置默认运行级别
  # systemctl set-default muti-user.target  ------改回命令行界面

centos7采用unit文件进行核心管理,由Systemd相关的配置文件进行各种标识、识别、和配置功能的实现。unit文件分为    系统服务类、socket、目标类、快照类等几类。这些配置文件主要保存在以下三个文件中:
    /etc/lib/systemd/system/*
    /etc/systemd/system/* ---------符号链接
    /run/systemd/system/* ---------非配置关键项
unit常见的8种类型如下:
    Service unit:扩展名为.service ----------用于定义系统服务,可省
    Target unit:扩展名为.target ------------init程序的运行级别
    Decvice unit:扩展名为.device --------内核识别的设备
    Mount unit:扩展名为.mount ------------systemd管理的文件系统的挂载点
    automount unit:扩展名为.automount --------------挂载点的位置
    Socket:扩展名为.socket -------------标识进程间通信的socket文件
    Swap unit:扩展名为.swap ------------标识swap设备
    Path unit:扩展名为.path ------------监控指定目录中的一个文件或一个子目录,没有则自动创建。
target unit模拟6中的运行级别:
    级别0:runlevel0.target,poweroff.target
    级别1:runlevel1.target,rescue.target
    级别2:runlevel2.target,multi-user.target:
    级别3:runlevel3.target,multi-user.target
    级别4:runlevel4.target,multi-user.target
systemd的四种实现方式如下:
    (1)、基于socket unit的方式实现进程激活机制
    (2)、基于device unit的方式实现设备的自动识别,挂载
    (3)、基于bus的激活机制
    (4)、基于path的激活机制

如果自行编写unit file,可以直接将文件放置于/etc/systemd/syetem目录中,也可以将其放在/usr/lib/systemd/system/目录中。unit file通常分为三段,分别为 [Unit]、[Service]、[Install],各部分解释如下:
    (1)、[Unit]:定义域Unit类型无关的通用选项。
    常用的选项语句:
      Description ------相关服务描述
      After -------服务启动前依赖的内容
      before ------------依赖此服务启动的服务
      Wants --------指明依赖关系
      Requires -----------指明依赖关系
      Conflict -----------各unit之间可能存在的冲突
      Documentation ---------------管理命令的文档所在位置
    (2)、[Service]:定义与系统服务相关的专用的选项语句。
    常用的选项语句:
      Type ----------定义影响ExecStart及相关参数的功能:simple、forking、oneshot、notify
      EnvironmentFile ------------------环境配置文件
      ExecStart ----------启动此服务所需要运行的命令或脚本
      ExecReload -------------指明重载配置文件所需要运行的命令或脚本
      ExecStop --------------指明停止此服务所需要运行的命令或脚本
      ExecStartPre -----------指明启动ExecStart所指明的命令【之前】所需要运行的命令或脚本
      ExecStartPost -----------指明启动ExecStart所指明的命令【之后】所需要运行的命令或脚本
      Restart ------------表示如果服务遇到意外而终止,则会自动重启该服务
    (3)、[Install]:服务启动或禁用时用到的专用选项语句
      WantedBy ------弱依赖关系
      RequiredBy ---------强依赖关系

systemctl命令 ---------------控制系统和服务管理
以下是centos6和centos7实现相同功能,所使用的不同的命令行,及其区别:
(1)、启动:
    centos6:service NAME start
    centos7:systemctl start NMAE[.service]
(2)、停止:
    centos6:service NAME stop
    centos7:systemctl stop NMAE[.service]
(3)、重启:
    centos6:service NAME restart
    centos7:systemctl restart NMAE[.service]
(4)、状态:
    centos6:service NAME status
    centos7:systemctl status NMAE[.service]
(5)、服务开机自启:
    centos6:chkconfig --level runlevels NAME on
    centos7:systemctl enable NAME.service
(6)、禁止服务的开机自启:
    centos6:chkconfig --level runlevels NAME off
    centos7:systemctl disable NAME.service
(7)、查看是否开机自启:
    centos6:chkconfig --list NAME
    centos7:systemctl is-enabled NAME.service
(8)、条件式重启:
    centos6:service NAME condrestart
    centos7:systemctl try-restart NAME.service
(9)、重载或重启:
    systemctl reload-or-restart NAME.service
(10)、重载或条件式重启:
    systemctl reload-or-try-restart NAME.service
(11)、查看是否激活
    systemctl is-active NAME.service
(12)、查看所有激活:
    systemctl list-units
    systemctl list-units --type=NUIT_TYPE:查看指定unit类型的处于活跃状态的服务
    systemctl list-units --all:显示所有包括处于活跃状态和处于非活跃状态的各服务
(13)、查看服务的依赖关系:
    systemctl list-dependencies NAME.service
(14)、禁止开机自启:
    systemctl mask NAME.service
(15)、取消禁止的开机自启:
    systemctl unmask NAME.service、
(16)、运行级别之间的切换:
    centos6:init #
    centos7:systemctl isolate NAME.target
(17)、查看运行级别:
    centos6:runlevel :
    centos7:systemctl list-units --type=target --all
             systemctl get-default
(18)、修改默认运行级别:
    systemctl set-default NAME.target

  # systemctl halt,systemctl poweroff ------关机
  # systemctl reboot ------重启
  # systemctl suspend ------挂起
  # systemctl hibernate --------休眠
  # systemctl hybrid-sleep ----------挂起并休眠


运维网声明 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-404351-1-1.html 上篇帖子: centos 7 在应用菜单中添加菜单项 下篇帖子: centos7.2安装五笔输入法的方法(king已测)
累计签到:30 天
连续签到:1 天
发表于 2017-9-12 08:24:42 | 显示全部楼层
啦啦

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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