LINUX基础培训之开机启动过程

发布时间:2024年01月06日

前言、本章学习目标?

  1. 掌握系统启动、引导过程 ·
  2. 了解grub.conf的参数设置 ·
  3. 熟悉系统运行级别 ·
  4. 了解加载内核过程

一、LINUX启动引导过程

Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段:

1.开机自检

服务器主机开机以后,将根据主板BIOS中的设置对CPU 、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制剖权,大多时候会移交给本机硬盘。

2.MBR引导

当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中 MBR的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单(如GRUB)。

3.GRUB菜单

对于Linux操作系统来说,GRUB是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB 以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载 Linux内核文件,然后将系统控制权转交给内核。需要注意的是,Centos 7 采用的是 GRUB2启动引导器。

4.加载内核

将内核与镜像加载到内存中

5.init初始化

开启pid=1的进程,进程就是init加载的程序是systemd

二、主引导目录(MBR)

? MBR 也就是主引导记录,位于硬盘的 0 磁道、0 柱面、1 扇区中,主要记录了启动引导程序和磁盘的分区表,最主要的功能就是存储启动引导程序;主要有以下作用:

1.加载操作系统的内核

? 这是启动引导程序最主要的功能。 拥有一个可以让用户选择的菜单,来选择到底启动哪个系统。大家如果在服务器上安装过双 Windows 系统,就应该见过类似的选择菜单,不过这个选择菜单是由 Windows 的启动引导程序提供的,而不是 GRUB。

2.调用其他的启动引导程序

? 这是多系统启动的关键。不过需要注意的是,Windows 的启动引导程序不能调用 Linux 的启动引导程序,所以我们一般建议先安装 Windows,后安装 Linux,是为了将 Linux 的启动引导程序安装到 MBR 中,覆盖 Windows 的启动引导程序。

三、开始引导过程(GRUB)

1、定义

GNU GRUB(简称“GRUB”)是GRand Unified Bootloader的缩写,是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。它是一个多重操作系统启动管理器,用来引导不同系统,如windows,linux。

2、引导过程

MBR是磁盘的第一个扇区,大小不能超过512KB,所以引导程序只能分成两步来执行:

1.引导加载程序的最小主程序(必须安装在MBR中),并没有安装加载程序的相关设置文件。 2.引导加载程序的所有设置文件和相关参数,一般在/boot下。 即加载引导程序可以安装在MBR中或超级块中,但是Windows系统则默认强制会同时安装在MBR和超级块中,所以在安装多重系统时,先装Windows再装Linux。

3、超级块

文件系统中第一个块被称为超级块。这个块存放文件系统本身的结构信息。比如,超级块记录了每个区域的大小,超级块也存放未被使用的磁盘块的信息。

/sbin/grub-install 命令可用来修复MBR的损坏。

四、内核加载

GRUB 加载了内核之后,内核首先会再进行二次系统的自检,而不一定使用 BIOS 检测的硬件信息。 Linux 的内核存在 /boot 目录中,分别是:

config ?#内核的配置文件,内核编译时选择的功能与模块

efi ? ? ? ?#可扩展固件接口,为英特尔为全新PC固件的体系结构、接口和服务提出的建议标准

grub ? ?#启动引导程GTUB的数据目录

initramfe.img#虚拟文件系统(CentOS 6.x 中用initramfs替代了initrd,但功能是一样的)

symvers.gz ?#模块符号信息

System.map #内核功能和内存地址的对应列表

vmlinuz ?#用于启动的Linux内核。这个文件是一个压缩的内核镜像

如下图所示,一台启动系统/boot目录下所有文件内容

五、init初始化

在内核加载完毕,并完成硬件检测与驱动程序加载后,此时主机硬件已经准备完毕,内核会主动呼叫第一个进程,也就是 /sbin/init,此配置文件最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设定、语言、文件系统格式及其他服务的启动等。

1、系统运行级别

Linux系统有7个运行级别(runlevel):

运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登录后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登录后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

2、服务开机自启动方式?

LINUX设置服务开机自启动有三种方式:

方式一:把服务启动命令添加到/etc/rc.local中

例如添加一个redis服务启动脚本:

注意:添加完需要对rc.local赋权执行权限

chmod +x /etc/rc.local

方式二:在/etc/init.d目录中直接添加启动脚本

/etc/rc.d/init.d(链接到/etc/init.d)下有很多的文件,每个文件都是可以看到内容的,都是一些shell脚本或者系统服务文件。Linux开机的时候,会加载运行/etc/init.d目录下的程序,因此我们可以把想要自动运行的脚本放到这个目录下即可。



注意:同样添加完后务必设置文件的可执行权限 chmod +x filename

方式三:将服务制作到LINUX系统服务中,并设置成开机启动

redhat7以上可以用systemd来管理服务,具体操作如下:

以nginx服务为例,添加nginx.service文件到/etc/sysntemd/system目录下,写入服务启动配置内容

然后设置服务的开机自启动

systemctl enable nginx

systemctl?start? nginx

六、本章实验

1、单用户模式中修改root密码

实验操作步骤:

重启操作系统,进入到内核引导界面时,按以下步骤操作
(1)按e编辑grub菜单?
(2)选择linux16那行,追加rd.break?
(3)ctrl+x引导?
(4)#mount ?-o ?remount,rw ?/sysroot?
(5)#chroot ?/sysroot?
(6)#passwd ?root?
(7)#touch ?/.autorelabel?
(8)#exit
(9)#exit


2、模拟grub引导故障修复

实验操作步骤:

先模拟/boot/grub2/grub.cfg破坏(删除里面文件内容)
然后按以下步骤恢复:
(1)虚拟机挂载光盘镜像
(2)BIOS从光盘启动
(3)进入急救模式,加载光盘镜像,切换到系统根环境
? ? ? ? ? sh-4.2# chroot /mnt/ sys image
(4)重新将GRUB引导程序安装到第一块硬盘(/dev/sda)的MRB扇区,如果有多个分区可省略
? ? ? ? ? bash-4.2# grub2-install /dev/ sda
(5)重新构建GRUB菜单的配置文件
? ? ? ? ? bash-4.2# grub2-mkconfig -0 /boot/grub2/grub.cfg
? ? ? ? ? 退出chroot环境,并重启
? ? ? ? ? bash-4.2# exit
? ? ? ? ? sh-4.2# reboot

文章来源:https://blog.csdn.net/vincent0920/article/details/135418552
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。