首页 > 系统相关 >SUSE linux的启动过程介绍

SUSE linux的启动过程介绍

时间:2024-06-24 12:31:51浏览次数:3  
标签:SUSE 启动 boot 文件系统 initramfs init 内核 linux 加载

引导Linux系统涉及不同的组件和任务。在固件和硬件初始化过程(取决于机器的架构)之后,内核通过引导加载程序GRUB2启动。此后,引导过程完全由操作系统控制并由systemd处理。systemd提供了一组“target”,用于为日常使用、维护或紧急情况启动配置。

1 术语

init

有两种不同的进程会被命名为init:

  • 挂载到根文件系统的initramfs进程
  • 从真正的根文件系统开始执行的所有其他进程的操作系统进程

在这两种情况下,systemd程序都会处理这个任务。它首先从initramfs执行以挂载根文件系统。一旦成功,它将作为初始进程从根文件系统重新执行。为了避免混淆这两个systemd进程,我们在initramfs上将第一个进程称为init,将第二个进程称为systemd。

initrd/initramfs

initrd(初始RAM磁盘)是一个映像文件,其中包含由内核加载并从/dev/ram作为临时根文件系统挂载的根文件系统映像。挂载此文件系统需要文件系统驱动程序。
从内核2.6.13开始,initrd已被initramfs(初始RAM文件系统)取代,它不需要挂载文件系统驱动程序。openSUSELeap专门使用initramfs。但是,由于initramfs被保存为/boot/initrd,因此通常称为“initrd”。

2 系统启动过程

2.1 初始化和引导加载程序阶段

在初始化阶段,设置机器的硬件并准备好设备。 此过程在硬件架构之间存在显着差异。
openSUSE Leap在所有架构上都使用引导加载程序GRUB2。根据架构和固件,启动GRUB2引导加载程序可能是一个多步骤过程。引导加载程序的目的是加载内核和基于RAM的初始文件系统(initramfs)。

AArch64和AMD64/Intel64上的初始化和引导加载程序阶段

电脑启动后,BIOS和UEFI会初始化屏幕和键盘,并测试内存,但是不会访问大容量存储(硬盘)。随后加载CMOS中的日期,时间和外设。识别到启动介质后,系统控制权将会从BIOS/UEFI过度到boot loader。
在具有传统BIOS的机器上,只能加载来自引导盘的第一个物理512字节扇区(主引导记录,MBR)的代码,只有最小的GEUB2适合MBR,它的主要目的是从MBR和第一个分区(MBR分区表)之间的间隙或从BIOS根分区(GPT分区表)加载一个包含文件系统驱动的GRUB2核心镜像。这个景象包含了文件系统的驱动程序,因此能够访问位于根文件系统上的/boot目录。/boot目录包含了用于GRUB2核心一级内核和initramfs景象的附加模块。一旦它可以访问该分区,GRUB2就会将内核和initramfs镜像加载到内存中,并将控制权交给内核。
当从包含一个加密的/boot分区的加密文件系统启动BIOS时,需要输入两次密码,第一次用于GRUB2加密/boot,第二次用于systemd挂载加密卷。
使用UEFI加载就会简单些,固件能够从具有GPT分区表的FAT磁盘分区中读取。这个EFI系统分区(挂载到了/boot/efi)拥有足够的空间来承载由固件直接加载和执行的成熟的GRUB2。
如果BIOS/UEFI支持网络引导,还可以配置一个引导服务器,然后就可以通过PXE引导系统。BIOS/UEFI扮演了boot loader的角色。它从boot server获取boot奖项并启动系统。这是完全独立于本地硬盘的。

2.2 内核阶段

当boot loader通过了系统的控制,所有架构的加载过程就完全相同了。boot loader会加载内核和一个初始化基于RAM的文件系统(initramfs)到内存中,然后内核接管工作。
当内核设置好内存管理并且检测到CPU的类型及特性后,将会初始化硬件并从使用initramfs加载的内存中挂载临时根文件系统。

2.2.1 initramfs文件

initramfs(初始RAM文件系统)是一个小的cpio存档,内核可以将其加载到RAM磁盘中。它位于/boot/initrd。它可以使用名为dracut的工具创建。
initramfs提供了一个最小的Linux环境,可以在安装实际的根文件系统之前执行程序。这个最小的Linux环境由BIOS或UEFI例程加载到内存中,除了足够的内存外,没有特定的硬件要求。initramfs存档必须始终提供一个名为init的可执行文件,该可执行文件在根文件系统上执行systemd守护程序,以便引导过程继续进行。
在挂载根文件系统和启动操作系统之前,内核需要相应的驱动程序来访问根文件系统所在的设备。这些驱动程序可能包括特定类型硬盘的特殊驱动程序,甚至是访问网络文件系统的网络驱动程序。根文件系统所需的模块由initramfs上的init加载。加载模块后,udev为initramfs提供所需的设备。稍后在启动过程中,更改根文件系统后,需要重新生成设备。这是由systemd单元systemd-udev-trigger.service完成的。

重新生成initramfs

由于initramfs包含了驱动,因此在必要时需要进行升级,如果有相关的包,这过程会自动完成,YaST或zypper会提醒你生成新的initramfs,但有些时候需要手工完成这项工作。

  1. 硬件变化时添加驱动

如果变化的硬件需要不同的驱动加载到内核时,必须升级initramfs文件。
打开或创建文件/etc/dracut.conf.d/10-DRIVER.conf,添加如下信息:

force_drivers+="RTL8822BE"		#RTL8822BE为硬件型号,如果有多个硬件,两个硬件型号使用空格隔开
  1. 将系统目录移动到RAID或LVM中

当从一个正在运行的系统中移动交换机文件到RAID或逻辑卷时,需要创建一个包含支持软件RAID或LVM驱动的initramfs。因此需要在/etc/fstab中创建新的挂载条目。

  1. 添加磁盘到包含了根文件系统的LVM组或btrfs RAID

这种情况下需要创建一个包含对扩大卷的支持的initramfs。

  1. 修改内核变量

如果通过sysctl接口修改相关联的文件(/etc/sysctl.conf/etc/sysctl.d/*.conf)来修改内核变量的值,下次重启修改将会丢失,即使在运行时使用sysctl --system加载值,更改也不会保存到initramfs文件中。下面的例子是更新方法:


  1. 运行时生成新的initramfs文件
dracut MY_INITRAMFS

Replace MY_INITRAMFS with a file name of your choice. The new initramfs will be created as /boot/MY_INITRAMFS.

或者使用dracut -f命令强制覆盖现有文件

  1. 创建一个执行initramfs文件的软链接。(执行了dracut -f命令不需要这一步)
(cd /boot && ln -sf MY_INITRAMFS initrd)

2.3 initramfs阶段的init

临时根文件系统是从内核挂载,该内核来自包含了可执行的systemd的initramfs。(在下面的initramfs上称为init)。改程序会执行所有的必要操作来挂载正确的根文件系统。它为使用udev的大容量存储控制器所需的文件系统和设备驱动程序提供内核功能。
initramfs上init的主要目的是准备安装和访问真正的根文件系统。根据系统配置,initramfs上的init负责以下任务。


  1. Loading kernel modules
    取决于你的硬件配置,可能需要特殊的驱动程序来访问计算机的硬件组件(最重要的组件是硬盘)。要访问最终的根文件系统,内核需要加载正确的文件系统驱动程序。

  2. Providing block special files
    内核根据加载的模块生成设备事件。udev处理这些事件并在/dev中的RAM文件系统上生成所需的特殊块文件。如果没有这些特殊文件,文件系统和其他设备将无法访问。

  3. Managing RAID and LVM setups
    如果您将系统配置为在RAID或LVM下保存根文件系统,则initramfs上的init会设置LVM或RAID,以便稍后访问根文件系统。

  4. Managing the network configuration
    如果您将系统配置为使用网络安装的根文件系统(通过NFS安装),则init必须确保加载了正确的网络驱动程序,并且将它们设置为允许访问根文件系统。
    如果文件系统位于iSCSI或SAN等网络块设备上,则initramfs上的init也会建立与存储服务器的连接。如果主要目标不可用,openSUSELeap支持从次要iSCSI目标启动。

如果无法从引导环境中挂载根文件系统,则必须先检查并修复根文件系统,然后才能继续引导。对于Ext3和Ext4文件系统,将会自动启动检查器。XFS和Btrfs文件系统的修复过程不是自动化的,用户会看到描述可用于修复文件系统的选项的信息。文件系统修复成功后,退出引导环境会导致系统重新尝试挂载根文件系统。如果成功,引导将继续正常进行。

2.3.1 安装过程中initramfs阶段的init

作为安装过程的一部分,在初始引导期间调用initramfs上的init时,其任务与上述任务不同。请注意,安装系统也不会从initramfs启动systemd——这些任务由linuxrc执行。


  • Finding the installation medium
    当开始安装,机器会加载安装内核和包含YaST安装器的init。YaST安装器运行在RAM文件系统中,他需要安装介质的地址以用于操作系统的安装。

  • Initiating hardware recognition and loading appropriate kernel modules
    引导过程从用于大多数硬件配置的最小驱动程序集开始。在AArch64、POWER和AMD64/Intel64架构的机器上,linuxrc会进行初始硬件扫描,用于寻找适合的硬件驱动。在IBM Z架构机器上,需要提供驱动程序列表和参数。这些驱动用于生成客户自定义的initramfs,它用于启动系统。如果模块不需要用于启动而是用于冷插拔,则可以使用systemd加载模块。

  • Loading the installation system
    硬件被识别后,就会加载适合的驱动。udev程序会创建指定的设备文件,linuxrc会使用YaST安装器开始安装系统的过程。

  • Starting YaST
    最后,linuxrc会启动YaST,然后开始软件包安装和系统配置。

2.4 系统阶段

找到“真正的”根文件系统后,会检查错误并挂载。如果成功,initramfs将被清除并执行根文件系统上的systemd守护进程。systemd是Linux的系统和服务管理器。它是作为PID 1启动的父进程,并充当启动和维护用户空间服务的init系统。

标签:SUSE,启动,boot,文件系统,initramfs,init,内核,linux,加载
From: https://blog.csdn.net/wuxiaobing1234/article/details/139912377

相关文章

  • linux笔记10--编辑器之神VIM
    文章目录1.简单介绍①为什么叫vim②linux常见的编辑器③注意事项④其它2.操作模式的划分①两种--国际上普通模式(命令操作模式)插入模式②三种--国内普通模式如何进入与退出界面插入模式如何进入与退出界面命令模式如何进入与退出界面常见的命令模式③......
  • linux三剑客工具使用及硬盘知识介绍
    文本处理工具,文件查找工具,文本处理三剑客,文本格式化命令(printf)的相关命令及选项,示例。文本处理工具cat:连接文件并打印到标准输出。catfile1file2tac:反向连接文件并打印到标准输出。tacfilenl:给文件的每一行添加行号。nlfilemore:分页显示文件内容。morefilele......
  • linux基础知识
    总结计算机发展相关,并且总结服务器硬件相关知识计算机发展相关计算机的发展可以分为以下几个阶段:第一代计算机(1940s-1950s):使用电子管作为主要元件。体积庞大,功耗高。主要用于科学计算和军事用途。代表:ENIAC、UNIVAC。第二代计算机(1950s-1960s):使用晶体管代替电子管。体......
  • linux的source命令
    用法sourcefile也可以用.+空格file来代替.file作用在当前bash环境下读取并执行FileName中的命令.source(或点)令通常用于重新执行刚修改的初始化文档,如.bash_profile和.profile等配置文件.简单的说就是:source命令会把file里的命令在当前shell里一个一个执行区别......
  • GBase 8s 通过systemd实现自启动与关闭
    在RHEL7/CENTOS7/SUSE12及最新的Ubuntu等linux发行版本中,均使用systemd进行服务控制管理(ServiceControlManager)。使用systemd,不再需要编写shell脚本程序来控制启动、关闭。以下是通过systemd方式实现GBase8s数据库的自启动与关闭。适用于操作系统:RHEL7/CENTOS7,以及......
  • Linux收到You have mail in xxx
    当系统显示"Youhavemailin/var/spool/mail/root"提示时,一般有一些重要的邮件被发送到了root用户的邮箱,存放在/var/spool/mail/root这个文件中。这些邮件通常包含了系统关键事件的通知或报告,例如系统状态变化、错误报告、定期任务的执行结果等。原因:系统报告和通知:系......
  • Linux passwd命令:守护账户安全的密钥
    Linuxpasswd命令:守护账户安全的密钥在Linux的广阔世界中,passwd命令是每位系统管理员和用户的得力助手。它不仅是账户安全的守护者,也是数据处理和分析中不可或缺的一环。本文将带您深入了解passwd命令的方方面面,从它的基本功能到高级应用,再到使用时的注意事项和最佳实践。......
  • Linux各个中间件日志位置
    Linux各个中间件日志位置Linux系统中各种常见中间件日志文件的默认位置取决于安装时的配置以及中间件的具体类型。以下是一些常见中间件日志文件的标准位置ApacheHTTPServer:访问日志:/var/log/httpd/access_log或/var/log/apache2/access.log ......
  • A15 汇编启动阶段-BSP
    MSRCPSR_c,#Mode_SVC|I_Bit|F_Bit //SVCmode //setupvectormode /*BIT[13]: 0:选择低端异常中断向量0x0~0x1c 1:选择高端异常中断向量0xffff0000~0xffff001c*/ MRC p15,0,r0,c1,c0,0 //ReadControlRegister BIC r0,r0,#(1<<13) //u......
  • Linux Vim最全面的教程
    LinuxVim是一个功能强大的文本编辑器,在Linux系统中被广泛使用。它具有很多高级特性和快捷键,可以提高编辑效率。本教程将详细介绍LinuxVim的各种功能和用法,适合初学者和有一定经验的用户。第一部分:入门指南介绍Vim和它与其他编辑器的区别安装Vim启动Vim和基本操作基本编辑命......