SUSE 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系統。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36307.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36307.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36307.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微信開放平臺(第三方平臺)

特征: 統一管理: 可以統一管理和操作多個公眾號和小程序,提供批量化、集中化的服務。 代開發和運營: 為公眾號和小程序提供代開發和運營服務,例如提供自動回復、模板消息、用戶管理等功能。 接口調用: 通過…

基于深度學習的模糊圖像還原

基于深度學習的模糊圖像還原 模糊圖像還原(Image Deblurring)是計算機視覺中的一個重要任務,旨在從模糊的圖像中恢復出清晰的圖像。模糊可以由于多種原因產生,例如相機抖動、運動模糊、焦點失準等。傳統的圖像去模糊方法通常依賴…

搭建抖音微短劇系統:源碼部署與巨量廣告回傳全解析

在數字化浪潮中,抖音微短劇已成為內容創作的新寵。想要搭建一個高效的抖音微短劇系統,并實現與巨量廣告的有效回傳嗎?本文將為您詳細解析源碼部署與廣告回傳的關鍵步驟。 一、源碼部署:構建短劇系統的基石 源碼是軟件開發的起點…

vscode遠程連接Ubantu

一、首先用VM虛擬機打開一個Linux系統 二、打開VScode 在擴展里安裝 安裝后,打開Linux查看IP地址 在VScode 中新建連接主機 輸入linux_nameip地址 -A 然后輸入Linux的登錄密碼 就可以遠程操控 Linux了 可以在終端中遠程控制Linux 點擊左上角的打開文件夾可以很…

什么是 Azure OpenAI?

目錄 一、說明 二、什么是 Azure OpenAI 2.1 網絡結構 2.2 、為什么使用 Azure OpenAI 2.3 如何使用 Azure OpenAI 三、從哪里開始 Azure OpenAI 之旅 3.1 關于 Azure OpenAI,我還需要了解什么 3.2 RBAC 權限和角色 3.3 演示 1:在公共數據上應用…

【面試題】網絡 http、https協議(第一篇)

1.簡述HTTP協議 HTTP,全名超文本傳輸協議,是一個用于客戶端與服務器之間進行數據傳輸的應用層協議,可以傳輸文本、圖片、音視頻等超文本內容。 1.HTTP使用TCP作為傳輸層協議,因此具有可靠性, 2.除此之外&#xff0c…

聚合項目學習

首先建立一個總的工程目錄,里邊后期會有我們的父工程、基礎工程(繼承父工程)、業務工程(依賴基礎工程)等模塊 1、在總工程目錄中(open一個空的文件夾),首先建立一個父工程模塊(通過spring init…

4面體空間內直鏈4點結構分布與占比

在30個點的4面體空間內取4個點,有30*29*28*27/2427405種取法,要求得到的4個點必須在直鏈上。只有144個結構符合要求,在平移操作下不重合的結構有36個。 這36個結構可以按照旋轉對稱性進一步分成3組0,1,4,每…

Anisble Playbook

文章目錄 一、Playbook簡介三種常見的數據格式Playbook特點YAML語言介紹 二、Playbook核心組件host組件remote_user組件task列表和action組件gather_factsHandlers notifyignore_errors 三、playbook命令playbook命令tags 標簽 四、Playbook中的變量setup模塊中的變量Playbook命…

vue3 【提效】自動路由(含自定義路由) unplugin-vue-router 實用教程

不再需要為每一個路由編寫冗長的 routes 配置啦,新建文件便可自動生成路由! 使用方法 1. 安裝 unplugin-vue-router npm i -D unplugin-vue-router2. 修改 vite 配置 vite.config.ts import VueRouter from unplugin-vue-router/viteplugins 中加入 V…

消費疲軟,預期一下債券的平均收益

在預測消費疲軟對債券平均收益的影響時,我們需要考慮多個因素,包括宏觀經濟環境、貨幣政策、通脹預期以及債券市場的具體表現等。以下是對債券平均收益的預期分析: 宏觀經濟環境與貨幣政策: 當前中國經濟增速已轉向高質量發展階段…

【Redis一】Redis配置與優化

目錄 一.關系型數據庫與非關系型數據庫 1.關系型數據庫 2.非關系型數據庫 3.二者區別 4.非關系型數據庫產生背景 5.NoSQL與SQL數據記錄對比 關系型數據庫 非關系型數據庫 二.Redis相關概述 1.簡介 2.五大數據類型 3.優缺點 3.1.優點 3.2.缺點 4.使用場景 5.采用…

蘋果應用Testflight上架完整步聚

1.全部選中下圖內容,包含iPhone與iPad屏幕所有旋轉方向 2. 準備App圖標,一定要有152和167這個尺寸,不然后提交不過 3.1024這個尺寸的的圖像不能有透明層,不然提交不通過 4.選中編譯設備為Any iOS Device[arm64] 5.選擇Product下的Archive進行生成 6.在彈出的窗口中選擇Test…

Python之三大基本庫——Numpy(2)

接著上次的內容接著講,連續號都續上哈 七、numpu中random的隨機生成函數 以下總結的是比較常用到的函數: 下面分別介紹一下不用的用法: 首先導入創建函數 import numpy as np np.random.seed(666)1、 rand(d0,d1,d2,...,dn):返…

JavaWeb系列三: JavaScript學習 下

文章目錄 js數組定義方式數組遍歷 js函數函數入門函數使用方式使用方式一使用方式二 函數注意事項函數練習題 定義對象使用object定義使用{}定義 事件onload事件onclick事件失去焦點事件內容發生改變事件表單提交事件靜態注冊動態注冊表單作業 dom對象文檔對象模型document對象…

JDK-調度線程池

歸檔 GitHub: JDK-調度線程池 使用示例 https://github.com/zengxf/small-frame-demo/blob/master/jdk-demo/simple-demo/src/main/java/test/jdkapi/juc/thread_pool/TestSchedule.java JDK 版本 openjdk version "17" 2021-09-14 OpenJDK Runtime Environment…

邊緣計算VNC智能盒子如何助力HMI設備實現二次開發?

HMI(Human-Machine Interface)又稱人機界面,是用戶與機器之間交互和通信的媒介。今天帶你了解智能盒子如何助力HMI設備實現二次開發? HMI設備被廣泛應用在工業自動化中,具有顯示設備信息,實時監測&#xf…

python爬蟲--scrapy框架

Scrapy 一 介紹 Scrapy簡介 1.Scrapy是用純Python實現一個為了爬取網站數據、提取結構性數據而編寫的應用框架,用途非常廣泛2.框架的力量,用戶只需要定制開發幾個模塊就可以輕松的實現一個爬蟲,用來抓取網頁內容以及各種圖片,非…

GPT-5對普通人有何影響

這篇文章對ChatGPT的使用方法和提問技巧進行了討論,重點強調了背景信息和具體提問的重要性。文章清晰地傳達了如何提高ChatGPT回答的質量,以及個人在使用ChatGPT時的體會和建議。然而,文章在邏輯組織和表達方面還有一些可以改進的地方&#x…

Spring Boot與分布式事務的最佳實踐

Spring Boot與分布式事務的最佳實踐 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天我們來探討在Spring Boot應用中如何實現分布式事務的最佳實踐。 什么是…