系统引导是从操作系统运行的开始,在用户能够正常登录到系统之前,linu操作系统的引导过程将完成一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备。
开机自检:服务器主机开机以后,将根据主板BIOS中的设置对CPU(Central Processing Unit,中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
MBR引导:当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中的MBR(Master Boot Record,主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单(如GRUB)。
CRUB菜单:对于Linux系统来说,GRUB(GRand UNified Bootloader,统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转给内核。值得注意的是,Centos7采用的是GRUB2启动引导器。
加载Linux内核:Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源和系统程序之间,负责次元分配与调度。内核接过系统控制权以后,将完整掌握整个linux操作系统的运行过程。在OpenEuler系统中,默认的内核文件位于“/boot/vlinuz-6.6.0-72.0e2403spl.x86_64”
init进程初始化:为了完成这一步的系统引导过程,linux内核将系统中的“/sbin/init”程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录。
系统初始化进程及文件
init进程:
Linux 操作系统中的进程使用数字进行标记,每个进程的身份标记号称为 PID。在引导Linux 操作系统的过程中,“/sbin/init”是内核第一个加载的程序,因此 init 进程对应的 PID 号总是为 1。
init 进程运行以后将陆续执行系统中的其他程序,不断生成新的进程,这些进程称为 init 进程的子进程。反过来说,init 进程是这些进程的父进程。当然,这些子进程也可以进一步生成各自的子进程,依次不断繁衍下去,最终构成一棵枝繁叶茂的进程树,共同为用户提供服务。
Systemd概述:
Systemd 是 Linux 操作系统的一种 init 软件,Cent0s 7 系统中采用了全新的 Systemd 启动方式,取代了传统的 SysVinit。Systemd 启动方式使系统初始化时诸多服务并行启动,大大提高了开机效率。0penEuler 系统中“/sbin/init”是“/lib/systemd/system”的链接文件。换言之,0penEuler 系统中运行的第一个 init 进程是“/lib/systemd/systemd”。systemd 守护进程负责 Linux 的系统和服务,systemctl 用于控制 Systemd 管理的系统和服务状态。
init进程和systemd的区别
特性 Init进程 Systemd
启动方式 串行启动(按顺序执行脚本) 并行启动(依赖解析后同时启动服务)
服务管理 依赖SysV脚本或Upstart(部分改进) 通过.service单元文件统一管理
依赖解析 需手动定义脚本执行顺序 自动解析单元间的依赖关系(After=、Reauires=)
日志管理 分散(如syslog、klogd) 集中式日志(journalctl)
资源控制 无原生支持 集成Cgroups管理进程资源
动态服务 需重新或手动触发 支持Socket/D-Bus激活(按需启动)
挂载管理 静态配置(如/etc/fstab) 自动挂载与动态设备管理
Systemd 将其管理的资源组织成各种类型的单元(Unit),以下列举出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的单元
Linux 系统服务是指运行在后台并提供特定功能的应用程序,如网站服务、FTP 服务等。Linux 通过将不同的系统服务进行搭配组合来协同满足不同的功能需求。不同的服务组合其实现的功能也各不相同,就好比不同的药方能医治不同的病症一样。
早期 Linux 操作系统中的 SysVinit 机制,默认包括七种不同的服务搭配方式,其中每一种搭配方式称为运行级别,类似于 Windows 系统中的正常启动、安全模式、不带网络连接的安全模式等。这些运行级别分别使用数字 0,1,…,6 来表示。为了向下兼容 SysVinit 系统,Systemd 使用了相应的 target(目标)模拟了 SysVinit 的运行级别,以下列出级别所对应的target,并说明了target的含义用处。
运行级别 Systemd的target 说明
0 关机状态 使用该级别时将会关闭主机
1 rescue.target 单用户模式,不需要密码验证即可登录系统,多用于系统维护
2 multi-user.target 用户定义/域特定运行级别。默认等同于3
3 multi-user.target 字符界面的完整多用户模式,大多数服务器主机运行在此级别
4 multi-user.target 用户定义/域特定运行级别。默认等同于3
5 graphical.target 图形化界面的多用户模式,提供了图形桌面操作环境
6 reboot.target 重新启动,使用该级别时将会重启主机
init 5 需要安装
dnf -y install gnome-shell gdm gnome-session
在终端输入 init 5
输入账号、密码
排除系统启动类故障
Linux操作系统的启动过程涉及MBR(Main Boot Record,主引导记录)、GRUB启动菜单、系统初始化配置文件等各方面,其中任何一个环节出现故障都可能导致系统启动失常,因此一定要注意做好相关文件的备份作用
MBR 扇区故障:
MBR 位于物理硬盘的第一个扇区(512 字节),该扇区又称为主引导扇区(MBR 扇区),除了包含系统引导程序的部分数据外,还包含整个硬盘的分区表记录。当主引导扇区发生故障时,将可能无法进入引导菜单,或者因无法找到正确的分区位置而无法加载系统,通过该硬盘引导主机时很可能进入黑屏状态。
1、备份MBR扇区数据
mkdir /backup #创建目录
mount /dev/sdb1 /backup #将磁盘分区挂载到/backup目录下
dd if=/dev/sda of=/backup/sad.mbr.bak bs=512 count=1 #备份MBR扇区数据
2、模拟MBR扇区故障
这里仍然使用 dd 命令,人为地将 MBR 扇区的记录覆盖,以便模拟出 MBR 扇区被破坏的故障情况(切记要先做好备份,并且将备份文件存放到其他硬盘)。执行以下操作可以从设备文件 zero 中读取512 字节的数据,并将其覆盖到第一块硬盘(sda),从而破坏 NBR 扇区中的数据。
dd if=/dev/zero of=/dev/sda bs=512 count=1
完成以上操作后,重启电脑将会出现“Operating system not found”的提示信息,表示无法找到可用的操作系统,因此无法启动主机。
3、从备份文件中恢复MBR扇区数据
由于 MBR扇区被破坏以后,就无法再从该硬盘启动系统,所以需要使用其他硬盘中的操作系统进行引导,或者直接使用 0penEuler 系统的安装光盘进行引导。不管使用哪种方式,目的都是相同的--获得一个可以执行命令的 Shell 环境,以便从备份文件中恢复 MBR 扇区中的数据。
在选择“Rescue a openEuler linux system” 选项,将以“救援模式”引导linux操作系统
然后系统会自动查找硬盘中的Linux分区并尝试挂载到/mnt/sysimage目录(选择 “1”确认并俺Enter 键继续),进入到带“sh-4.2#”提示符的Bash shell环境,只要将执行相应的命令挂载到保存有备份文件的硬盘分区,将数据恢复到硬盘中即可。
GRUB引导故障
可以通过启动菜单的方式进入不同的操作系统,当配置文件丢失或关键配置出现错误,或者MBR中的引导程序遭到破坏时,Linux主机启动后可能出现“grub”的提示符,无法完成进一步的系统启动过程。
将grub的配置文件备份出来,然后重启进入 grub终端
然后进入救援模式 上面有进入救援模式的操作
-
chroot /mut/sysimage
-
grub2-install /dev/sda
-
exit
-
reoot
主要配置项。
menuentry:指定在启动菜单中显示的操作系统名称。
set root:指定包含内核等引导文件的/boot 分区所在位置。
insmod:加载指定的模块到内核。
Linux16:指定内核文件所在位置,内核加载时权限为只读“ro”,并通过“root=”指定根分区的设备文件位置。
initrd16:指定启动内核所使用的临时系统镜像文件所在的位置。
服务控制及优化启动过程
系统服务控制
在openEuer系统中,各种系统服务的控制脚本默认放在/usr/lib/systemd目录下,通过systemctl 命令工具可以实现对指定系统服务的控制,语法格式如下
systemctl 控制类型 服务名称
常见的几种控制类型如下
start (启动):运行指定的系统服务程序,实现服务功能。
stop(停止):停止指定的系统服务程序,关闭相应的功能。
restart(重启):先退出,再重新运行指定的系统服务程序。
reload(重载):不退出服务程序,只是刷新配置。在某些服务中与restart的操作相同。
status(查看状态):查看指定的系统服务的运行状态及相关信息。
当要运行尚未启动的服务
systemctl start httpd
若查看指定的服务运行状态,只需要将上述命令中的“start”改成“status”即可
systemctl status httpd
若是要终止服务程序,需将上述命令中的“status”改为“stop” 即可
systemctl stop httpd
控制类型“restart”是需要释放旧的资源全部从头开始的情况,他会先关闭相应的服务程序,然后重新运行,例如,更改了网卡的配置文件后,为了激活新的配置可以重新启动网卡,命令如下
systemctl restart NetworkManager
对于实际生产环境中运行的服务器,不要轻易执行stop和restart的操作,以免用户访问的时候中断,带来不必要的损失,可以使用重载的命令重新加载配置,而不是生硬的执行“restart”
systemctl reload httpd.service
restart 和 service的区别
restart:将旧的程序关闭后,再重新启动,启动后,唯一标识符会随着重启而改变的。
service:将应用程序重新加载配置,唯一标识符不会随着重更新加载而改变。
切换运行级别
查看系统的target,当前目标尚未切换过级别
通过rarget的操作还可以实现两个特殊的功能,就是关机和重启,运行级别0、6分别对应着关机和重启这两个特殊模式,可以执行init 0 与 init 6 实现相应的关机、重启
-
init 0 #关机
-
init 6 #重启
而运行级别0、6 又分别对应着systemd 的“powerodd.target”和"reboot.target",因此,执行这两个命令也可以实现相应的关机、重启操作
-
systemctl powreoff #关闭当前系统
-
systemctl reboot #重启当前系统
优化启动过程
常见的系统服务
服务名称 用途简介 备注
atd 延期、定时执行任务 建议关闭
Bluetooth 发现、认证蓝牙相关设备 建议关闭
crond 按预定周期执行计划任务 建议开启
irgbalance 多核心CPU处理器的调度支持 建议开启
kdump 记录内核崩溃时的内存信息 建议关闭
lym2-monitor LVM 管理及监控 建议开启
netfs 访问共享文件夹等网络文件系统 建议开启
network 配置及使用网卡、网络地址 建议开启
restorecond SELinux 安全机制的文件监控和恢复功能 建议关闭
rhnsd 访问 Red Hat Network,获取通知、提交订闻等 建议关闭
rpcgssd 管理 NFS 访问中的客户程序语境 建议关闭
saslauthd 基于文本的身份认证 建议关闭
smartd 监控本地硬盘的状态并发送故障报告 建议开启
smb 文件共享服务 建议关闭
sshd 提供远程登录和管理 Linux 主机的功能 建议开启
rsyslog 记录内核、系统的日志消息 建议开启
vsftpd 通过 FTP 提供文件上传、下载功能 建议关闭
优化开机自动加载的服务
使用ntsysv工具
ntsysv 工具可以在字符模式中运行,为用户提供一个仿图形的交互式操作界面,专门用于集中配置各种系统服务的启动状态。当需要同时设置多个服务的启动状态时,使用ntsysv 工具会非常方便。单独执行“ntsysv”命令时仅用于管理当前运行目标中的服务;通过“--1eve1”选项可以对指定运行目标(级别)中的服务进行管理。例如,执行“ntsysv --level 35”命令可以打开 ntsysv 管理程序
操作时按1、!方向键来选择不同的系统服务,按 Space(空格)键设置服务的默认启动状态(“[*]”表示启动,“[ ]”表示关闭)。如果要查看所选定服务的说明信息,按 F1 键可以获取帮助。
使用systemctl工具
systemct1 工具与 ntsysv 的功能类似,但是 systemctl 不提供交互式的操作界面,它用于查询或设置系统服务的默认启动状态。当需要设置某一个服务在当前运行目标中的默认启动状态时,使用systemctl 工具会更有效率。使用 systemctl 工具控制服务开机启停的命令格式如下!
systemctl 控制选项 服务名称
常用选项有三种:
enable:开机自动启动。
disable:开启自动关闭。
is-enable:查看开机启动状态。
可以通过以下操作即可配置httpd服务的开机自启动
systemctl enable httpd.service