笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述Linux引导过程和服务(解决开机时的小问题)相关的知识,希望能为你提供帮助。
@[TOC]
一、linux操作系统引导过程
1.引导过程总览
文章图片
1.开机自检
服务器主机开机以后,将根据主板Bios中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
==总结:检测出第一个能够引导系统的设备,比如硬盘或者光驱==
2.MBR引导
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR (主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单(如GRUB) 。
==总结:运行放在MBR扇区里的启动GRUB引导程序==
3.GRUB菜单
对于Linux操作系统来说,GRUB (统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。
CentOS 7采用的是GRUB2启动引导器。
==总结:GRUB引导程序通过读取GRUB配置文件 /boot/grub2/grub.cfg ,来获取内核和镜像文件系统的设置和路径位置==
文章图片
文章图片
文章图片
文章图片
4、加载Linux内核
Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。
CentOS 7系统中,默认的内核文件位于" /boot/vmlinuz-3.10.0-514.e17.x86_64"
==总结:把内核和镜像文件系统加载到内存中==
5、init进程初始化
为了完成进一步的系统引导过程,Linux内核首先将系统中的" /sbin/init" 程序加载到内存中运行(运行中的程序称为进程),init进程负责完成整个系统的初始化,最后等待用户进行登录。
==总结:加载硬件驱动程序,内核把init进程加载到内存中运行==
2.系统初始化进程 1.init进程
由Linux内核加载运行 **/sbin/init程序
init进程是系统中第一个进程,是所有进程的父进程
init进程的PID (进程标记)号永远为1
2.Systemd
Systemd是Linux操作系统的一种init软件
CentOS7中采用全新的Systemd启动方式,取代传统的SysVinit
CentOS7中运行的第一个init进程是/lib/systemd/systemd
3.init进程与Systemd
==传统SysVinit依赖于 串行执行Shell脚本启动服务,导致效率低下,系统启动速度较慢
systemd能够将更多的服务进程 并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度。==
文章图片
文章图片
3.Systemd单元类型
单元类型 | 扩展名 | 说明 |
---|---|---|
==service== | ==.service== | ==描述一个系统服务== |
socket | .socket | 描述一个进程间通信的套接字 |
device | .device | 描述一个内核识别的设备文件 |
mount | .mount | 描述一个文件系统的挂载点 |
automount | .automount | 描述一个文件系统的自动挂载点 |
swap | .swap | 描述一个内存交换设备或交换文件 |
path | .path | 描述一个文件系统中的文件或目录 |
timer | .timer | 描述一个定时器(用于实现类似cron的调度任务) |
snapshot | .snapshot | 用于保存一个systemd的状态 |
scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
slice | .slice | 描述居于cgroup的一组通过层次组织的管理系统进程 |
==target== | ==.target== | ==描述一组systemd的单元== |
==用init+运行级别即可,比systemctl .target方便== |
运行级别 | 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扇区类故障 1.1、故障原因
- 病毒、木马等造成的破坏
- 不正确的分区操作、磁盘读写误操作
1.2、故障现象
- 找不到引导程序,启动中断
- 无法加载操作系统,开机后黑屏
1.3、解决思路
- 应提前做好备份文件
- 以安装光盘引导进入急救模式
- 从备份文件中恢复
1.4、问题解决示例
创建新硬盘,并格式化
文章图片
文章图片
文章图片
文章图片
备份MBR (扇区磁盘到其他磁盘)
文章图片
复制前512个字节
复制到新硬盘挂载的目录中去,提取1次
文章图片
模拟破坏MBR引导区
文章图片
重启,并进入急救模式
文章图片
文章图片
从备份文件中恢复MBR扇区数据
文章图片
恢复成功,进入界面
文章图片
- MBR中的GRUB引导程序遭到破坏
- grub.conf文件丢失、引导配置有误
2.2、故障现象
- 系统引导停滞,显示‘grub>
’提示符
2.3、解决思路
- 尝试手动输入引导命令
- 进入急救模式,重写或者从备份中恢复grub.conf
- 向MBR扇区中重建grub程序
2.4、解决方法一:尝试手动输入引导命令
查看grub.cfg文件内的内核名称等信息
文章图片
文章图片
模拟故障
文章图片
手动输入引导命令过于繁琐不建议使用,所以只简要写出操作命令
insmod xfs#加载指定的模块到内核 linux16 /vmlinuz-.......#内核的名字及位置等信息 initrd16 /....#镜像系统文件 boot#引导boot
2.5、解决方案二:进入急救模式,恢复GRUB引导程序
增加新硬盘,进行分区,格式化分区,并挂载到目录
文章图片
文章图片
文章图片
文章图片
文章图片
备份主引导记录并模拟故障
文章图片
进入急救模式,并恢复引导程序==进入急救模式的方法上文有介绍==
文章图片
恢复成功
文章图片
方法三、进入急救模式,重建GRUB菜单配置文件
删除grub.cfg文件以模拟故障
文章图片
进入急救模式下进行重建==进入急救模式方法:==
- 读条的时候按esc进入boot
- 选择cdroom
- 进入光盘那个界面
- 进入急救模式
文章图片
恢复成功
文章图片
chroot /mnt/sysimage#进入急救模式,加载系统镜像,切换到系统根环境
passwd root#重设root用户密码
三、系统服务控制 1.CentOS7的systemctl命令 1.命令格式
文章图片
2.常用控制类型
文章图片
文章图片
文章图片
- ==restart:重新启动,在关闭时无法使用因为重启是先关闭在启用==
- ==shell在启动时会读取配置文件然后根据配置文件启动,所以启动后设置配置参数,不会影响现有操作,重启才生效生效。很多时候不能重启服务,就可以用 reload:重新加载,实现服务不中断,平滑的切换==
2.CentOS5、6中的servic命令 1.命令格式
文章图片
2.示例
用service命令重启网卡
文章图片
3.注意事项
- 需要在、etc/init.d中有脚本文件
文章图片
- systemctl和service的 格式不一样
文章图片
- ==centos6中必须在 etc/init.d/文件中有脚本才能使用servise==
- ==放置在 /etc/init.d/中的脚本systemctl和service都能使用==
文章图片
文章图片
2.systemctrl工具 查看默认运行级别(模式)
文章图片
文章图片
文章图片
四、设置运行级别 1.临时切换运行级别
命令 | 说明 |
---|---|
init命令 | init命令参数是运行级别所对应的数字 |
systemctrl工具 | systemctrl的命令参数是具体的target |
文章图片
文章图片
2.2方法二
手动做软连接
文章图片
文章图片
文章图片
实例:
文章图片
五、优化启动过程 1、工具 1.ntsysv 工具
- 提供一个交互式、可视化窗口
- 可以在字符终端中运行(显示图形)
- 便于集中管理多个服务
- 用于控制服务==是否开机时启动==
- 不提供交互式、可视化窗口
- 管理单个服务效率更高
- 用于控制服务==是否开机时启动==
2、管理系统服务自启动
1.ntsysv工具
文章图片
文章图片
- 上下键控制上下行
- 空格键选定
- tab键切换光标
- ==可批量设置多个服务开机自启动的关闭或开启==
2.systemctl工具
1.查看系统服务的开机自启动状态
文章图片
文章图片
文章图片
文章图片
3.chkconfig(只能对放置在 /etc/init.d/中的服务进行管理)
以前是在centOS6和5用的,但是centos7也能用,用的次数不少
文章图片
用chkconfig --add 添加服务后
用chkconfig --list 查看
【Linux引导过程和服务(解决开机时的小问题)】用chkconfig--levelon/off管理
推荐阅读
- k8s命令大全
- #yyds干货盘点#阿里二面面试题(请你说一下对受检异常和非受检异常的理解())
- SpringCloud升级之路2020.0.x版-38. 实现自定义 WebClient
- ubuntu18.04.6lts的系统安装
- #yyds干货盘点#HBase 基础及核心架构解析
- Flutter 安卓app web网页电脑桌面软件
- #yyds干货盘点#两个排序数组的中位数,“最”有技术含量的解法
- 知识图谱的最新进展关键技术和挑战
- #yyds干货盘点#dart系列之:dart中的异步编程