目录
一、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服务
①BIOS加电自检:
进入BIOS界面的方法
选择“打开电源时进入固件”后,就能进入BIOS界面
修改BIOS加电自检硬件的优先级
②MBR引导:
③GRUB菜单
④加载Linux内核
⑤init进程初始化
总过程详述:
加电后bios程序会自检硬件,硬件无故障后,会根据第一启动项去找内核,一般来说第一启动项是硬盘,找到硬盘后,会根据mbr 的指引找到完整的 grub 程序,再根据rub的配置文件找到内核文件的具体位置,然后将内核文件加载到内存中运行,内存加载好后会启动第一个程序。
①init进程
init
是Linux系统中的第一个用户空间进程,其进程ID(PID)始终为1init
通常通过/etc/inittab
文件进行配置,并且它按照运行级别(runlevel)来启动系统服务和进程②Systemd
Init与Systemd对比 | ||
---|---|---|
Init | systemd | |
启动区别 | 串行启动后续程序,按顺序一个个启动 | 并行启动后续程序,全部一起启动 |
功能和特性 | init 相对较为简单 |
systemd 提供了更多的功能和特性,是系统的级的程序,代为管理系统中的服务程序 |
配置方式 | init 使用/etc/inittab 文件进行配置 |
systemd 使用单元文件(unit files)进行配置 |
统一接口 | init 需要依赖于多个独立的脚本文件 |
systemd 提供了统一的接口和工具来管理系统服务和资源 |
单元类型 | 扩展名 | 说明 |
---|---|---|
Service | .service | 描述一个系统服务 |
Socket | .socket | 描述一个进程间通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automount | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述一个内存交换设备或文件 |
Path | .path | 描述一个文件系统中文件或目录 |
Timer | .timer | 描述一个定时器 |
Target | .target | 描述一组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 //设置默认的运行级别
拓展:
如果终端的一个服务程序启动出现问题,该服务设置了3、5运行级别,结果导致终端开机自启也卡死,进入不了系统,怎么解决
答:进入Linux系统的其他运行级别如1(单用户模式)将这个服务程序开机自启全部关闭,再reboot重启即可
要求:模拟破坏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字节已恢复
重启即可正常使用系统
步骤一:临时设置远程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字节已恢复
要求:模拟破坏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 //重启
chroot /mnt/sysimage //从光盘的根切换到主机系统的根
passwd 用户名 //修改密码
exit //退出
reboot //重启
①进入系统时选择内核界面,选中第一个选项并按“e”键
②将光标移动到Linux开头行的最后,添加rd.break,然后“ctrl+x”运行,进入单用户模式
③进入单用户模式后,重新挂载并添加读写权限,然后切换到系统的根修改密码
mount -o remount,rw /sysroot //重新挂载并添加读写权限
chroot /mnt/sysimage //从光盘的根切换到主机系统的根
passwd 用户名 //修改密码
touch /.autorlabel //如果开启selinux需重新打上标记
exit //退出
reboot //重启
开机、关机、重启、重新加载配置文件、查看状态、开机自启、开机不自启
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 服务程序 | 添加自启动的服务程序 |
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 服务程序名 | 开机不自启,并立即关闭 |
注:
前提:以编译安装完的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 //安装字符界面
systemctl daemon-reload //通知systemd重新加载所有的配置文件
systemctl start nginx //开启nginx服务
systemctl status nginx //查看nginx当前状态
pstree -p | grep nginx //查看当前nginx进程的pid号
ss -natp | grep 80 //查看80端口的进程信息
systemctl stop nginx //关闭nginx服务
systemctl status nginx //查看nginx当前状态