一,Linux 操作系统引导过程
1,引导过程总览
开机引导启动步骤
- 1,开机自检(BIOS)
- 2,MBR引导
- 3,GRUB菜单
- 4,加载内核 (Kernel)
- 5, init 进程初始化
启动详细流程:
当按下电源按键后计算机硬件会读取BIOS或UEFI BIOS来加载硬件信息及进行硬件系统的自我测试,
之后系统会主动去读第一个可启动的设备(BIOS设定),此时就可以读入启动引导程序了,启动引
导程序可以指定使用哪个内核文件来启动,并实际加载内核到内存当中解压缩与执行。此时内核就能
够开始在内存中活动,并检测所有硬件信息与加载适当的驱动程序来使整台主机开始运行,等到内核
检测硬件与加载驱动程序完毕后,操作系统就启动好了。
流程:
- 1.加载BIOS的硬件信息与进行自我检测,根据BIOS设置来取得第一个可启动的设备
- 2.读取并执行第一个启动设备内MBR的启动引导程序(可以是grub2,也可以是spfdisk)
- 3.根据启动引导程序的设置加载kernel,kernel会开始检测硬件与加载驱动程序
- 4.在硬件驱动成功后,kernel会主动调用systemd程序,并以default.target流程启动
systemd执行sysinit.target初始化系统及basic.target准备操作系统
systemd启动multi-user.target下的本机与服务器服务
systemd执行multi-user.target下的/etc/rc.d/rc.local文件
systemd执行multi-user.target下的getty.target及登录服务
systemd执行graphical需要的服务 - 几个专有名称解释:
- BIOS:不论是传统BIOS还是UEFI BIOS都会被简称为BIOS
- MBR:虽然分区表有传统MBR及新式GPT,GPT有保留一块兼容MBR的区块,因此,都简称MBR
- 关于内核文件:
内核文件存放路径:/boot/vmlinuz
2, init 进程
- 由LInux内核加载运行 /sbin/init程序
- init 进程是系统中第一个进程
- init 进程的PID(进程标记)号永远为1
SYStemd 进程 (init下面的一个进程)
- SYStemd是linux操作系统的一种init软件
- centos7中采用全新的systemd启动方式,取代传统的sysvinit
- centos7中运行的第一个init进程是/lib/systemd/systemd
以下为systemd的几种单元类型
单元类型 | 扩展名 | 说明 |
---|---|---|
Service | .service | 描述一个系统服务 |
Socket | .socket | 描述一个进程间通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
SWAP | .swap | 描述一个内存交换设备或交换文件 |
Path | .path | 描述一个文件系统中文件或目录 |
Timer | .timer | 描述一个定时器(用于实现类似cron的调度任务) |
snapshot | .snapshot | 用于保存一个systemd的状态 |
scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
Slice | .slice | 描述居于cgroup的一组通过层次组织的管理系统进程 |
target | .target | 描述一组systemd的单元 |
Automount | .automount | 描述一个文件系统的自动挂载点 |
运行级别对应的systemd目标(重要掌握)
运行级别 | systemd的target | 说明 |
---|---|---|
0 | target | 关机状态,使用该级别时将会关闭主机 |
1 | rescue.target | 单用户模式,不需要密码验证即可登录系统,多用于系统维护 |
2 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
4 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
二,排除启动类故障
1,修复MBR扇区故障
故障原因
- 病毒,木马等造成的破坏
- 不正确的分区操作,磁盘读写误操作
故障现象
- 找不到引导程序,启动中断
- 无法加载操作系统,开机后黑屏
解决思路
- 应提前做好备份文件
- 以安装光盘引导进入急救模式
- 从备份文件中恢复
模拟MBR扇区破坏修复实验
实验前环境条件 :加一块硬盘做实验
查看磁盘
fdisk -l //看是否有sdb
mkfs -t ext4 /dev/sdb //格式化sdb
挂载mount /dev/sdb /opt
备份MBR扇区数据
dd if=/dev/sda of=/opt/mbr.bar bs=512 count=1
模拟MBR扇区故障
dd if=/dev/zero of=/dev/sda bs=512 count=1
重启后观察系统
operating system not found //出现此现象就是有故障MBR已经挂了
进bios系统将光盘设为优先启动
光盘引导,进入急救模式,从备份文件中恢复MBR扇区
步骤如下
1,装入光盘,在光盘引导界面选择 toubleshooting:
2,进入troubleshooting菜单 选择 rescue a centos system
3,进入引导可以按回车键,或者等待 按1 在按回车键进入sh-4.2#
4,急救模式下sdb的挂载
mkdir /sdd
mount /dev/sdb /sdd
cd /sdd 查询下该备份文件是否存在
5,dd if=/sdd/mbr.bak of=/dev/sda count=1 bs=512
6, 启reboot进入系统测试是否正常
2, 修复GRUB引导故障
故障原因
- MBR中的GRUB引导程序遭到破坏
- grub.conf 文件丢失,引导配置有误
故障现象
- 系统引导停滞,显示"grub>"提示符
解决思路
- 尝试手动输入引导命令
- 进入急救模式,重写或者从备份中恢复grub.conf
- 向MNR扇区中重建grub程序
GRUB修复实例
在虚拟机上进行如下操作来模拟grub破坏:
cd /boot/grub2 //进入grub2
rm -rf grub.cfg // 删除grub.cfg模拟故障
重启
######出现故障,如下####
grub>
#####以上为出现故障页面
将光盘设置为开机优先启动之后进入急救模式进行grub构建修复
1,引导急救模式,加载系统镜像
chroot /mnt/sysimage/
2,重新建立加载sda分区
grub2-install /dev/sda
3,重新构建grub菜单配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
4,退出bash环境
exit
5,重启
reboot
3 , 忘记root密码
1,设置光盘为优先启动
2,进入紧急模式
sh-4.2# chroot /mnt/sysimage 加载系统镜像
bash-4.2# passwd root
new:
retry:
exit //退出bash环境
reboot //重启
三,服务控制及切换运行级别
1,系统服务控制
格式 : systemctl 控制类型 服务名称
2,控制类型
- start: 启动
- stop :停止
- restart : 重新启动 (服务中断)
- reload :重新加载 (服务不会中断)
- status :查看服务状态
- enable : 开机自启动
- disable :开机禁用
3,运行级别
- 查看系统默认的运行级别 :
systemctl get-default
- 不重启切换当前运行级别:
systemctl isolate multi-user.target
- 查看当前运行级别:
systemctl isolate multi-user.targe
t 完了之后runlevel
上图所代表的5是前一个运行级别,3是当前运行级别
- 查看当前运行级别以及上一运行级别
who -r
(run-level 当前运行级别 last: 上一个运行级别) - 修改默认运行级别(改完之后重启才能生效)
systemctl set-default multi-user(graphical). target
或者
rm -f /etc/systemd/system/default.target
ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
reboot
两条命令功能相同
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target --> /usr/lib/systemd/system/multi-user,target.
- 查看哪单元服务依赖图形化界面
systemctl list-dependencies
- 看哪些单元服务依赖字符界面·
systemctl list-dependencies multi-user.target
- 查看一个运行级别下面所有的unit
temctl list-dependencies multi-user.target
说明:各个service前的黑色圆点,如果是绿色,表示正在运行中,active如果是黑色,表示inactive - 查看哪些target引用了当前运行级别的target
systemctl list-dependencies multi-user.target --reverse
说明 multi-user.target被graphical.target所引用 - 引出系统中包含的所有target
systemctl list-unit -files --type=target
- 关闭cpu,但未关闭电源
systemctl halt
系统服务的启动和控制
- 查看系统服务的启动状态
systemctl is-enabled 服务名称
- 设置系统服务的启动状态
systemctl enable/disable 服务名称
- 列出所有服务是active
systemctl list-units
- 列出所有unit 包括 inactive
systemctl list-units --all
- 列出所有未运行的unit 即inactive状态
systemctl list-units --all --state=inactive
- 引出当前激活状态(active)的所有服务单元
systemctl list-units --type=service
- 列出所有状态包括active 和 inactive
system list-units --type=service --all
- 查看某一服务的状态
systemctl status 服务名称
以上命令针对回文state 说明
static : 该配置文件没有【install】部分(无法执行)只能归为其他配置文件的依靠
masked : 该配置文件被禁止建立启动连接
enabled :已建立自启动连接
disabled : 没建立自启动连接 - 引出一个服务所依赖的单元
systemctl list-dependencies 服务名称
- 重新加载所有修改过的unit文件
systemctl daemon-reload
- 显示指定的unit的所有底层参数
systemctl show 服务名称
也可看其中一项;
systemctl show -p PIDFILE openresty.service
PIDFile=/usr/local/openresty/nginx/logs/nginx.pid - systemctl 与关机/重启相关命令
- 1,关闭cpu,但未关闭电源
systemctl halt
- 2, 关闭电源 (建议使用这个,这个会真正关闭电源)
systemctl poweroff
- 3,重启机器
systemctl reboot
- 1,关闭cpu,但未关闭电源
四,优化启动过程
优化启动过程
- ntsysv 工具
- 提供一个交互式,可视化窗口
- 可以在字符终端运行
- 便于集中管理多个服务
- systemctl工具
- 不提供交互式,可视化窗口
- 管理单个服务效率更高
- ntsysv 系统服务管理工具
- ntsysv :图形化生效
- ntsysv --level 级别列表 ,图形化,字符都生效