目录
一、linux系统引导过程
1、引导过程介绍
1.1 引导过程总览图
1.2 引导过程详解
1.3 系统初始化进程
1.4 Ststemd单元类型
1.5 运行级别所对应的Systemd目标
二、排除启动类故障
1、修复MBR扇区故障
1.1 故障原因
1.2 故障现象
1.3 解决思路
1.4 详细操作步骤
1.4.1 在本机备份mbr文件
1.4.2 远程拷贝mbr文件
2、修复GRUB引导故障
2.1 故障原因
2.2 故障现象
2.3 解决思路
2.4 详细操作步骤
3、遗忘root用户的密码
3.1 故障原因
3.2 故障现象
3.3 解决思路
3.4 详细操作步骤
3.4.1 有光驱模式重设密码
3.4.2 无光驱模式重设密码
三、服务程序管理
1、管理服务程序的状态
2、chkconfig
3、systemd
3.1 systemd命令
3.2 配置编译安装的程序软件开机自启动的步骤
3.2.1 编写nginx开机自启动的配置文件
3.2.2 重新加载所有配置文件并开启nginx服务
3.2.3 关闭nginx服务
一、linux系统引导过程
1、引导过程介绍
1.1 引导过程总览图
1.2 引导过程详解
①BIOS加电自检:
- 服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
- 总结:检测出第一个能够引导系统的设备,比如硬盘或者光驱
进入BIOS界面的方法
选择“打开电源时进入固件”后,就能进入BIOS界面
修改BIOS加电自检硬件的优先级
②MBR引导:
- 当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR (主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单(如GRUB) 。
- 总结:运行放在MBR扇区里的启动GRUB引导程序
③GRUB菜单
- 对于Linux操作系统来说,GRUB (统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。CentOS 7采用的是GRUB2启动引导器。
- 总结:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置
④加载Linux内核
- Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。CentOS 7系统中,默认的内核文件位于"/boot/vmlinuz-3.10.0-514.e17.x86_64"
- 总结:把内核和镜像文件系统加载到内存中
⑤init进程初始化
- 为了完成进一步的系统引导过程,Linux内核首先将系统中的"/sbin/init"程序加载到内存中运行(运行中的程序称为进程),init进程负责完成整个系统的初始化,最后等待用户进行登录。
- 总结:加载硬件驱动程序,内核把init进程加载到内存中运行
总过程详述:
加电后bios程序会自检硬件,硬件无故障后,会根据第一启动项去找内核,一般来说第一启动项是硬盘,找到硬盘后,会根据mbr 的指引找到完整的 grub 程序,再根据rub的配置文件找到内核文件的具体位置,然后将内核文件加载到内存中运行,内存加载好后会启动第一个程序。
1.3 系统初始化进程
①init进程
- init是系统的初始化进程,负责启动和管理系统中的所有其他进程
- 由Linux内核加载运行/sbin/init程序
init
是Linux系统中的第一个用户空间进程,其进程ID(PID)始终为1init
通常通过/etc/inittab
文件进行配置,并且它按照运行级别(runlevel)来启动系统服务和进程
②Systemd
- Systemd是Linux操作系统的一种init软件
- CentOS7中采用全新的Systemd启动方式,取代传统的SysVinit
- CentOS7中运行的第一个init进程是/lib/systemd/systemd
Init与Systemd对比 | ||
---|---|---|
Init | systemd | |
启动区别 | 串行启动后续程序,按顺序一个个启动 | 并行启动后续程序,全部一起启动 |
功能和特性 | init 相对较为简单 | systemd 提供了更多的功能和特性,是系统的级的程序,代为管理系统中的服务程序 |
配置方式 | init 使用/etc/inittab 文件进行配置 | systemd 使用单元文件(unit files)进行配置 |
统一接口 | init 需要依赖于多个独立的脚本文件 | systemd 提供了统一的接口和工具来管理系统服务和资源 |
1.4 Ststemd单元类型
单元类型 | 扩展名 | 说明 |
---|---|---|
Service | .service | 描述一个系统服务 |
Socket | .socket | 描述一个进程间通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automount | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述一个内存交换设备或文件 |
Path | .path | 描述一个文件系统中文件或目录 |
Timer | .timer | 描述一个定时器 |
Target | .target | 描述一组systemd的单元 |
1.5 运行级别所对应的Systemd目标
运行级别 | Systemd的target | 说明 |
---|---|---|
0 | target | 关机状态,使用该级别时将会关闭主机 |
1 | rescue.target | 单用户模式,不需要密码验证即可登录系统,多用于系统维护 |
2 | multi-user.target | 用户定义/域特定运行级别,默认等同于3,但是不能连网 |
3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
4 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
命令 | 说明 |
---|---|
init 0 | 关机 |
init 1 | 单用户模式相当于windows安全模式 |
init 2 | 用户,没网 |
init 3 | 多用户模式 字符界面没装图形化界面,默认为init3 |
init 4 | 保留 |
init 5 | 图形化界面,多用户化模式 |
init 6 或 reboot | 重新启动 |
runlevel //查看系统当前运行级别
systemctl get-default //查看默认的运行级别
systemctl set-default //设置默认的运行级别
二、排除启动类故障
1、修复MBR扇区故障
1.1 故障原因
- 病毒、木马等造成的破坏
- 不正确的分区操作、磁盘读写误操作
1.2 故障现象
- 找不到引导程序,启动中断
- 无法加载操作系统,开机后黑屏
1.3 解决思路
- 应提前作好备份文件
- 以安装光盘引导进入急救模式
- 从备份文件中恢复
1.4 详细操作步骤
要求:模拟破坏mbr及其分区表,然后对其进行修复
1.4.1 在本机备份mbr文件
步骤一:新添加一块硬盘,并将mbr备份文件拷贝到新硬盘
①新添加一块硬盘
磁盘建立完成后,使用以下三条命令刷新新建的磁盘设备,不需要重启
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
②创建新硬盘的主分区
如果分区不能识别时,使用以下命令后,可查看新添加的磁盘主分区
partprobe /dev/sdb
③对主分区进行格式化
mkfs.xfs /etc/sdb1 //格式化
④挂载
mount /dev/sdb1 /mnt //挂载
⑤ 将mbr备份文件拷贝到新硬盘
dd if=/dev/sda of=/mnt/mbr count=1 bs=512 //将mbr备份文件拷贝到新硬盘
步骤二:模拟破坏mbr及其分区表
dd if=/dev/zero of=/dev/sda count=1 bs=512 //向/dev/sda的前512字节写0覆盖原来内容
hexdump -C -n 512 /dev/sda //查看前512字节
步骤三:进入急救模式恢复mbr
①reboot重启后,选择“Troubleshooting”,再选择“Rescue a CentOS system”,最后选择“Continue”后,进入急救模式
②将备份文件拷贝到/dev/sda
mkdir bak //新建文件夹
mount /dev/sdb1 bak //将存有备份文件的硬盘挂载到新建文件夹下
dd if=bak/mbr of=/dev/sda //将备份文件添加到原本的目录下
hexdump -C -n 512 /dev/sda //查看到/dev/sda前512字节已恢复
重启即可正常使用系统
1.4.2 远程拷贝mbr文件
步骤一:临时设置远程IP地址和子网掩码
ifconfig ens33 172.16.12.12/24 //临时设置远程IP地址和子网掩码
步骤二:scp远程复制文件
dd if=/dev/sda of=/mnt/mbr count=1 bs=512 //拷贝/dev/sda到/mnt/mbr
scp /mnt/mbr 172.16.12.12:/opt //scp远程复制文件
步骤三:模拟破坏mbr及其分区表
dd if=/dev/zero of=/dev/sda count=1 bs=512 //向/dev/sda的前512字节写0覆盖原来内容
hexdump -C -n 512 /dev/sda //查看前512字节
步骤四: 进入急救模式恢复mbr
①reboot重启后,选择“Troubleshooting”,再选择“Rescue a CentOS system”,最后选择“Skip to shell”后,进入急救模式
②拷贝远端设备的备份文件mbr到主机当前目录下,并将其添加到原本的目录下
ifconfig ens33 172.16.12.10/24 //设置主机临时ip地址
scp 172.16.12.12:/opt/mbr . //拷贝远端设备的备份文件mbr到主机当前目录下
dd if=mbr of=/dev/sda //将备份文件添加到原本的目录下
hexdump -C -n 512 /dev/sda //查看到/dev/sda前512字节已恢复
2、修复GRUB引导故障
2.1 故障原因
- MBR中的GRUB引导程序遭到破坏
- grub.conf文件丢失、引导配置有误
2.2 故障现象
- 系统引导停滞,显示‘grub>’提示符
2.3 解决思路
- 尝试手动输入引导命令
- 进入急救模式,重写或者从备份中恢复grub.conf
- 向MBR扇区中重建grub程序
2.4 详细操作步骤
要求:模拟破坏grub文件及程序,然后对其进行修复
步骤一:模拟破坏grub.cfg配置文件
mv /boot/grub2/grub.cfg /opt //将在规定目录下的grub.cfg配置文件移动到/opt
步骤二:重启进入急救模式
①reboot重启后,在starting读档的2s间快速按一次“ESC”键,出现“Boot Menu”界面,选择“CD-ROM Drive”,再选择“Troubleshooting”,再选择“Rescue a CentOS system”,最后选择“Continue”后,进入急救模式
②切换根后,重新安装grub2程序
chroot /mnt/sysimage //从光盘的根切换到主机系统的根
grub2-install /dev/sda //重新在sda磁盘中安装grub2程序
grub2-mkconfig -o /boot/grub2/grub.cfg //重新生产配置文件
exit //退出
reboot //重启
3、遗忘root用户的密码
3.1 故障原因
- 忘记root用户的密码
3.2 故障现象
- 无法进行需要root权限的管理操作
- 若没有其他可以账号,将无法登陆系统
3.3 解决思路
- 进入急救模式,重设密码
3.4 详细操作步骤
3.4.1 有光驱模式重设密码
chroot /mnt/sysimage //从光盘的根切换到主机系统的根
passwd 用户名 //修改密码
exit //退出
reboot //重启
3.4.2 无光驱模式重设密码
①进入系统时选择内核界面,选中第一个选项并按“e”键
②将光标移动到Linux开头行的最后,添加rd.break,然后“ctrl+x”运行,进入单用户模式
③进入单用户模式后,重新挂载并添加读写权限,然后切换到系统的根修改密码
mount -o remount,rw /sysroot //重新挂载并添加读写权限
chroot /mnt/sysimage //从光盘的根切换到主机系统的根
passwd 用户名 //修改密码
touch /.autorlabel //如果开启selinux需重新打上标记
exit //退出
reboot //重启
三、服务程序管理
1、管理服务程序的状态
开机、关机、重启、重新加载配置文件、查看状态、开机自启、开机不自启
2、chkconfig
chkconfig
是Linux系统中早期的服务管理工具,应用于CentOS 6
chkconfig系统服务控制命令 | |
---|---|
命令 | 说明 |
service 服务程序 start | 开启服务程序 |
service 服务程序 stop | 关闭服务程序 |
service 服务程序 restart | 重新启动服务程序 |
service 服务程序 reload | 重新加载服务程序 |
service 服务程序 status | 查看服务程序的当前状态 |
chkconfig --level 35 服务程序 on | 开机自启动服务程序的字符界面和图形界面 |
chkconfig --level 35 服务程序 off | 关闭开机自启动服务程序的字符界面和图形界面 |
chkconfig --add 服务程序 | 添加自启动的服务程序 |
3、systemd
3.1 systemd
命令
systemd
是一个相对较新的系统管理器和初始化系统,应用于CentOS 7
systemd系统服务控制命令 | |
---|---|
命令 | 说明 |
systemctl start 服务程序1 服务程序2…… | 开启服务程序 |
systemctl stop 服务程序1 服务程序2…… | 关闭服务程序 |
systemctl status 服务程序1 服务程序2…… | 查看服务程序的当前状态 |
systemctl reload 服务程序1 服务程序2…… | 重新加载服务程序 |
systemctl restart 服务程序1 服务程序2…… | 重新启动服务程序 |
systemctl enable 服务程序名 | 开机自启服务程序 |
systemctl disable 服务程序名 | 开机不自启服务程序 |
systemctl enable --now 服务程序名 | 开机自启,并立即启动 |
systemctl disable --now 服务程序名 | 开机不自启,并立即关闭 |
3.2 配置编译安装的程序软件开机自启动的步骤
前提:以编译安装完的nginx服务软件为例
3.2.1 编写nginx开机自启动的配置文件
vim /usr/lib/systemd/system/nginx.service //编写nginx开机自启动的配置文件
[Unit]
Description=The nginx HTTP and reverse proxy server //描述软件的功能
[Service]
Type=forking
PIDFile=/dh17/nginx/logs/nginx.pid //指定nginx进程的pid号
ExecStart=/dh17/nginx/sbin/nginx //使用绝对路径启动nginx可执行文件
ExecStop=/usr/bin/kill -s TERM $MAINPID //杀死nginx的主进程pid号
ExecReload=/dh17/nginx/sbin/nginx -s reload //nginx命令发送重新加载的信号
[Install]
WantedBy=multi-user.target //安装字符界面
3.2.2 重新加载所有配置文件并开启nginx服务
systemctl daemon-reload //通知systemd重新加载所有的配置文件
systemctl start nginx //开启nginx服务
systemctl status nginx //查看nginx当前状态
pstree -p | grep nginx //查看当前nginx进程的pid号
ss -natp | grep 80 //查看80端口的进程信息
3.2.3 关闭nginx服务
systemctl stop nginx //关闭nginx服务
systemctl status nginx //查看nginx当前状态