一.linux引导过程
1.开机自检
服务器主机开机以后,将根据主板 bi0s中的设置对cpu(centralprocessingunit,中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
2.mbr引导
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中br(masterboot record,主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据mbr记录中的引导信息调用启动菜单(如 grub)准雜準昶隐
3.grub菜单
对于 linux 操作系统来说,grub(grand unified bootloader,统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给grub以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载 linux 内核文件,然后将系统控制权转交给内核。需要注意的是,centos7采用的是grub2 启动引导器。
4.加载linux内核
linux 内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个linux操作系统的运行过程。在0peneuler 系统中,默认的内核文件位于“/boot/vmlinuz-6.6.0-72.0.0.76.oe2403sp1.x86_64”。
5.systemd进程初始化
为了完成进一步的系统引导过程,linux内核首先将系统中的“/sbin/init”程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录。
二.系统初始化进程及文件
1.init进程
linux 操作系统中的进程使用数字进行标记,每个进程的身份标记号称为 pid。在引导linux 操作系统的过程中,“/sbin/init”是内核第一个加载的程序,因此 init 进程对应的 pid号总是为 1。init 进程运行以后将陆续执行系统中的其他程序,不断生成新的进程,这些进程称为 init 进程的子进程。反过来说,init 进程是这些进程的父进程。当然,这些子进程也可以进一步生成各自的子进程,依次不断繁衍下去,最终构成一棵枝繁叶茂的进程树,共同为用户提供服务。
2.systemd进程
systemd 是 linux 操作系统的一种 init软件,cent0s7系统中采用了全新的 systemd 启动方式,取代了传统的 sysvinit。systemd 启动方式使系统初始化时诸多服务并行启动,大大提高了开机效率。0peneuler 系统中“/sbin/init”是“/lib/systemd/systemd”的链接文件。换言之,0peneuler 系统中运行的第一个 init 进程是“/lib/systemd/systemd”。systemd 守护进程负责 linux 的系统和服务,systemctl 用于控制 systemd 管理的系统和服务状态。systemd 将其管理的资源组织成各种类型的单元(unit)。
systemd 使用的各种单元类型:
单元类型 | 扩展名 | 说明 |
service | .service | 描述一个系统服务 |
socket | .socket | 描述一个进程间通信的套接字 |
device | .device | 描述一个内核识别的设备文件 |
mount | .mount | 描述一个文件系统的挂载点 |
automount | .automount | 描述一个文件系统的自动挂载点 |
swap | .swap | 描述一个内存交换设备或交换文件 |
poth | .poth | 描述一个文件系统中文件或目录 |
timer | .timer | 描述一个定时器(用于实现类似cron的调度任务) |
snapshot | .snapshot | 用于保存一个systemd的状态 |
scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
slice | .slice | 描述居于cgroup的一组通过层次组织的管理系统进程 |
target | .target | 描述一个systemd的单元 |
排除系统启动类故障
三.mbr扇区故障
1.备份mbr扇区数据
由于 mbr扇区中包含了整个硬盘的分区表记录,因此该扇区的备份文件必须存放到其他的存储设备中,否则在恢复时将无法读取到备份文件。例如,执行以下操作可以将第一块硬盘(nvme0n1)的mbr扇区备分到第二块硬盘的 sda1 分区中(挂载到/mbr 目录)。
2.模拟mbr扇区故障
这里仍然使用 dd 命令,人为地将mbr扇区的记录覆盖,以便模拟出 mbr扇区被破坏的故障情况(切记要先做好备份,并且将备份文件存放到其他硬盘)。例如,执行以下操作可以从设备文件zero中读取512 字节的数据,并将其覆盖到第一块硬盘(nvme0n1),从而破坏 mbr 扇区中的数据。
3.从备份文件恢复mbr扇区数据
由于 mbr扇区被破坏以后,就无法再从该硬盘启动系统,所以需要使用其他硬盘中的操作系统进行引导,或者直接使用0peneuer系统的安装光盘进行引导。不管使用哪种方式,目的都是相同的--获得一个可以执行命令的 shell 环境,以便从备份文件中恢复 mbr 扇区中的数据。以使用 0peneuler 安装光盘引导为例,当出现安装向导界面时,选择“troubleshooting”选项,进入修复故障页面。
然后系统会自动査找硬盘中的 linux分区并尝试将其挂载到/mnt/sysimage 目录(选择“1”确认并按 enter 键继续)。接下来会出现rescue 字符界面。
最后,按 enter 键后将进入带“sh-4.2#”提示符的 bash shell 环境,只要执行相应的命令挂载保存有备份文件的硬盘分区(sda1),并将数据恢复到硬盘“/dev/nvme0n1”中即可,具体探作如下。需要注意的是,当前使用的系统环境是光盘中的linux 目录结构。
四.grub引导故障
大多数 linux 操作系统默认使用的引导程序,可以通过启动菜单的方式选择进入不同的操作系统(如果有)。当配置文件/boot/grub2/grub.cfg 丢失,或者关键配置出现错误,或者 mbr中的引导程序遭到破坏时,linux主机启动后可能只出现“grub”的提示符,无法完成进一步的系统启动过程。
由于在“grub>”环境中使用的命令较为复杂,且一般也难以记住相关的命令选项、内核加载参数等,因此用户可以采用另一种修复办法,同样使用 0peneuler 的安装光盘引导进入急救模式(参考上一小节)。若分区表未被破坏,将备份过的/boot/grub/grub.cfg文件恢复即可。
如果未备份过/boot/grub2/grub.cfg,则需要重新建立/boot/grub2/grub.cfg文件,若未执行“chroot /mnt/sysimage”命令,则重新建立的 grub.cfg 配置文件应该位于/mnt/sysimage/boot/grub2/grub. cfg.
如果是mbr扇区中的引导程序出现损坏,则在重建grub.cfg配置文件后仍然可能无法成功启动系统,这时可以通过 0peneuler 救援模式的 shell 环境重新安装 grub 引导程序。切换到待修复的 linux操作系统根环境,执行“grub2-install /dev/sda”命令可以重新将 grub 引导程序安装到第一块硬盘(nvme0n1)的 mrb 扇区,具体操作如下:
注意:执行“dd if=/dev/zero of=/dev/sda bs=446 count=1”命令可以模拟出对 mbr 扇区中 grue引导程序的破坏(注意先做好备份),但并不会破坏分区表(实际上分区表保存在mbr扇区中的第447~510 字节中,mbr 总共 512 字节,前 446 字节是主引导记录,从第 447 字节开始后的 64 字节,每 16 字节为一组,是硬盘分区表)。
遗忘root用户的密码
进入急救模式的 shell环境,切换到待修复 linux 操作系纺的根目录环境,直接执行“passwd root”命令重设root 用户的密码即可;或者修改/ete/shadow 文件,将 root 用户的密码字段清空,重启后以空密码可登录系统。以下操作即为进入急救模式重设 root 用户密码。
五.服务控制及优化启动过程
1.系统服务控制
在 openeuler 系统中,各种系统服务的控制脚本默认放在/usr/lib/systemd 目录下。通过systemctl命令工具可以实现对指定系统服务的控制,语法格式如下:
systemctl 控制类型 服务名称 |
常见的控制类型:
start | 运行指定的系统服务程序 |
stop | 终止指定的系统服务程序 |
restart | 重启指定的系统服务程序 |
reload | 不退出服务程序,只刷新配置 |
status | 查看指定的系统服务的运行状态及相关信息 |
2.切换运行级别
(1.查看系统的target
明确当前系统所在的 target 将有助于管理员排除一些应用故障。若未能确知当前所处的目标,可以直接执行“runlevel”命令进行査询,显示结果中的两个字符分别表示切换前的目标、当前的目标。若之前尚未切换过运行级别,则第1列将显示“n”。
认的 target,命令如下:
若用户想查看系统启动时默认运行的target,可以执行“systemctlget-default”命令以显示系统默认的target。
(2.切换系统的target
运行级别 | systemd的target | 说明 |
init 0 | 关机 | 使用该级别时将会关闭主机 |
init 1 | rescue.target | 单用户模式,不需要密码验证即可登录,多用于系统维护 |
init 2 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
init 3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
init 4 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
init 5 | graphical.tatget | 图形界面的多用户模式,提供了图形桌面操作环境 |
init 6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
上述内容中的运行级别切换均为临时切换,若要永久切换运行级别,可通过n(链接)命令指定当前系统的默认运行级别。例如,执行如下命令可将当前系统的开机默认运行级别从graphical.target 更改 multi-user.target。其中,-s 选项表示创建软链接;-f 表示强行删除任何已存在的目标文件。
六.优化启动过程
1.常见的系统服务
服务名称 | 用途简介 | 备注 |
atd | 延期、定时执行任务 | 建议关闭 |
bluetooth | 发现、认证蓝牙相关设备 | 建议关闭 |
crond | 按预定周期执行计划任务 | 建议开启 |
irqbalance | 多核心cpu处理器的调度支持 | 建议开启 |
kdump | 记录内核崩溃的内存信息 | 建议关闭 |
lvm2-monitor | lvm管理及监控 | 建议开启 |
netfs | 访问共享文件夹等网络文件系统 | 建议开启 |
network | 配置及使用网卡、网络地址 | 建议开启 |
restorecond | selinux安全机制的文件监控和恢复功能 | 建议关闭 |
rhnsd | 访问red hat network,获取通知、提交订阅等 | 建议关闭 |
rpcgssd | 管理nfs访问中的客户程序语境 | 建议关闭 |
saslauthd | 基于文本的身份认证 | 建议关闭 |
smartd | 监控本地硬盘的状态并故障报告 | 建议开启 |
smb | 文件共享服务 | 建议关闭 |
sshd | 提供远程登陆和管理linux主机的功能 | 建议开启 |
rsyslog | 记录内核、系统的日志信息 | 建议开启 |
vsftpd | 通过ftp提供文件上传、下载功能 | 建议关闭 |
2.优化开机自动加载的服务
linux操作系统在每次开机后会进入默认的systemd 运行目标(如字符模式或图形模式),并运行该目标中默认设为启动的各种系统服务。若要禁止某些系统服务自动运行,可以使用ntsysv或者systemctl 工具进行优化。
(1.使用 ntsysv 工具
单独执行“ntsysv”命令时仅用于管理当前运行目标中的服务;通过“--level”选项可以对指定运行目标(级别)中的服务进行管理。例如,执行“ntsysv--level35”命令可以打开 ntsysv 管理程序
操作时按1、↓方向键来选择不同的系统服务,按space(空格)键设置服务的默认启动状态(“[*]”表示启动,“[]”表示关闭)。如果要查看所选定服务的说明信息,按f1键可以获取帮助。
(2.使用 systemctl 工具
systemctl工具与 ntsysv的功能类似,但是 systemctl 不提供交互式的操作界面,它用于査询或设置系统服务的默认启动状态。当需要设置某一个服务在当前运行目标中的默认启动状态时,使用systemct1工具会更有效率。使用systemctl 工具控制服务开机启停的命令格式如下:
systemctl 控制选项 服务名称 |
常见选项:
enable | 开机自动开启 |
disable | 开机自动关闭 |
is-enable | 查看开机启动状态 |
到此这篇关于linux启动过程分析和常见错误汇总的文章就介绍到这了,更多相关linux启动过程和常见错误内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论