操作系统引导过程 与 服务进程的控制

一,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

相关推荐
矛取矛求2 小时前
Linux如何更优质调节系统性能
linux
内核程序员kevin3 小时前
在Linux环境下使用Docker打包和发布.NET程序并配合MySQL部署
linux·mysql·docker·.net
kayotin4 小时前
Wordpress博客配置2024
linux·mysql·docker
Ztiddler4 小时前
【Linux Shell命令-不定期更新】
linux·运维·服务器·ssh
小小不董4 小时前
Oracle OCP认证考试考点详解082系列16
linux·运维·服务器·数据库·oracle·dba
IPdodo全球网络5 小时前
如何利用静态住宅IP优化Facebook商城的网络稳定性与运营效率
运维·服务器
a1denzzz5 小时前
Linux系统的网络设置
linux·服务器·网络
运维&陈同学5 小时前
【模块一】kubernetes容器编排进阶实战之k8s基础概念
运维·docker·云原生·容器·kubernetes·云计算
ac.char5 小时前
在CentOS下安装RabbitMQ
linux·centos·rabbitmq
m0_519523106 小时前
Linux——简单认识vim、gcc以及make/Makefile
linux·运维·vim