一、linux操作系统引导过程
1.1 引导过程详解
-
开机自检(bios)
加电检测硬件是否有问题。
如果没有问题, 根据bios设置的第一启动项(第一个能够引导系统的设备),来寻找操作系统。 -
MBR引导
运行放在MBR扇区里的启动GRUB引导程序(MBR前446位是GRUB引导文件,后64位是分区),来启动完整的GRUB引导程序。 -
GRUB菜单
GRUB引导程序通过配置文件/boot/grub2/grub.cfg
来找到操作系统。 -
加载内核
内核是操作系统的核心。
把内核和镜像文件系统加载到内存中,使其可以使用 -
init进程初始化
运行中的程序称为进程。
加载硬件驱动程序,以及初始化进程,内核把init进程加载到内存中运行。
init进程是由内核直接启动的第一个用户级进程,负责启动系统的用户终端(登录界面),启动各种系统服务和守护进程等等。
1.2 系统初始化进程
init vs systemd
第一个启动的进程 ,后续进程都要依托于此进程启动
CentOS 7 — systemd 并行启动后续进程,速度块
CentOS 6 — init 一个一个启动,速度慢
1.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的单元 |
二、排除启动类故障
2.1 MBR扇区故障
2.1.1 故障原因
- 病毒、木马的等造成的破坏
- 不正确的分区操作、磁盘读写误操作等
2.1.2 模拟修复MBR扇区故障
1)添加新硬盘并分区
用lsblk
命令查看能否识别新硬盘,本次实验选用sdb作为备份盘
fdisk /dev/sdb //分区
硬盘中不只有MBR扇区,所以对硬盘分区备份
hexdump -C -n 512 /dev/sda //
用于和故障后的对比
2)备份 MBR扇区数据 到其他磁盘
mkdir /test //新建test文件夹 作为挂载点和备份点
mount /dev/sdb1 /test // sdb1挂载到 /test下
dd if=/dev/sda of=/test/mbr.bak bs=512 count=1 //将MBR扇区备份到新硬盘的分区中
3)破坏MBR扇区,模拟MBR扇区故障
dd if=/dev/zero of=/dev/sda bs=512 count=1 //空字符替换 模拟MBR扇区故障
hexdump -C -n 512 /dev/sda
重启虚拟机
观察故障情况
4)进入急救模式,用备份文件恢复MBR扇区数据,解决故障
进入急救模式
mkdir /backup
mount /dev/sdb1 /backup //将sdb1挂载到backup下
此时,新建目录backup下,有备份文件
ls /backup //查看backup下的文件
再将备份文件的数据拷贝到sda中
dd if=/backup/mbr.bak of=/dev/sda bs=512 count=1 //备份恢复MBR扇区数据
之后在命令行中输入exit
,退出急救模式并重启
观察重启情况
2.2 grub 引导故障
2.2.1 故障原因
- MBR中的GRUB引导程序遭到破坏
- grub.cfg 文件丢失、引导配置有误
2.2.2 模拟修复grub配置文件
1)删除grub配置文件,重启观察故障情况
cd /boot/grub2 //切换到grub配置文件所在目录
rm -rf grub.cfg //删除配置文件 grub.cfg
reboot
重启
由于没有grub配置文件,无法登录
2)重新启动,在读条界面按 Esc 键进入启动菜单,改用光盘启动,引导界面进入急救模式
3)重建GRUB菜单配置文件
chroot /mnt/sysimage
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
4)退出引导界面,重启,观察是否修复成功
重启后观察启动状态
修复成功
2.3 用户密码
2.3.1 模拟修改root密码
mount –o remount,rw /sysroot //修改根目录的权限 重新挂载
chroot /sysroot // 创建了一个临时的根文件系统环境,使得在该环境中运行的程序只能访问到该环境下的文件和目录,而不能访问主系统的文件和目录
touch /.autorelabel
passwd root //修改密码
登录用户root
输入原来的密码123123,提示密码错误
输入修改后的密码,登录成功
三、linux运行级别
运行级别(runlevel)指的是系统的工作状态,定义了系统启动时运行的服务和进程.
init 0-6
可以切换到 对应的运行级别
systemctl get-default //获得当前的运行级别
systemctl isolate xxx.target //不重启切换运行级别
3.1 运行级别0(halt)
系统关机状态,所有服务已停止,可以安全地关闭电源。
3.2运行级别1(single user mode)
单用户模式,只有root用户可以登录,用于系统修复和维护。
3.3 运行级别2(multi-user mode)
文本模式多用户模式,登录后进入命令行界面, 功能不全的字符界面。
3.4 运行级别3(full multi-user mode)
文本模式多用户模式,登录后进入命令行界面, 完整的字符界面。
3.5 运行级别4(unused)
保留,未分配特定用途,可以根据需要进行自定义。
3.6 运行级别5(graphical multi-user mode)
图形多用户模式,登录后进入 图形界面。
3.7 运行级别6
重启
四、Systemd服务管理–systemctl
4.1 什么是服务程序
为其他机器提供服务的程序,服务程序启动后,会持续监听端口。
使用systemctl 命令管理systemd服务。
4.2 systemctl命令
systemctl
是用于管理systemd系统和服务管理器的命令行工具。
命令格式
systemctl [选项] 程序名
[选项]
start 开启
stop 关闭
status 查看程序状态
reload 重新加载配置文件而不重启
restart 重启
enale 开机自启
disable 开机不自启
开机自启并立即启动
systemctl enable --now 程序名
systemctl start nginx //启动nginx
systemctl status nginx // 查看运行状态
systemctl stop firewalld //关闭防火墙
setenforce 0 //永久关闭
4.3 为什么能使用systemctl命令?
有service system单元并且在固定目录下
4.4 service unit文件格式(.service 文件)
路径
/usr/lib/systemd/system/*.service
service unit file文件通常由三部分组成:
[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
[Service]:与特定类型相关的专用选项;此处为Service类型
[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项
4.4.1 Unit段的常用选项
Description:描述信息
After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
Wants:依赖到的其它units,弱依赖
Conflicts:定义units间的冲突关系
4.4.2 Service段的常用选项
Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
EnvironmentFile:环境配置文件
ExecStart:指明启动unit要运行命令或脚本的绝对路径
ExecStop:指明停止unit要运行的命令或脚本
ExecStartPre: ExecStart前运行
ExecStartPost: ExecStart后运行
Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
RestartSec: 设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"
PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录
4.4.3 Install段的常用选项
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的相关服务