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