当前位置: 首页 > news >正文

Linux的启动流程

目录

启动流程如下:

一、开机自检

二、BIOS程序(完成开机自检的程序)

三、按boot启动第一启动顺序

四、读取 MBR(主引导记录)

五、/boot里面的文件系统的驱动

六、内核文件

七、systemd进程

八、运行级别

九、输入用户名与密码

十、思考

十一、单用户模式

十二、系统安装常见故障

1、卡在安装系统加载界面(包括命令加载行和分区前)

2、找不到硬盘

3、怎么区分raid0、raid1、raid5、raid6、raid10:


按一下开机按钮到你输入用户名和密码的整个进入系统的过程都叫做开机启动流程。

首先,让我们思考为什么要去熟知开机启动流程:

1.掌握让某个软件开机自动运行
2.开机不能正常启动,是什么原因…那个环节出现了问题
3.防止黑客植入木马,去查询黑客会把木马放到哪些地方?
 

启动流程如下:

一、开机自检

检测系统外围关键设备(cpu、内存、显卡、I/O、键盘、鼠标等),如发现错误,会给操作者提示或警告。常见问题:内存条松动,BIOS自检报错,系统就会无法启动

二、BIOS程序(完成开机自检的程序)

BIOS是个人电脑后动时加载的第一个软件,一组固化到计算机内主板上一个ROM芯片上的程序,保存着计算机最重要的基本输入输出的程序、开机后自检程序 和 系统自启动程序

BIOS是一个程序会读取CMOS芯片里的参数,了解CPU配置、时间的配置、启动顺序的配置 等。

CMOS:是一个存储参数配置的芯片。

如何进入BIOS:主机—>del键、delete;服务器:开机有提醒;笔记本:F1、F2、F12等

三、按boot启动第一启动顺序

启动顺序:

第一引导顺序:可移动设备(U盘......)

第二引导顺序:硬盘

第三引导顺序:光驱(安装系统)

第四引导顺序:网络中安装服务器启动

可以通过 + - 来调整启动顺序

四、读取 MBR(主引导记录)

BIOS 读取执行MBR,MBR 位于硬盘的 0磁道 0柱面 1扇区,共512个字节

这里BIOS并不关心启动设备第一扇区中是什么内容,只负责读取并执行;至此,BIOS任务完成,系统启动控制权交给MBR

五、/boot里面的文件系统的驱动

[root@localhost boot]# ls
config-4.18.0-240.el8.x86_64                             initramfs-4.18.0-240.el8.x86_64kdump.img
efi                                                      loader
grub2                                                    System.map-4.18.0-240.el8.x86_64
initramfs-0-rescue-c60d2d9754344502ada018e9d5f81a56.img  vmlinuz-0-rescue-c60d2d9754344502ada018e9d5f81a56
initramfs-4.18.0-240.el8.x86_64.img                      vmlinuz-4.18.0-240.el8.x86_64

grub2是现在最新的主引导程序,Grub2负责加载内核、initramfs和启动操作系统,它的只要目标是:将linux内核加载到主内存中 

  1. 提供启动菜单:Grub2在计算机启动时显示一个菜单,列出可用的操作系统和内核选项。用户可以选择希望启动的操作系统或内核版本。
  2. 加载操作系统内核:一旦用户选择了要启动的操作系统或内核,GRUB2负责加载相应的内核文件(例如vmlinuz)到内存中。
  3. 加载初始RAM磁盘映像(initramfs):对于使用initramfs的Linux系统,Grub2还负责将initramfs文件加载到内存中。initramfs包含了用于引导系统的必要文件和驱动程序。
  4. 启动操作系统:当内核和initramfs被加载后,Grub2将控制权转交给内核,启动操作系统的初始化过程。
  5. 提供启动参数:Grub2允许用户在启动菜单中设置启动参数,如内核参数、运行级别等。这些参数可以影响系统的启动行为和配置。
  6. 支持多重引导:Grub2允许在同一计算机上安装多个操作系统,并提供方便的菜单选择界面,使用户可以轻松切换不同的操作系统。

六、内核文件

vmlinuz 和 initramfs:协同工作以确保系统能够正确加载并运行。

vmlinuz:linux内核的可执行文件,包含操作系统核心功能,如进程管理、内存管理、设备驱动等;负责在启动时初始化硬件、挂载根文件系统,并启动用户空间的第一个进程(init、systemd)

inittramfs:一个临时的根文件系统,在系统启动的早期阶段加载到内存中。

 两者的协同工作流程:

  1. 引导加载程序(GRUB)

    加载 vmlinuz 和 initramfs 到内存。
  2. 内核启动

    解压 vmlinuz,初始化硬件,挂载 initramfs 作为临时根。
  3. initramfs 阶段

    执行初始化脚本,加载驱动、挂载真正的根文件系统。
  4. 切换到真实根文件系统

    内核卸载 initramfs,将控制权交给用户空间的初始化进程(如 systemd)。

七、systemd进程

CentOS6.x 启动的第一个进程是init

CentOS7.x 启动的第一个进程是systemd

八、运行级别

接下来是启动对应级别的服务,加载所有守护进程并设置目标或运行级别值,然后就可以进入login界面。

运行级别:

0 ——> 关机

1 ——> 单用户模式(破密码)

2 ——> 多用户模式(不含NFS服务)

3 ——> 完全多用户模式 multi-user

4 ——> 系统保留(管理员自定义用途,几乎没有用)

5 ——> 图形模式(GUI界面)

6 ——> 重启动

在CentOS6里面:

查看运行级别: runlevel 

临时修改运行级别:init  运行级别

永久修改:vim  /etc/inittab   (0、6不能设为默认级别)

chkconfig 用于管理系统服务启动状态,比如chkconfig --level 35 httpd on # 在运行级别3和5下启用httpd服务,off是禁用。chkconfig --list 是显示所有。

较新版本就使用suystemctl命令(enable)启动

在CentOS7里面:

查看运行级别:systemctl  get-default

设置运行级别:systemctl  set-default  multui-user.target  (设置为第三运行级别)

        multui-user.target ==>3

        graphical.target ==> 5

/etc/systemd/system/multi-user.target.wants/中存放着开机自启的服务,想要移除==>disable

九、输入用户名与密码

用户输入用户名与密码后
Linux系统自动进入/etc/passwd 查找用户名
再根据用户名进入/etc/shadow 查找用户密码

然后登录进去之后,会运行用户家目录下的环境变量初始化文件(就是加载环境变量),有以下四个:

全局配置,对所有用户有效:/etc/profile  /etc/bashrc

局部配置,只对登录的用户有效:~/.bash_profile  ~/.bashrc

十、思考

1.如何查看一个服务是否开机启动?  

centos7.x:systemctl  is-enabled  服务名

输出enabled则是已设置开机自启,disabled则未设置

centos6.x:chkconfig  --list   服务名

输出中包含3:on或5:on,则表示在对应运行级别开机自启

2.设置yum install安装的nginx服务开机启动

systemctl   enable   --now  服务名

systemctl   start    服务名

systemctl   status    服务名

3.破坏MBR文件能不能运行?

不能开机,MBR位于磁盘的第一扇区(512字节),包含引导加载程序和分区表

系统启动时无法加载引导程序,直接卡在BIOS/UEFI界面或报错(如No bootable device)

需要进入救援模式,使用备份或重建MBR(如grub-install 或 dd 命令)。

4.假如你是一个黑客,如何让你的木马程序开机启动?(开玩笑的)

理论上:

  • centos7.x:创建 /etc/systemd/system/xx.service 恶意服务文件并重载自启
  • centos6.x及以前:在 /etc/init.d 下创建服务管理脚本,设置x权限,添加服务到开机启动(chkconfig)
  • cron任务:添加@reboot  /path/to/malware 到用户crontab
  • 用户启动脚本
  • 内核模块:通过 modprobe 加载恶意内核模块


5.如何设置默认的运行级别为3?  

centos6.x:init 3

centos7.x:systemctl set-default  multui-user.target


6.编译安装的软件如何设置开机启动?

[Unit]
Description=My Custom App
After=network.target[Service]
ExecStart=/usr/local/bin/myapp
Restart=on-failure[Install]
WantedBy=multi-user.target

然后重载并设置开机自启

其他方法:

将启动命令写入 /etc/rc.local(需执行权限)

添加@reboot /path/to/commandcrontab -e

7.编写的脚本如何设置开机启动?
8.删除/boot分区里的内容,是否可以开机?

不能,/boot分区存储内核(vmlinuz)和初始化内存盘(initramfs),以及引导加载程序(如GRUB)的配置文件。系统启动时可能显示GRUB rescue>或直接黑屏。需通过Live CD/USB挂载/boot分区,重新安装内核和GRUB

9.把内存条拔出来,是否可以开机?

不能,在自检的时候会检测出来,发出警告声。内存是CPU与外部存储交互的必需硬件,无内存则无法通过开机自检(POST)

十一、单用户模式

1、开机时进入如下界面按下方向键盘阻止系统自动继续

2、按e键出现下面界面

3、按方向键定位到最后,找到“ro”这一行,ro的意思是read only(只读)将“ro”替换成 rw init=/sysroot/bin/sh

十二、系统安装常见故障

1、卡在安装系统加载界面(包括命令加载行和分区前)

处理方法:

1、加参数acpi=off(禁止了几乎所有的ACPI功能);

临时添加:按e键进入编辑模式,在linux或linux16开头的行,末尾添加acpi=off,然后按Ctrl+X或F10启动系统。

2、加参数nomodeset=0禁用内核显卡驱动(内核不加载显卡而用BIOS模式直到图形界面运行)

【解决图形显示问题,快速绕过显卡驱动初始化失败,是系统能够正常启动】

2、找不到硬盘

处理方法:

1、核查raid划分情况以及raid状态;

2、修改bios关于硬盘模式设置;

3、安装时通过添加 linux dd 参数加载raid卡驱动;

4、更换系统版本

3、怎么区分raid0、raid1、raid5、raid6、raid10:

raid0:

RAID0 俗称“条带”,它将两个或者多个硬盘组成一个逻辑硬盘,容量是所有硬盘之和。

RAID读写性能最高,100%的磁盘空间利用率。此方式硬盘数据没有冗余,没有容错,一旦一个物理硬盘损坏,则所有数据均丢失。

RAID1:

AID1俗称“镜像”,它最少由两个硬盘组成,而且两个硬盘上存储的数据均相同,以实现数据冗余。

在所有的RAID中数据安全性 最高,即使一块磁盘发生故障,仍能正常运转。 镜像磁盘没有完全 故障,数据就不会丢失。一半的磁盘空间用于存储冗余数据,磁盘空间利用率50%

RAID5:

 RAID5采用硬盘分割的技术,最少需要三块硬盘才可以组建RAID5阵列,它没有数据冗余,而是把数据奇偶校验的方式存储到每块硬盘上,它将数据分散储存在阵列的每个磁盘,并且还伴有一个数据校验位,数据位与校验位通过算法能相互验证,当丢失其中的一位时,RAID控制器能通过算法,利用其它两位数据将丢失的数据进行计算还原。 因而RAID5最多只允许一个硬盘损坏,有容错性

RAID6:

在RAID5的基础上改良而成的

优点:允许两个物理磁盘发生故障,而不丢失数据。 读取性较高。

缺点:成本高于RAID 5,写入性能较低(低于RAID 5)。

RAID10:

RAID10是先将数据进行镜像操作,然后再对数据进行分组。 RAID 1 在这里就是一个冗余的 备份阵列,而 RAID 0 则负责数据的读写阵列。 至少要四块盘两块做 raid0,另两块 做 raid1,RAID 10 对存储容量的利用率和 RAID 1 一样低,只有 50%.。 Raid1+0 方 案造成了 50%的磁盘浪费,但是它提供了 200%的速度和单磁盘损坏的数据安全性并且当同时损坏的磁盘不在同一 Raid1 中,就能保证数据安全性。

http://www.xdnf.cn/news/599617.html

相关文章:

  • 华为仓颉语言生成的程序的分发部署
  • Basic concepts for seismic source - Coulomb failure stress change
  • C++内存复制
  • (01)华为GaussDB((基于PostgreSQL))高斯数据库使用记录,dbeaver客户端配置高斯驱动,连接高斯数据库
  • 订单越来越到导致接口列表查询数据缓慢解决思路
  • 【结构体宏定义】C语言结构体与宏定义:传感器配置的巧妙结合
  • 高等数学-求导
  • 计算机组成体系结构
  • 数据库-数据处理
  • B2160 病人排队
  • 算法题(153):哈夫曼编码
  • CAD打印没有标注解决方法
  • vue2实现元素拖拽
  • Git实战演练,模拟日常使用,快速掌握命令
  • “轩辕杯“云盾砺剑 CTF挑战赛web方向题解
  • 【AI论文】VisualQuality-R1:通过强化学习进行推理诱导的图像质量评估
  • 【Java】异常的初步认识
  • 1.2 Box以及 InsideBox的使用
  • python字符串
  • fastadmin添加管理员账号只能查看一个表中指定条件的数据
  • 【朝花夕拾】S32K144 backdoor key解锁后劳德巴赫或者JLINK更新app
  • Python3 批量处理银行电子回单
  • 深搜题(如何找到进入下一层深搜的条件)
  • 第十九章 ADC——电压采集
  • ZeroMQ Sockets介绍及应用示例
  • 01_消息中间件概述
  • for...in 和 for...of:用法、区别
  • Vue2 项目报错问题收录(持续更新...)
  • 101个α因子#21
  • 火语言UI组件--控件事件触发