Linux启动流程
CentOS6的启动流程
Systemd概述
Systemd初始化进程
Systemd目标名称
systemd服务管理

linux系统的组成:
内核+跟文件系统

内核可实现以下功能:
进程管理、内存管理、网络协议栈、文件系统、安全功能、驱动程序。
内核是linux的整个核心,确切的说内核即是linux,其他程序都是通过调度内核来实现其功能。

运行中的系统环境分层:
内核空间+用户空间
内核空间:由内核代码组成,拥有系统级别权限,可直接更改硬件;
用户空间:由各种应用程序组成,通过调用内核来完成各种复杂的任务。

进程:
1.centos6和7的启动过程
2.进程的概念及相关命令的使用
3.进程调度
4.管道

操作系统=内核+文件系统

文件系统
分区
格式化

系统引导菜单
windows
       msconfig
Linux
       grub

注意:
windows和Linux双系统的时候,默认通过GRUB来引导

CentOS6的运行级别
init运行级别

ext4的特性 搜索下

centos6的启动过程

1.开机自检
      开机后,BIOS或UEFI进行硬件检查阶段

2.MBR引导
      自检硬件无问题后,这里以BIOS为例,BIOS将会直接找硬盘的第一个分区(001扇区),找到前446字节,将MBR加载到内存中,MBR将告诉程序下一阶段去哪里
      找系统grub引导。此阶段属于grub的第一阶段。grub还有1.5阶段和2阶段。

3.GRUB引导
      grub第1.5和2阶段,信息默认存放在扇区中,如果使用grub-install生成的2阶段文件是存放在/boot分区中的。
      为了加载内核系统,不得不加载/boot分区,而加载/boot分区,需要有/boot分区的驱动,/boot分区驱动是放在/boot分区中的。这里好像进入了死循环,linux
      是如何解决的呢?就是靠放在1.5阶段中的数据,是放在第一个扇区的后续分区扇区中,具体占用多少字节,不太清楚,只知道1.5阶段和2阶段总共27个扇区
stage1.5:
      mbr之后的扇区,识别stage2所在分区上的文件系统
stage2:
      开机启动的时候看到的grub选项、信息,还有修改grub背景等功能都是stage2提供的,stage2会去读入/boot/grub/grub.conf或者menu.lst等配置文件

4.读取grub.conf文件
      读取grub.conf文件以确定内核启动的参数,准备启动内核

5.启动内核
      加载内核,核心开始压缩,启动一些最核心的程序。
      因为为了让内核足够轻小,硬件驱动并没有放在内核文件里面,我们可以看到内核很小,才4M左右,我们可以想象windows中的驱动,安装系统时候还需要
      使用驱动软件下载好长时间
      因此需要使用/initramfs-2.6.32-696.el6x86_64.img来驱动硬件

[root@localhost ~]# ll -h /boot/vmlinuz-3.10.0-1062.el7.x86_64 #这是centos7的 6的4M左右
-rwxr-xr-x. 1 root root 6.5M 8月 8 02:12 /boot/vmlinuz-3.10.0-1062.el7.x86_64

6.加载伪文件系统
      内核已经启动起来了,在调用ramdisk文件,尝试驱动所有的硬件设备,到这一步,内核起来了,所有驱动也装上了,因此后面的启动可以交给程序了。

7.启动init进程
(1)inittab文件里面定义了系统默认运行级别,这一步做了一些工作如下:
a)初始运行级别(RUN LEVEL)
     0 关机
     1 单用户
     2 字符多用户(无network)
     3 完全字符多用户
     4 未使用
     5 图形化完全多用户
     6 重启
b)系统初始化脚本
c)对应运行级别的脚本目录
d)定义UPS电源终端/恢复脚本
e)在虚拟控制台生成getty,以生成终端
f)在运行级别5初始化x

(2)执行/etc/rc.d/rc.sysinit程序
系统初始化一些脚本,主要完成以下工作
a)设置主机名
b)设置欢迎信息
c)激活udev和selinux可以在grub.conf中,kernel行添加selinux=0以关闭selinux
d)挂载/etc/fstab文件中定义的文件系统
e)检测跟文件系统,并以读写方式重新挂载跟文件系统
f)设置系统时钟
g)激活swap设备
h)根据/etc/sysctl.conf文件设置内核参数
i)激活lvm及software raid设备
j)加载额外设备的驱动程序
k)清理操作

(3)/etc/rc#.d/文件(各种服务)
里面定义的是各种服务的启动脚本,可以ls查看,s开头代表开机启动的服务,k开头的是关机要执行的任务#代表数字,一个数字代表一个运行级别,共7个运行级别

(4)/etc/rc.d/rc.local文件
这里面可以自定义开机启动的命令

8.执行/bin/login
执行/bin/login程序,等待用户登录

了解centos系统启动流程对我们有什么帮助
在实际工作中,centos主机难免会出现无法启动或启动异常,而在了解centos系统启动流程后,可以针对问题对症下药,而且通过学习centos
系统启动流程后,可掌握部分的linux工作机制,为以后的解决linux故障打下扎实的基础

systmd概述

历史上,linux的启动一直采用init进程

这种方法有两个缺点:
1.启动时间长,init进程是串行启动,只有一个进程启动完,才会启动下一个进程
2.启动脚本复杂,init进程只是执行启动脚本,不管其他事情,脚本需要自己处理各种情况,这往往使得脚本变得很长

Systemd就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。

根据Linux惯例,字母d是守护进程(daemon)的缩写,Systemd这个名字的含义,就是它要守护整个系统。
使用了Systemd,就不需要再用init了。Systemd取代了initd,成为系统的第一个进程(PID等于1),其他进程都是它的子进程。
Systemd的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。

Systemd初始化进程原理
centOS7/RHEl7启动过程
1.BIOS开机自检
2.进入启动菜单,加载系统内核
3.内核进行初始化
4.启动初始进程

初始化进程作为LInux系统的第一个进程,它需要完成Linux系统中相关的初始化工作,为用户提供合适的工作环境。RHEL/CentOS7系统已经替换掉了
熟悉的初始化进程System V init正式采用全新的systemd初始化进程服务。systemd初始化进程采用了并发启动机制,开机速度得到了不小的提升。

Systemd目标名称

RHEL/CentOS7已经没有了"运行级别"这个概念,linux系统启动时进行大量的初始化工作,比如挂载文件系统和交换分区、启动各类进程服务等,这些
可以看做一个一个的单元Unit,systemd用目标target代替了system V init中运行级别的概念,两者区别如下:
System V init运行级别    system目标名称                                    作用
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
5                                     runlevel5.target,graphical.target         多用户的图形界面
6                                     runlevel6.target,reboot.target              重启
emergency                     emergency.target                                   紧急(救援)模式

RHEL/CentOS7系统目标管理
//查看运行级别
[root@localhost ~]# systemctl get-default
multi-user.target

//查看系统有哪些target
[root@localhost ~]# ls /lib/systemd/system/*.target
/lib/systemd/system/basic.target /lib/systemd/system/poweroff.target
/lib/systemd/system/bluetooth.target /lib/systemd/system/printer.target
/lib/systemd/system/cryptsetup-pre.target /lib/systemd/system/reboot.target
/lib/systemd/system/cryptsetup.target /lib/systemd/system/remote-cryptsetup.target
--

//修改默认启动运行级别(永久生效)
[root@localhost ~]# systemctl set-default TARGET.target

systemd服务管理
由于之前长期使用RHEL/CentOS6系统,已经习惯使用service chkconfig等命令来管理系统服务,但在REHL/CentOS7系统中是使用systemctl来管理服务的。
如下是REHL/centOS6系统中System V init命令与REHL/centOS7系统中systemctl命令的对比,后续课程中会经常用到它们。
systemctl管理服务的启动、重启、停止、重载、查看状态等常用指令。

System V init(6系统)             systemctl命令(7系统)                                 作用
service NAME start               systemctl start NAME.service                    启动服务
service NAME stop               systemctl stop NAME.service                    停止服务
service NAME restart            systemctl restart NAME.service                重启服务
service NAME reload            systemctl reload NAME.service                重新加载配置(不终止服务)
service NAME status            systemctl status NAME.service                 查看服务运行状态
                                             systemctl is-active NAME.service              查看服务是否在运行中
                                             systemctl mask NAME.service                   禁止服务运行
                                             systemctl unmask NAME.service               取消禁止服务运行

systemctl设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令。
System V init(6系统)                  systemctl命令(7系统)                         作用
chkconfig NAME on                   systemctl enable NAME.service        开机自动启动
chkconfig NAME off                   systemctl disable NAME.service       开机不自动启动
chkconfig-list                              systemctl list-unit-files                       查看各个级别下服务的启动与禁用
chkconfig-list NAME                  systemctl is-enabled NAME.service  查看特定服务是否为开机启动
chkconfig-add NAME                 systemctl daemon-reload                 创建新服务文件或变更设置

systemctl服务状态说明
服务状态                状态说明
loaded                    服务单元的配置文件已经被处理
active(running)       服务的一个或多个进程在运行中
active(exited)          一次性运行的服务成功被执行并退出(服务运行后完成任务,相关进程会自动退出)
active(waiting)       服务已经运行但在等待某个事件
inactive                  服务没有在运行
enabled                 服务设定为开机运行
disabled                 服务设定为开机不运行
static                      服务不能被设定开机启动,但可以由其他服务启动该服务

CentOS6与CentOS7的启动过程的更多相关文章

  1. CentOS7 Tomcat 启动过程很慢,JVM上的随机数与熵池策略

    1. CentOS7 Tomcat 启动过程很慢 在centos启动官方的tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的: <co ...

  2. CentOS6.x和CentOS7.X启动系统不显示进度条设置方法

    [root@ok Desktop]# vi /boot/grub/grub.conf # grub.conf generated by anaconda # # Note that you do no ...

  3. centos7启动过程及systemd祥细说明

    开机启过程 POST->BOOT SEQUENCE-> BOOTLOADER->KERNEL + INITRAMFS(INITRD)->ROOTFS->/sbin/ini ...

  4. centos7启动过程及systemd详细说明

    开机启过程 POST->BOOT SEQUENCE-> BOOTLOADER->KERNEL + INITRAMFS(INITRD)->ROOTFS->/sbin/ini ...

  5. centos6服务启动脚本及开机启动过程

    centos6服务启动脚本 centos6的服务启动脚本都放在/etc/rc.d/init.d/下,/etc/init.d/是/etc/rc.d/init.d/的软链接: centos6的服务启动脚本 ...

  6. CentOS7中Tomcat的安装和配置以及启动配置tomcat。启动过程中的易错点

    Tomcat运行需要设置JRE目录,全局变量配置,请参见: Linux下JDK的安装和配置   当然也可以直接修改Tomcat的配置文件,请自行度娘   1.下载并解压 请先去官网找到需要下载的tom ...

  7. centos7的启动流程

    CentOS7的启动流程 uefi或BIOS初始化,开始开机自检 加载mbr到内存 GRUB的阶段 加载内核和inintamfs模块 kernel内核开始初始化,用systemd来代替centos6以 ...

  8. [svc]linux启动过程及级别

    Unix目录结构的来历 Linux 的启动流程 Linux 引导过程内幕 嵌入式系统 Boot Loader 技术内幕 centos6使用chkconfig治理服务和其原理 centos7的服务治理- ...

  9. centos6之前版本的启动流程

    centos6 之前的系统启动: linux启动流程: 1)加电自检 2)读取MBR,引导加载程序grub,完成grub的三个阶段. 3)加载系统内核kernel,执行系统初始化信息. 4)启动用户空 ...

随机推荐

  1. 使用svn时出现Can't switch /XXX/XXX because it is not the repository yet

    问题描述 出现的问题如题目所示. 翻译一下:不能选择这个目录,原因是这个目录还不是svn仓库. 解决办法 这个问题出现的原因是你将项目中的.svn文件夹删除了,一般情况你是可以通过撤销将文件恢复的.如 ...

  2. 19 01 08 javascript 初学

    变量 JavaScript 是一种弱类型语言,javascript的变量类型由它的值来决定. 定义变量需要用关键字 'var' 变量类型 5种基本数据类型:1.number 数字类型2.string ...

  3. 计算机网络(1): http原理和uuid

    http 的请求报文和响应报文格式 请求报文有哪些方法 一个典型的http报文 状态码有哪几种 以及短语是用来解释状态码的 接口测试中,需要使用到UUID,用来生成唯一ID. 1.什么是UUID UU ...

  4. 通过Android的API对Sqlite数据库进行操作

    一.增删改查 增 改 查 删 这是删除之前 删除三条 Dao.java package com.example.databasedemo; import android.content.Content ...

  5. nodejs(9)使用arttemplate渲染动态页面

    使用arttemplate渲染动态页面 安装 两个包 npm i art-template express-art-template -S 自定义一个模板引擎 app.engine('自定义模板引擎的 ...

  6. 步进电机加减速S曲线算法

    一.Sigmoid 函数 1.1 Sigmoid函数原型 1.2 sigmoid函数波形: 由图形可看出在-10时已经接近于0,一般取值区间在[-5,5]. 1.3 sigmoid函数的导数 转载CS ...

  7. 第一次 C语言课程设计

    小学生测验 最近比较忙,就拿前几天做的课设项目水一水. 内容 面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答. 功能要求: (1)电脑随机出10道题,每题10分,程序结束时显示学 ...

  8. Django的URL路由基础

    一.概述 URL路由在Django项目中的体现就是urls.py文件,这个文件可以有很多个,但绝对不会在同一目录下.实际上Django提倡项目有个根urls.py,各app下分别有自己的一个urls. ...

  9. CentOS6.x/6.5/6.4/6.3/6.2/7.x 64位安装php5.2(使用YUM自动安装)

    默认情况下,CentOS6 64 bit 已经早已不支持php5.2.x ,但是某些php程序还需要zend optimizer支持,怎么办呢?目前大部分的yum repos 都已经不支持直接安装ph ...

  10. BitcoinCore JSONRPC Java使用,创建账号,获取余额,转账等等...

    1.首先要安装好bitcoin core服务 上一篇有怎么安装 下面代码支持多钱包多地址动态调用,但让我没用使用多地址,根据自己的需要然后封装方法就好 2.引入jar  JavaBitcoinRpcC ...