玄子Share-引导过程与服务控制
Linux操作系统引导过程
系统初始化进程
- init 进程
- 由 Linux 内核加载运行 /sbin/init 程序
- init 进程是系统中第一个进程
- init 进程的 PID(进程标记)号永远为 1
- Systemd
- Systemd是Linux操作系统的一种init软件
- CentOS7中采用全新的Systemd启动方式,取代传统的SysVinit
- CentOS7中运行的第一个init进程是/lib/systemd/systemd
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的单元 |
运行级别所对应的 Systemd 目标
文件路径: /lib/systemd/system/ 和 /usr/lib/systemd/system/
运行级别 | Systemd的target | 说明 |
---|---|---|
0 | shutdown.target | 关机状态,使用该级别时将会关闭主机 |
1 | rescue.target | 单用户模式,不需要密码验证即可登录系统,多用于系统维护 |
2 | multi-user.target | 不支持网络的多用户模式。默认等同于3 |
3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
4 | multi-user.target | 系统未使用。默认等同于3 |
5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
系统启动类故障排除
修复MBR扇区故障
- 故障原因
- 病毒、木马等造成的破坏
- 不正确的分区操作、磁盘读写误操作
- 故障现象
- 找不到引导程序,启动中断
- 无法加载操作系统,开机后黑屏
- 解决思路
- 应提前作好备份文件
- 以安装光盘引导进入急救模式
- 从备份文件中恢复
# 虚拟机新添加一块磁盘,然后开机
fdisk -l
# 查看新添加磁盘
fdisk /dev/sdb
# 进行磁盘分区管理:n,p,1,默认,默认,w
partx /dev/sdb
# 更新内核关于磁盘分区表的信息
mkfs.ext4 /dev/sdb1
# 格式化分区为 CentOS6 默认类型 ext4
mkdir /backup
# 创建挂载点目录
mount /dev/sdb1 /backup/
# 挂载分区至挂载点目录
mount | tail -1
# 查看分区挂载情况
dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1
# 备份 MBR;bs=512 MBR 默认 512 大小;count=1 复制一份
ls -hl /backup/sda.mbr.bak
# 查看备份文件信息
dd if=/dev/zero of=/dev/sda bs=512 count=1
# 模拟 MBR 被破坏的故障
reboot
# 重启系统
重启进入系统前确保,已勾选连接选项
重启系统后选择第三项,进入急救模式
键盘按下
↑
,选择语言模式为简体中文
保持默认,回车
键盘按下
→
取消网络设置,回车
选择
Continue
,回车
按下回车,输入如下命令
mkdir /tempdir # 重新创建挂载点目录 mount /dev/sdb1 /tempdir # 挂载分区 dd if=/tempdir/sda.mbr.bak of=/dev/sda bs=512 count=1 # 从之前备份的 MBR 恢复 reboot # 重启
重启后进入登录界面,修复完毕
修复GRUB引导故障
- 故障原因
- MBR中的GRUB引导程序遭到破坏
- grub.conf文件丢失、引导配置有误
- 故障现象
- 系统引导停滞,显示“grub>” 提示符
- 解决思路
- 尝试手动输入引导命令
- 进入急救模式,重写或者从备份中恢复
- grub.conf向 MBR 扇区中重建grub程序
进入系统前确保,已勾选连接选项
开机进入系统,以此执行如下命令
cd /boot/grub # 进入到 grub 目录 mv grub.conf grub.conf.bak # 同目录下执行 mv 命令相当于重名操作,模拟 grub 损坏 init 0 # 关闭系统
右键系统,电源,选择打开电源时进入固件,即 BIOSS 模式,
提一句,这里右键很容易选错虚拟机,启动前确认一下
键盘按下
→
选择boot
,按下↓
选中CD-ROM Drive
按下Shift +
调整至第一位,按下F10
报错退出
进入安装选择界面,使用同样的方式进入急救模式到 shell 页面,输入如下命令
chroot /mnt/sysimage # 从急救系统切换到代修复的 Linux 根目录 cd /boot/grub # 切换到 grub 目录 mv grub.conf.bak grub.conf # 同样使用 mv 命令重命名恢复 grub.conf exit # 退出 reboot # 重启
重启后,仍然进入安装界面,因为:BIOSS 设置
CD-ROM Drive
为启动项第一位,需要重新以固件模式启动并恢复BIOSS 设置
将
+Hard Drive
调整至第一位,F10
保存退出
重启后等待时间较长,需要重新扫描 grub,等待后进入登录界面,修复完毕
/etc/inittab文件丢失
遗忘root用户密码
- 故障原因
- 遗忘root用户的密码
- 故障现象
- 无法进行需要root权限的管理操作
- 若没有其他可用帐号,将无法登录系统
- 解决思路
- 引导进入单用户模式,然后重设密码
- grub > kernel … single 或 s 或 1
- 或进入急救模式,然后重设密码
- 引导进入单用户模式,然后重设密码
方式1
进入系统前确保,已勾选连接选项
因为系统没有启动问题,无法进入安装界面,所以用 BIOSS 启动并将
CD-ROM Drive
设置到第一位,F10
保存退出
重启后进入安装界面,使用同样的方式进入急救模式
进入 shell 界面,输入如下命令,关机后记得恢复 BIOSS 设置,将
+Hard Drive
调整至第一位,F10
保存退出chroot /mnt/sysimage # 从急救系统切换到代修复的 Linux 根目录 passwd root # 修改 root 密码 exit # 退出 reboot # 重启
重启后进入登录界面,修复完毕,使用刚修改的 root 密码登录
方式2
正常开机,在读秒期内,键盘按下
E
键
再次按下
E
键
↓
选择第二项,键盘按下E
键
后面加上数字
1
,回车
键盘按下
B
键,进入单用户模式
进入单用户模式,使用
passwd
命令重置 root 密码
重启后进入登录界面,修复完毕,使用刚修改的 root 密码登录
系统文件类故障排除
修复文件系统
-
故障原因
- 非正常关机、突然断电、设备读写失误等
- 文件系统的超级块(super-block)信息被破坏
-
故障现象
- 无法向分区中读取或写入数据
- 启动后提示“Give root password for maintenance”
-
解决思路
- 根据提示输入root口令,进入修复状态
- 使用fsck命令进行修复
# 虚拟机新添加一块磁盘,然后开机
fdisk -l
# 查看新添加磁盘
fdisk /dev/sdb
# 进行磁盘分区管理:n,p,1,默认,默认,w
partx /dev/sdb
# 更新内核关于磁盘分区表的信息
mkfs.ext4 /dev/sdb1
# 格式化分区为 CentOS6 默认类型 ext4
mkdir /kgc
# 创建挂载点目录
mount /dev/sdb1 /kgc
# 挂载分区至挂载点目录
mount | tail -1
# 查看分区挂载情况
dd if=/dev/zero of=/dev/sdb1 bs=512 count=4
# 损坏 sdb1 分区
mount /dev/sdb1 /kgc
# 重新挂载分区 mount:you must specify the filesystemtype
fsck -y -t ext4 /dev/sdb1
# 使用 fsck 命令修复 sdb1 指定修复分区格式为 ext4
mount /dev/sdb1 /kgc
# 再次尝试挂载
mount | tail -1
# 查看分区挂载情况
磁盘资源耗尽故障
-
故障原因
- 磁盘空间已被大量的数据占满,空间耗尽
- 虽然还有可用空间,但文件数i节点耗尽
-
故障现象
- 无法写入新的文件,提示“… : 设备上没有空间”
- 部分程序无法运行,甚至系统无法启动
-
解决思路
- 清理磁盘空间,删除无用、冗余的文件
- 转移或删除占用大量i节点的琐碎文件
- 进入单用户模式、急救模式进行修复
- 为用户设置磁盘配额
# 虚拟机新添加一块磁盘(磁盘容量给小点 0.1 ),然后开机
fdisk -l
# 查看新添加磁盘
fdisk /dev/sdb
# 进行磁盘分区管理:n,p,1,默认,默认,w
partx /dev/sdb
# 更新内核关于磁盘分区表的信息
mkfs.ext4 /dev/sdb1
# 格式化分区为 CentOS6 默认类型 ext4
mkdir /data
# 创建挂载点目录
mount /dev/sdb1 /data
# 挂载分区至挂载点目录
mount | tail -1
# 查看分区挂载情况
df -i /data
# Ifree 剩余节点空间
vim /killInode.sh
# 编写脚本文件自动生成,把剩余空间填充完
#! bin/bash
i=1
while [ $i -le 26197 ]
do
touch /data/file$i
let i++
done
cd /
# 切换到根目录
./killInode.sh &
# 执行脚本文件 & 后台执行
# 若提示无权限,则执行 chmod /killInode.sh 755 分配执行权限
df -i /data
# 查看剩余空间,显示全部占用
cp /etc/passwd /data
# 复制文件到 data 无法复制,空间全部占用
rm -rf /data/file?
# 删除部分文件
cp /etc/passwd /data
# 重新复制,复制成功
df -i /data
# 再次查看剩余空间
检测磁盘坏道
- 故障原因
- 磁盘设备中存在坏道(逻辑的或物理的)
- 故障现象
- 读取磁盘中的数据时,磁盘设备发出异常声响。
- 访问磁盘中的某个文件时,反复读取且出错,提示文件损坏。
- 对于新建立的分区无法完成格式化。
- 系统使用该磁盘时频繁死机
badblocks -sv /dev/sdb
# 扫描磁盘坏道 Pass completed, 0 bad blocks found.
系统服务管理
重启操作
- 基于CentOS 6 的重启操作
- init 6
- reboot
- shutdown -r now
- 基于CentOS 7 的重启操作
- init 6
- reboot
- shutdown -r now
- systemctl reboot
关机操作
- 基于CentOS 6 的关机操作
- init 0
- poweroff
- shutdown -h now
- halt -p
- 基于CentOS 7 的关机操作
- init 0
- poweroff
- shutdown -h now
- halt -p
- systemctl poweroff
系统服务控制
systemctl 控制类型 服务名称
# CentOS7
service 服务名称 控制类型
# CentOS6
- start:启动
- stop:停止
- restart:重新启动r
- eload:重新加载
- status:查看服务状态
查看Linux系统的运行级别
-
runlevel 命令(6)
- 两个参数,第一个参数表示上次使用运行级别(默认N),第二个参数表示当时使用运行级别
-
systemctl 工具(7)
- systemctl 查看默认的运行级别 target
临时切换运行级别
- init 参数运行级别对应数字(6)
- init 3 :从桌面切换到字符终端
- init 5 :从字符终端切换到桌面
- systemctl 工具参数具体 rarget(7)
- systemctl isolate multi-user.target :从桌面环境切换到字符终端
- systemctl isolate graphical-user.target :从字符终端切换到桌面
设置永久运行级别
基于CentOS 6
-
将系统的运行级别永久设置为多用户字符终端,对应的运行级别是3
- 修改配置文件:vim /etc/inittab
- id:5:initdefault: (修改id就是运行级别)
-
将系统的运行级别永久设置为多用户桌面环境,对应的运行级别是5
-
修改配置文件:vim /etc/inittab
-
id:3:initdefault: (修改id就是运行级别)
-
基于CentOS 7
-
将系统的运行级别永久设置为多用户字符终端,对应的运行级别是 3
- ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
- systemctl get-defaults
-
将系统的运行级别永久设置为多用户桌面环境,对应的运行级别是 5
- ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
- systemctl get-defaults
systemctl set-default multi-user.target
# 设置字符页面
systemctl set-default graphical.target
# 设置图形页面
系统服务介绍
linux 系统中,有一些特殊程序,启动后会持续在后台运行,等待用户或其他软件调用,这种程序称为服务
- 系统服务:服务的对象是linux系统本身
- 网络服务:服务的对象是网络中的客户端
系统服务优化启动过程
基于CentOS 6
- ntsysv工具
- 命令模式:ntsysv --level 运行级别 服务名称
- chkconfig 配置工具
- 命令模式:chkconfig --level 运行级别 服务名称 开启或禁用 (on/off)
基于CentOS 7
- ntsysv 工具
- 提供一个交互式、可视化窗口
- 可以在字符终端运行
- 便于集中管理多个服务
- systemctl 工具
- 不提供交互式、可视化窗口
- 管理单个服务效率更高
系统服务的启动和控制
ntsysv 系统服务管理工具
ntsysv
# 用于管理当前运行级别中的服务
ntsysv --level 2345
# 对指定运行级别中的服务进行管理
# 有*号代表开机自启动
Centos6 服务开机自启动控制-chkconfig
查看系统服务的开机启动状态
chkconfig --list
# 服务名称
设置系统服务的开机启动状态
chkconfig --level 2345 服务名称 on
# 将服务设置为开机启动
chkconfig --level 2345 服务名称 off
# 将服务设置为开机不启动
Centos7 服务开机自启动控制-systemctl
查看系统服务的开机启动状态
systemctl is-enabled 服务名称
设置系统服务的开机启动状态
systemctl enable 服务名称
# 将服务设置开机自启动
systemctl disable 服务名称
# 将服务设置开机不启动
systemctl enable 服务名称 --now
# 将服务启动并设置开机自启动
systemctl disable 服务名称 --now
# 将服务关闭并设置开机不启动
systemctl enable 服务名称 服务名称 服务名称
# 批量设置将服务设置开机自启动
查看系统中所有以激活的系统服务
systemctl list-units --type=service
玄子Share-引导过程与服务控制 2024-03-23