Linux系统:引导过程与服务控制
目录
一、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当前状态
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!