引导过程与服务控制
1.引导
1.过程
引导过程:当你按下开机的电源键知道屏幕显示登录的画面,这中间系统做的一系列的开机过程.
1.开机自检(bios):
服务器开机之后,根据主板的bios设置,对cpu,内存,显卡,键盘等等设备(不包括硬盘),对这些核心的设备进行初步的检测,检测无误后,根据预设的启动顺序(默认的启动顺序,第二就是硬盘,要么就是手工设置的u盘启动),系统的控制权转移到了硬盘(大多数的时候都给硬盘)
总结:初步的检测硬件工作是否正常,检测成功后,把系统的引导控制权交给硬盘或者光驱或者u盘
2.MBR引导:
MBR是硬盘的分区记录表,在这个表里里面记录了硬盘的分区,以及系统启动盘的位置在哪.
系统的控制权到了硬盘,根据mbr记录表来找,找系统的启动盘(在linux里,系统盘是sda1),找到了之后将系统的控制权传递给包含操作系统引导文件的分区,以及mbr记录中系统的启动菜单(grub)
总结:先找系统,再把控制权给grub菜单
3.GRUB菜单
硬盘启动之后,找到了系统分区,也找到了操作系统所在的位置,grub就会显示启动菜单,包含所有当前可选的操作系统,选择了其中一个操作系统之后,系统又会转移控制权到操作系统的内核文件.(Centos7开始使用的都是grub2启动引导器)
4.加载内核文件
操作系统的内核文件是一个预先编译好的特殊的二进制文件(已经编译好的可执行代码),介于硬件资源和系统程序之间,负责分配资源,调度资源.只是分配和调度,并没有真正运行.把它们预加载到内存当中,系统程序等待启动.
5.init/systemd启动方式
/sbin/init进程是系统当中的第一个进程,是所有其他进程的父进程.init进程在系统中的进程号永远是1,因为init是串行(一个一个启动,有先后顺序)
lib/systemd/system/是systemd的第一个进程,进程号也是1,systemd是并行(在载在内存当中的程序,一起启动,速度快)
ps -elf 看进程
killer -9
2.systemd单元类型:
systemd是centos7之后用来管理系统服务进程,使用单元模式(unit)来描述和控制系统服务和资源.
主要单元类型: 扩展名 描述
Service .service 描述一个系统进程
socket .socket 描述进程启动时,根据其配置,分配系统端口,监听端口状态.如果有请求,维护端口通信(提供网络服务)
target .garget 描述一组systemd的单元(进程在不同级别下的状态)
device .device 管理硬件设备包括光驱,驱动程序,设备文件,设备属性
mount .mount 管理文件系统的挂在,以及挂载之后的数据管理
Automount .automount 根据配置自动实现设备或者文件系统的挂载.
nginx.service
[Unit] #服务的说明
Description=nginx - high performance web server #描述nginx的web服务信息
Documentation=http://nginx.org/en/docs/ #描述nginx的网址信息
After=network-online.target remote-fs.target nss-lookup.target#依赖,启动的这个进程,systemd会根据after的条件把相关的进程一并启动.
Wants=network-online.target #表示支持dns解析以及该软件依赖于网络,是一个依赖条件,systemd也会把这个网络功能一并启动,先启动网络服务,才能启动nginx
[Service] #服务运行的菜蔬
Type=forking #后台运行
PIDFile=/usr/local/nginx/run/nginx.pid #路径,注意文件位置,如果不对 启动不了
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #服务启动时具体运行的命令,注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID #重启的命令
ExecStop=/bin/kill -s TERM $MAINPID #停止进程的命令
[Install] #服务安装的相关设置,以及运行的模式
WantedBy=multi-user.target #多用户,支持多用户模
3.系统的运行级别
runlevel查看运行级别,init切换系统级别
级别 systemd对应target 说明
0 target 关机
1 rescue.target 单用户模式,系统维护时使用
2 multi-user.target 字符模式和3一样
3 multi-user.target 字符模式完整的字符模式,3模式可以支持多用户,在工作中,我们遇到的都是3
4 multi-user.target 字符模式
5 graphiccal.target 学习时使用,图形化多用户模式(工作中没有)
6 reboot.target 重启
特点:1.支持并行服务,提高系统的启动速度
2.可以支持自动重启
3.可以在进程运行期间,动态的控制它的资源和相关的服务参数
4.可以自动解决服务启动过程中的依赖关系
5.支持多种管理方式,如命令行,也可以图形化工具
4.如何对服务进行进程进行控制
systemctl 控制类型 服务名称(进程)
控制类型
start 启动
stop 停止
restart 重启(先stop再start(修改服务的配置文件,必须要重启服务才能生效))
reload 重新加载单元配置
status 查看服务的状态(runing正常运行,dead服务停止,fail启动失败,查找启动失败的原因,exit-code是真正的启动失败,如果是result:signal表明有人强制终止了该进程,不一定是报错)
2.服务控制
实验:
1.mbr引导:mbr分区表被删了,如何恢复?
先对虚拟机CD/DVD(IDE)那项把设备状态两个选项勾上,确保镜像挂载了.
然后对硬盘添加一个硬盘,确定退出,重启虚拟机,链接xshell
lsblk查看硬盘,发现多了一块硬盘
输入,fdisk /dev/sdb
输入 n
回车,回车,回车,w
之后再查看硬盘lsblk,发现以形成sdb1分区
mkfs.xfs /dev/sdb1(创建一个文件系统)
创建一个目录,并且挂载它,最后查看一下
mkdir /backup
mount /dev/sdb1 /backup/
df -h
挂上去后进入这个目录,用dd if语句创建一个文件,然后查看一下
mbr分区表在第一块硬盘当中的第一个分区,大小512字节,把这个分区表欧诺个第一个硬盘当中提取出来,保存在sdb的硬盘中,相当于把mbr分区表做了个备份
cd /backup/
dd if=/dev/sda of=/backup/mbr.bak bs=512 count=1
模拟把原本的分区表用空文件填满,相当于删了
dd if=/dev/zero of=/dev/zero of=/dev/sda bs=512 count=1
然后重启
init 6
回到虚拟机选第三个,解决故障
然后选第二个,进入急救模式
这里输入1
第二个默认回车
第三个输入 创建新目录,然后对sdb1重新挂载,再查一下
mkdir /backupdir
mount /dev/sdb1 /backupdir/
df -h
然后cd去刚刚创建的目录查看一下mbr.bak文件在不在,然后把文件还给/dev/sda
cd backupdir/
ls
dd if=/backupdir/mbr.bak of=/dev/sda
然后exit,退出重启,就好了
2.grub引导菜单故障
模拟删除grub
cd /boot
ls
cd grub2/
ls
rm -rf grub.cfg
reboot
之后回到虚拟机,重置虚拟机,手速快一点按esc,选择3 cd-rom drive
接下来就眼熟了,选3,2,1,回车,
输入chroot命令,进入系统的根环境
chroot /mnt/sysimage/
把grub2的文件重新安装到到第一块硬盘
grub2-install /dev/sda
接下来重新构建group2菜单的配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
然后exit退出,reboot重启,会重启两次,就好啦
3.root密码忘了,该怎么办?
先关闭安全机制,否则会被selinux阻拦可能会失败
setenforce 0
然后虚拟机重启,考验手速esc,然后就眼熟了,3,3,2,
之后输入1
回车
chroot /mnt/sysimage/
passwd root
就可以开始改密码了
然后就是exit,reboot重启了
,3,3,2,
[外链图片转存中…(img-hMBwUhvR-1716451515012)]
[外链图片转存中…(img-qQVsmiUg-1716451515012)]
[外链图片转存中…(img-gZSQzHA8-1716451515012)]
之后输入1
回车
chroot /mnt/sysimage/
passwd root
就可以开始改密码了
[外链图片转存中…(img-yca9SJoc-1716451515012)]
然后就是exit,reboot重启了