Linux系统的组成:
内核 + 根文件系统
内核可实现以下功能:
进程管理、内存管理、网络协议栈、文件系统、安全功能、驱动程序。
内核是linux的整个核心,确切的说内核即是Linux,其他程序都是通过调度内核来实现其功 能。
运行中的系统环境分层:
内核空间 + 用户空间
内核空间: 由内核代码组成,拥有系统级别权限,可直接更改硬件;
用户空间: 由各种应用程序组成,通过调用内核来完成各种复杂的任务。
CentOS6的启动流程
1.开机自检
这个过程是开机后,BIOS或UEFI进行硬件检查的阶段
2.MBR引导
自检硬件没有问题时候,这里以BIOS为例,BIOS将会直接去找硬盘的第一个扇区,找 到前446字节,将MBR加载到内存中,MBR将告诉程序下一阶段去哪里找系统grub引 导。此阶段属于grub的第一阶段。grub还有1.5阶段和2阶段。
3.GRUB引导
grub第1.5和2阶段,信息默认存放在扇区中,如果使用grubinstall生成的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中的驱动,安装系统时候还需要使用驱动软件下 载好长时间呢
因此需要使用/initramfs2.6.32696.el6.x86_64.img来驱动硬件
[root@oldboy ~]# ll -h /boot/vmlinuz-2.6.32-696.el6.x86_64 -r-xr-xr-x. 1 root root 4.1M Jul 8 21:06 /boot/vmlinuz-2.6.32-696.el6.x8 6_64
6.加载伪文件系统(ramdisk)
内核已将启动起来了,再调用ramdisk文件,尝试驱动所有的硬件设备,到这一步,内 核起来了,所有驱动也装上了,因此后面的启动就可以交给程序了
7.启动init进程
(1)读取/etc/inittab文件
inittab文件里面定义了系统默认运行级别,这一步做了一些工作如下:
a)初始运行级别(RUN LEVEL)
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故障打下扎实的基础。
Systemd初始化进程
CentOS7/RHEL7 系统的开机启动过程如下:
1.首先BIOS开机自检
2.然后进入启动菜单,加载系统内核
3.然后内核进行初始化
4.后启动初始化进程
初始化进程作为Linux系统的第一个进程,它需要完成Linux系统中相关的初始化工作,为用户提供 合适的工作环境。 RHEL/CentOS 7 系统已经替换掉了熟悉的初始化进程服务System V init正式采用 全新的systemd初始化进程服务。如果您之前学习的是 RHEL/CentOS 6或7 系统,可能会不习惯。 systemd初始化进程服务采用了并发启动机制,开机速度得到了不小的提升。
CentOS6系统, 管理员可以使用如下指令来管理服务器的启动与停止
//关机相关命令 shutdown -h now //立即关机,常用 init 0 //切换系统关机级别,容易理解 //重启相关命令 reboot //重启命令,常用 init 6 //切换系统重启级别,容易理解
CentOS7系统, 管理员可以使用systemctl命令来管理服务器启动与停止
//关机相关命令 systemctl poweroff //立即关机,常用 //重启相关命令 systemctl reboot //重启命令,常用
Systemd目标名称
无论如何, RHEL/CentOS 7 已经没有了“运行级别”这个概念,Linux系统在启动时要进行大量的初始 化工作,比如挂载文件系统和交换分区、启动各类进程服务等,这些都可以看作是一个一个的单元 Unit, systemd用目标target代替了 System V init 中运行级别的概念,这两者的区别如下所示
System V init运行级别 | systemd目标名称 | 作用 |
0 | runlevel0.target, poweroff.target | 关机 |
1 | runlevel1.target, rescue.target | 单用户模式 |
2 | runlevel2.target, multiuser.target | |
3 | runlevel3.target, multiuser.target | 多用户的文本界面 |
4 | runlevel4.target, multiuser.target | |
5 | runlevel5.target, graphical.target | 多用户的图形界面 |
6 | runlevel6.target, reboot.target | 重启 |
emergency | emergency.target | 救援模式 |
shutdown | systemctl | 救援模式 |
reboot | emergency.target | 救援模式 |
powef | emergency.target | 救援模式 |
RHEL/CentOS6 系统运行级别管理
//查看运行级别
[root@student ~]# runlevel
N 3 //如果N是其他数字,代表上一次运行级别
//切换运行级别 [root@student ~]# init 3
//永久修改配置文件
[root@student ~]# /etc/inittab
RHEL/CentOS7 系统目标管理
//查看系统默认启动运行级别
[root@student ~]# systemctl get-default
//修改默认启动运行级别(永久生效)
[root@student ~]# systemctl set-default TARGET.target
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
systemd服务管理
由于之前长期使用 RHEL/CentOS 6 系统, 已经习惯使用 service chkconfig 等命令来管理系统服 务,但在 RHEL/CentOS 7 系统中是使用systemctl命令来管理服务的。
如下是 RHEL/CentOS 6 系统中 System V init 命令与 RHEL/CentOS 7 系统中systemctl命令的对 比,后续课程中会经常用到它们。
systemctl管理服务的启动、重启、停止、重载、查看状态等常用命令
System V init(6系统) | systemctl命令(7系统) 作用 | |
service crond start | systemctl start crond.service | 启动服务 |
service crond stop | systemctl stop crond.service | 停止服务 |
service crond restart | systemctl restart crond.service | 重启服务 |
service crond reload | systemctl reload crond.service | 重新加载配置(不终止服务) |
service crond status | systemctl status crond.servre | 查看服务运行状态 |
systemctl is-active sshd.service | 查看服务是否在运行中 | |
systemctl mask crond.servre | 禁止服务运行 | |
systemctl unmask crond.servre | 取消禁止服务运行 |
systemctl设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令
System V init(6系 统) | systemctl命令(7系统) | 作用 |
chkconfig crond on | systemctl enable crond.service | 开机自动启动 |
chkconfig crond off | systemctl disable crond.service | 开机不自动启动 |
chkconfig –list | systemctl list-unit-files | 查看各个级别下服务的启动与禁用 |
chkconfig –list crond | systemctl is-enabled crond.service | 查看特定服务是否为开机自启动 |
chkconfig–add crond | systemctl daemon-reload | 创建新服务文件或者变更设置 |
systemctl服务状态说明
服务状态 | 状态说明 |
loaded | 服务单元的配置文件已经被处理 |
active(running) | 服务的一个或多个进程在运行中 |
active(exited) | 一次性运行的服务成功被执行并退出(服务运行后完成任务,相关进程会自动退 出) |
active(waiting) | 服务已经运行但在等待某个事件 |
inactive | 服务没有在运行 |
enabled | 服务设定为开机运行 |
disabled | 服务设定为开机不运行 |
static | 服务不能被设定开机启动,但可以由其他服务启动该服务 |