引导过程和服务控制
程序员文章站
2022-05-02 07:55:24
...
一、Linux操作系统引导过程
1.1 Linux操作系统的分类
- 内核
面向硬件的层面 - 外壳
面向用户的层面
1.2 引导过程的总览
1.3 系统进程初始化
1.3.1 init进程
- 由linux内核加载运行 /sbin/init程序
- init进程是系统中第一个进程
- init进程的PID(进程标记)永远都是1
1.3.2 systemd组件
- systemd是linux操作系统的一种init组件
- CentOS7中采用全新的System的启动方式,取代传统的sysVinit
- CentOS7中运行的第一个init进程是 /lib/systemd/system
1.4 Systemd单元格式
单元类型 | 扩展名 | 说明 |
---|---|---|
Service | .service | 描述一个系统服务 |
Socket | .socket | 描述一个进程通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automount | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述一个内核交换设备或交换文件 |
Path | .path | 描述一个文件系统的文件或目录 |
Timer | .timer | 描述一个定时器(用于实现cron的调度任务) |
Snapshot | .snapshot | 用于保存一个system的的状态 |
Scope | .scope | 使用systemd的总线接口以编程方式创建外部进程 |
Slice | .slice | 使用居于Cgroup的一组通过层次组织的管理系统进程 |
Target | .target | 描述一组systemd的单元 |
1.5 运行级别所对应的Systemd目标
运行级别 | Systemd的target | 说明 |
---|---|---|
init 0 | poweroff.target | 关机状态,使用该级别时将会关闭主机 |
init 1 | rescue.target | 单用户模式,不需要密码验证即可登录系统,多用于系统维护 |
init 2 | multi-user.target | 用户定义/域特别运行级别,默认等同于3 |
init 3 | multi-user.target | 字符界面的完整用户模式,大多数服务器主机运行在此级别 |
init 4 | multi-user.target | 用户定义/域特别运行级别,默认等同于3 |
init 5 | graphcal.target | 图形界面的多用户模式,提供了图形桌面操作系统 |
init 6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
二、Linux故障问题解决
2.1 修复MBR扇区故障
2.1.1 故障原因
- 病毒,木马等造成的破坏
- 不正确的分区操作,磁盘读写误操作
2.1.2 故障现象
- 找不到引导重新,启动中断
- 无法加载操作系统,开机后黑屏
2.1.3 解决思路
- 应提前做好备份文件
- 安装光盘引导进入急救模式
- 从备份文件中恢复
2.1.4 故障制造及修复
MBR扇区破坏
dd if=/dev/sda of=/data/mbr.bak bs=1024k count=1 ## 备份文件
dd if=/dev/zero of=/dev/sda bs=1024k count=1 ## 破坏已备份的源文件
init 6 ## 重启
MBR扇区修复
mkdir /data1
mount /dev/sdb1 /data1 ## 制作新的挂载点
dd if=/data1/mbr.bak of=/dev/sda bs=1024k count=1 ## 将备份文件拷到sda中
reboot
2.1.5 MBR故障制造及修复的注意
- MBR扇区存在于第一块硬盘空间里,因此想要破坏MBR数据,只需要破坏第一块硬盘空间里的数据即可。
- 对第一块硬盘进行备份时,注意备份磁盘空间不能小于第一块硬盘的空间大小。
2.2 修复GRUB引导故障
2.2.1 故障原因
- MBR中的GRUB引导程序遭到破坏
- grub.conf人间丢失,引导配置有误
2.2.2 模拟制造故障
cd /boot/grub2/ ## 进入grub程序
rm -rf grub.cfg ## 删除grub.cfg 模拟故障
init 6 重启系统
2.2.3 故障现象
系统引导停滞,出现如图情况
2.2.4 修复故障
- 尝试手动引导命令
- 进入急救模式,重写或从备份中恢复grub.cfg
- 向MBR扇区重建grub程序
修复故障命令
因为硬盘配置的丢失,我们是准备用光盘来代替硬盘备份恢复grub.cfg配置文件,所以在看见上图故障现象时,重新启动并按F2进入模式,选择boot模式,将CD按住“shift+”设置为第一选项,然后按F10保存设置进行如下命令操作。
chroot /mnt/sysimage/ ## 引导急救模式,加载系统镜像
grub2-install /dev/sda ## 重新建立加载sda分区
grub2-mkconfig -o /boot/grub2/grub.cfg ## 重新构建grub菜单配置文件
exit ## 退出bash环境
reboot ## 重启
结束后,因为我们上面将CD设为第一选项,这是应使用同样的方式再将硬盘重新设置为第一选项保存即可。
2.3 遗忘root用户密码
2.3.1 故障原因
遗忘root用户的密码
2.3.2 故障现象
- 无法进行需要的root权限的管路操作
- 若没有其他可用账号,将无法登录系统
2.3.3 解决思路
进入急救模式,重设密码
修复命令
chroot /mnt/sysimage
passed root
new:
retry:
exit
reboot
三、系统服务控制
3.1 系统服务控制
- systemctl 控制类型 服务名称
- service 服务名称 控制类型
这两种的效果是一样的,只是在命令的时候先后顺序不同。
systemctl和service在管理服务时,在 /lib/systemd/system下面要有这个服务。service文件或者在 /etc/init.d/服务的配置文件。
3.1.1 控制类型
控制命令 | 作用 |
---|---|
start | 启动 |
stop | 停止 |
restart | 重新启动 |
reload | 重新加载 |
status | 查看服务状态 |
其中restart和reload的区别在于前者需要先关闭服务再开启服务,中间服务会断开,而后者不会中断服务。
3.2 运行级别
3.2.1 查看运行级别
- runlevel命令
只能查看切换运行级别和当前运行级别 - systemctl工具
查看默认的运行级别
3.2.2 临时切换运行级别
- init命令
init命令参数是运行级别所对应的参数 - systemctl工具
命令参数是具体的参数
3.2.3 设置永久运行级别
方式一:
systemctl set-default multi-user.target
方式二:
rm -rf /etc/systemd/system /default.target
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
两条命令的功能相同,都要重启才能生效
另: 查看当前的运行级别
systemctl get-default
3.3 优化启动过程
3.3.1 ntsysv工具
- 提供一个交互式、可视化窗口
- 可以在字符终端运行
- 便于集中管理多个服务
ntsysv系统服务管理工具
- ntsysv
- ntsysv --level 级别列表
3.3.2 systemctl工具
- 不提供交互式、可视化窗口
- 管理单个服务效率高
查看系统服务的启动状态
systemctl is-enable 服务名称
设置系统服务的启动状态
systemctl enable/disable 服务名称
上一篇: Spring基于AspectJ开发