操作系统引导过程 与 服务进程的控制
一,linux操作引导过程
bios加电自检? ? ? ??mbr? ??gurb? ? ?加载内核文件? ? 启动第一个进程
(一)bios?加电自检
检测硬件是否正常,然后根据bios中的启动项设置,去找内核文件
硬件启动POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘等硬件情况的检测
主板的ROM:BIOS,Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自举程序等
问:boot 开机启动顺序:你可以把内核文件放在何处?
答:1,硬盘
? ? ? ?2,移动设备(u盘 移动硬盘 光驱)
? ? ? ?3,网络启动
问:什么原因造成服务器一直重启
答:
1,硬盘坏了
2,第一启动项是移动设备,无移动设备
3,第一启动项网络启动,无网
4,第一启动项网络启动,有网,但是没有网络操作系统服务
(二)mbr
因为grub太大 mbr第一个扇区太大,所以grub程序,分为两部分
作用:指引硬件找到内核文件? ? 即运行放在MBR扇区里的启动 GRUB引导程序
(三)grub
1,grub? 含义
根据gurb配置文件(gurb.cfg)中记录的位置,去找内核文件
对于 Linux 操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是 使用最为广泛的多系统引导器程序。系统控制权传递给 GRUB 以后,将会显示启动菜单给 用户选择,并根据所选项(或采用默认值)准备加载 Linux 内核文件,然后将系统控制权转交给 内核。需要注意的是,CentOS 7 采用的是 GRUB2 启动引导器。
总结:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置
2,grub?功能和组成
bootloader: 引导加载器,引导硬件去找到 内核(操作系统的核心)
-
Windows: ntloader,仅是启动OS
-
Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核
Linux的bootloader
-
LILO:LInux LOader,早期的bootloader,功能单一
-
GRUB: GRand Unified Bootloader, CentOS 5,6 GRUB 0.97: GRUB Legacy, CentOS 7 以后使用GRUB 2.02
GRUB 启动阶段
-
primary boot loader :
1st stage:MBR的前446个字节 引导 硬件去找 内核
1.5 stage:MBR 之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
-
secondary boot loader :2nd stage,分区文件/boot/grub2/grub.cfg
(四)加载内核文件
把内核运行在内存中? ? ? 可以使用
(五)启动第一个进程(系统初始化进程)
启动第一个祖宗进程
centos6? ? init
centos7? ?systemd
总结开机启动的完整过程
加电后,bios程序会自检硬件,硬件无故障后,会根据第一启动项去找内核,一般来说第一启动项是硬盘,找到硬盘后,会根据mbr的指引 找到完整的grub程序,再根据grub的配置文件找到内核文件的具体位置,然后将内核文件加载到内存中运行,内存加载好后,会启动第一个程序
二,系统初始化进程
(一)init? 进程
1,由linux?内核加载运行? /sbin/init? ?程序
2,是系统中第一个进程
3,init? 进程的pid号? (进程标识)永远为1
4,centos6只能用 chkconfig
(二)systemd
1,systemd? 是linux操作系统的一种inti?软件
2,centos7两个都能用 但是systemd 好用多了
3,centos7中?运行的第一个init? 进程是? /lib/systemd/systemd
(三)inti? systemd? 区别
init 串行启动后续的程序 一个一个按顺序启动
systemd 并行启动程序 全部一起启动
三,对systemd详细介绍
(一)systemd?介绍
是系统的级的程序 代为管理系统上的服务程序
systemd 是保姆级程序,如果是yum,以及rpm安装的软件可以直接使用systemctl?去启动? 关闭? 重启? 开机自启高等功能。
但是!编译安装不可以直接使用systemctl?命令去管理程序? ,需要手写一个配置文件
(二)systemd?单元
在systemd中不同类型的systemd对象被统一称为单元,是让系统知道该如何进行操作和管理资源的主要对象,所以systemd有许多单元类型。
systemd单元文件最初默认存放在/lib/systemd/system目录中,每当安装新的软件都会自动在这个目录中添加一个配置文件。
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的单元 |
(三)linux 操作系统有运行级别
0 关机
1 单用户(类似windos的急救模式)
2 字符功能 少些功能
3 字符功能 从来没见过
4 字符功能? ? ? ? ? ? ? ? ?multi-user.target
5 图形界面? ? ? ? ? ? ? ? ?graphical.target
6 重启
语法:
init 0-6? ? ? ? ?切换系统运行级别
查看默认运行级别? ??systemctl get-default
设置默认级别? ? ? ? ? ?
runlevel? 查看当前运行级别
四,排查启动类故障
(一)mbr扇区故障
1,故障原因
- 病毒、木马等造成的破坏
- 不正确的分区操作、磁盘读写误操作
2,故障现象
- 找不到引导程序,启动中断
- 无法加载操作系统,开机后黑屏
3,解决思路
- 应提前做好备份文件
- 以安装光盘引导进入急救模式
- 从备份文件中回复
4,解决方法
用磁盘备份
mbr分区?远程备份
5,实验模拟mbr?扇区故障时用磁盘备份解决
5.1新加一块磁盘,刷新磁盘供电接口
5.2?格式化? 并挂载
5.3?备份分区表以及mbr
5.4??输入hexdump -C -n 512 ?/dev/sda 查看磁盘的前512个字节
5.5? 模拟破坏
输入:dd ?if=/dev/zero ?of=/dev/sda ?count=1 ?bs=512??
这条命令的意思是在/dev/sda前512个字节写0,就相当于破坏了该文件的十六进制代码
可以看到都变成0
5.6解决故障
5.7?
5.8
?5.9
5.10? ? ?要再次挂载sdb? 磁盘挂载后才能用
?
5.11? ?将之前备份的内容? ?再复制到sda里
5.12查看? 已经恢复了
5.13? reboot? 重启、
6,实验模拟mbr?扇区故障时用远程备份解决
(二)grub故障
1,故障原因
- MBR中的GRUB引导程序遭到破坏
- grub.conf文件丢失,引导配置有误
2,故障现象
3,解决思路
- 尝试手动输入引导命令
- 进入急救模式,重写或者从备份中恢复grub.conf
- 向MBR扇区中重建grub程序
4,实验模拟破坏grub.cfg 配置文件并解决
4.1先模拟破坏grub.cfg 配置文件
输入mv ?/boot/grub2/grub.cfg ?/opt,在grob2目录下直接输入文件名就可以
??
4.2?重启,它会进入grub界面
4.3?重启后在读条时进入急救模式,这个要求手速比较快,大概在0.5秒作用
4.4? ??或者选择开机模式,打开电脑时进入固件
设置启动加载方式第一项为光盘启动
按F10保存退出
4.5
?和修复mbr一样 321? ? 进入急救模式? ? ? ? ? ? 以CD-ROM 模式进入
4.6从光盘的根切换到自己的系统根
chroot ??/mnt/sysimage ?
4.7重新安装grub2程序
把grub2程序重新安装在sda磁盘
grub2 -install /dev/sda
4.8重新生成配置文件
grub2-mkconfig ?-o ?/boot/grub2/grub.cfg
4.9退出重启
先输入exit退出到光驱的根下?再输入reboot重启
(三)破解密码
如果root密码遗忘了,需要进入急救界面修改密码
1,有光驱
1.1看到vm? 摁Esc进入急救模式
1.2? ? 以CD-ROM 模式进入
1.3直接切换到系统根,输入passwd修改密码
1.4? exit? reboot
2,无光驱
2.1? ?进入内核编辑
2.2在Linux开头行末尾处加上rd.break,添加后按ctrl? + x执行
2.3重新挂载
入mount ?-o ?remount,rw ?/sysroot 添加权限
2.4??切根
2,5??修改密码
2.6如果你的selinux没有关闭,则需要输入touch ?/.autorelabel? 刷新一下该文件时间,重新打上标记
3,安全措施
?
这样看,我们只要接触到服务器都能修改root?密码,有没有一个安全措施呢?
可添加grub?密码
五,服务程序管理
(一)服务程序的特点
1.一旦运行,一直运行
2.一般是后台运行,不会影响前台操作
(二)管理服务程序
开启
关闭
重启
重新加载配置文件
查看状态
开机自启
开机不自启
(三)管理服务程序centos6的命令
1,chkconfig? ?的使用
0123456代表级别
0代表关机;1代表单用户;234代表字符界面(2没有nfs;4没有用过);5图形化界面;6重启
将3,5 打开 开机自启
在/etc/init.d写一个同名文件的脚本(必须要有执行权限)
chkconfig ?--add ?服务名称
chkconfig ?--level ?35 ?服务程序 ?on ? ?开机自启
chkconfig ?--level ?35 ?服务程序 ?off ?关闭开机自启
例题:一个开机自启的服务卡主,导致系统起不来,怎么办?
? ? ? ? ? ?答:进入急救模式,把他干掉
举例:testsrv?服务启动?出了问题,因为这个服务设置了? 35?级别自动启动,会导致进入不了系统
解决办法:急救模式进去? 单用户模式(级别1)把这个服务自启动关闭
chkconfig? ?--list | grep??
chkconfig? --level? 35? testsrv? off
?
2,Service? 的使用
Service? ? ? ?服务程序? ?start? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??开启
Service? ? ? ?服务程序? ?stop? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??关闭
Service? ? ? ?服务程序? ??restart? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??重启
Service? ? ? ?服务程序? ??reload? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 重新加载配置文件
Service? ? ? ?服务程序? ?status? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??查看服务状态
(四)管理服务程序centos7的命令
1,systemctl? ?的用法
systemctl? ? ? ? ? start? ? ? ? ? ? 服务程序? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??开启
systemctl?? ? ? ? ?stop? ? ? ? ? ? ?服务程序 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??关闭
systemctl?? ? ? ? ? restart? ? ? ? ?服务程序 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??重启
systemctl?? ? ? ? ? reload? ? ? ? ? 服务程序? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 重新加载配置文件
systemctl? ? ? ? ? ? ?status? ? ? ? ? 服务程序? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??查看服务状态
systemctl enable 服务名 ? ? ? ? ? ? ? ?开机自启
systemctl enable --now 服务名 ? ? ?开机自启并立即启动
systemctl disable 服务名 ? ? ? ? ? ? ? 开机不自启
systemctl disable --now 服务名 ? ? 开机不自启并立即关闭
注意:如果用yum安装以及rpm安装 会自动生成一个配置文件 不需要我们手动加入systemd会自己添加
看非编译软件 的配置文件
2,实验编译安装nginx? 并将nginx交给systemctl? 管理
编译安装nginx? 并将nginx交给systemctl? 管理
1,下载源码包
2,解压
3,安装环境,发现一直有进程占用,kill 3159
5,指明安装路径
6,安装
7,编译安装? 需要手写配置文件
8,写配置文件
9,重新加载配置文件
10,开启并查看状态
注意事项:
1,如有报错,在? ?[Service] ?段 加上 ? 这个Type=forking? (后台程序)
2,不写restart 也没关系 restart就是先stop再start
systemctl restart 命令一样能用
3,stop?也可以这么写? ?
ExecStop=/ccc/nginx/sbin/nginx? ?-s? ?stop
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!