① linux開機引導和啟動過程
傳統啟動方式(Legacy+MBR)
傳統BIOS啟動方式,存在一些不足:比如最大隻支持2TB磁碟,磁碟最多四個分區,且不支持圖形操作
新式啟動方式(UEFI+GPT)
相對於Legacy+mbr, 優點在啟動更快(不要開機自檢),最多可支持128個磁碟分區,最大可支持18EB硬碟,支持圖形操作
啟動流程
1. 上電,BIOS自檢,找到啟動介質(系統盤),讀取主引導分區(MBR)鋒閉
2. 引導裝載程序 (GRUB2),尋找操作系統內核並載入其到內存, 內核初始化
3. 啟動 systemd
https://www.cnblogs.com/jjmcao/p/9322324.html 開滑此機流程
https://linux.cn/article-8807-1.html 銀讓裂 開機流程
http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html 開機流程
https://linux.cn/article-8603-1.html?pr grub介紹
http://www.dnxtc.net/zixun/zhuangjijiaocheng/2020-10-11/5852.html uefi和legacy區別
linux可以通過fdisk命令查看系統磁碟分區類型
CentOS7下重建grub並恢復系統的故障案例
https://cloud.tencent.com/developer/article/1767715
② Linux之三Linux的啟動過程/關機
man ls
man pages手冊頁
顯示說明
數字說明
Ctrl+Alt+F1/F2......F6
Ctrl+Alt+F7,回到圖形化界面
who,看看那幾個tty連接著
Linux系統有7個運行級別(runlevel):常用的是3和5
運行級別0:系統停機狀態,系統默認運行級別不能設為0,否則不能正常啟動
運行級別1:單用戶工作狀態,root許可權,用於系統維護,禁止遠程登陸
運行級別2:多用戶狀態(沒有NFS),沒有網路服務
運行級別3:完全的多用戶狀態(有NFS),登陸後進入控制台命令行模式
運行級別4:系統未使用,保留
運行級別5:X11表示控制台,進入圖形界面
運行級別6:系統正常關閉並重啟,默認運行級別不能設為6,否則不能正常啟動
運行級別
接通電源BIOS自檢,按照BIOS中設置的啟動設備(通常是硬碟)來啟動,操作系統接管硬體以後,
首先讀入 /boot 目錄下的內核文件。
init 進程是系統所有進程的起點,你可以把它比擬成系統所有進程的老祖宗,沒有這個進程,系統中任何進程都不會啟動。
init 程序首先是需要讀取配置文件 /etc/inittab
許多程序需要開機啟動。它們在Windows叫做"服務"(service),在Linux就叫做"守護進程"(daemon)。
init進程的一大任務,就是去運行這些開機啟動的程序。
但是,不同的場合需要啟動不同的程序,比如用作伺服器時,需要啟動Apache,用作桌面就不需要。
Linux允許為不同的場合,分配不同的開機啟動程序,這就叫做"運行級別"(runlevel)。
也就是說,啟動時根據"運行級別",確定要運行哪些程序。
============================================================
Linux系統有7個運行級別(runlevel):
運行級別0:系統停機狀態,系統默認運行級別不能設為0,否則不能正常啟動
運行級別1:單用戶工作狀態,root許可權,用於系統維護,禁止遠程登陸
運行級別2:多用戶狀態(沒有NFS)
運行級別3:完全的多用戶狀態(有NFS),登陸後進入控制台命令行模式
運行級別4:系統未使用,保留
運行級別5:X11控制台,登陸後進入圖形GUI模式
運行級別6:系統正常關閉並重啟,默認運行級別不能設為6,否則不能正常啟動
在init的配置文件中有這么一行: si::sysinit:/etc/rc.d/rc.sysinit它調用執行了/etc/rc.d/rc.sysinit,
而rc.sysinit是一個bash shell的腳本,它主要是完成一些系統初始化的工作,rc.sysinit是每一個運行級別都要首先運行的重要腳本
它主要完成的工作有:激活交換分區,檢查磁碟,載入硬體模塊以及其它一些需要優先執行任務
rc執行完畢後,返回init。這時基本系統環境已經設置好了,各種守護進程也已經啟動了。
init接下來會打開6個終端,以便用戶登錄系統。在inittab中的以下6行就是定義了6個終端:
一般來說,用戶的登錄方式有三種:
(1)命令行登錄
(2)ssh登錄
(3)圖形界面登錄
在linux領域內大多用在伺服器上,很少遇到關機的操作。畢竟伺服器上跑一個服務是永無止境的,除非特殊情況下,不得已才會關機 。
正確的關機流程為:sync > shutdown > reboot > halt
sync 將數據由內存同步到硬碟中
shutdown –h 10 『This server will shutdown after 10 mins』 這個命令告訴大家,計算機將在10分鍾後關機,並且會顯示在登陸用戶的當前屏幕中
Shutdown –h now 立馬關機
Shutdown –r now 系統立馬重啟
reboot 就是重啟,等同於 shutdown –r now
halt 關閉系統,等同於shutdown –h now 和 poweroff
最後總結一下,不管是重啟系統還是關閉系統,首先要運行sync命令,把內存中的數據寫到磁碟中。
重新安裝系統嗎?當然不用!進入單用戶模式更改一下root密碼即可。
1 重啟Linux,見到下圖,在3秒鍾之內按下回車
2 三秒之內要按一下回車,出現如下界面
3 按下e鍵就可以進入下圖
4 移動到下一行,再次按e鍵
5 移動到下一行,進行修改
修改完成後回車鍵,然後按b鍵進行重新啟動進入系統
6 移動到下一行,進行修改
最終修改完密碼,reboot一下即可。
③ 嵌入式linux系統的啟動流程是什麼樣的
1)初始化RAM因為Linux內核一般都會在RAM中運行,所以在調用Linux內核之前Bootloader必須設置和初始化RAM,為調用悶態Linux內核做好准備。初始化RAM的任務包括設置CPU的控制寄存器參數,以便能正常使用RAM以及檢測RAM大小等。
2)初始化串口埠在Linux的啟動過程中有著非常重要的作用,它是Linux內核和用戶交互的方式之一。Linux在啟動過程中可以將信息通過串口輸出,這樣便可清楚的了解Linux的啟動過程。雖然它並不是Bootloader必須要完成的工作,但是通過串口輸出信息是調試Bootloader和Linux內核的強有力的工具,所以一般的Bootloader都會在執行過程中初始化一個串口作為調試埠。
3)檢測處理器類型Bootloader在調用Linux內核前必須檢測系統的處理器類型,並將其保存到某個常量中提供給Linux內核。Linux內核在啟動過程中會根據該處理器類型調用相應的初始化程序。
4)設置Linux啟動參數Bootloader在執行過程中必須設置和初始化Linux的內核啟動參數。
5)調用Linux內核映像Bootloader完成的最後一項工作便是調用Linux內核。如果Linux內核存放在Flash中,並且可直接在上面運行(這里的Flash指NorFlash),那麼可直接跳畢悄轉到內核中去執行。但由於在Flash中執行代碼會有種種限制,而且速度也遠不及RAM快,所以一般手罩渣的嵌入式系統都是將Linux內核拷貝到RAM中,然後跳轉到RAM中去執行。
④ 樹莓派Linux啟動過程簡介
昨天在寫關於linux設置腳本開機啟動的文章時,有個疑問就是開機時怎麼確認運行級別,然後遍歷執行/etc/rcN.d/目錄下的所有服務程序。帶著疑問, 在前人的基礎上 學習總結一下linux系統初始化的工作的內容,現在樹莓派4B上展示出來。
1、載入內核
當計算機打開電源後,首先是BIOS開機自檢,按照BIOS中設置的啟動設備(通常是硬碟)來啟動。旅山操作系統接管硬體以後,首先讀入 /boot 目錄下的內核文件。樹莓派4B的內核是Raspbian GNU/Linux 10 (buster),基於Debian。
2、初始化進程init
內核文件載入以後,運行第一個程序init,它的作用是初始化系統環境。init位於目錄/sbin,進程號PID為1,即1號進程,其他所有進程都由init衍生,是init的子進程。
同時還有個0號進程,idle進程,在系統初始化時由內核kernel自身從無到有創建,通過調用kernel_thread創建一個內核線程去執行init函數,0號進程創建1號進程。
3、運行級別
具體介紹請參考筆者的文章-Linux運行級別簡介 ,但是開機時是怎麼確定運行級別的呢?
init進程首先讀取文件 /etc/inittab,它是運行級別的設置文件。但是各個發行版不太一樣,init的仔稿配置文件也不一樣,有可能使用/etc/event.d裡面的配置文件,最新版的改用為/etc/init目錄。
4、開機啟動程序
具體詳情請參考文章-linux中/etc/init.d設置開機啟動 ,確定運行級別後,執行rcN.d目錄下的文件,這些鏈接文件是連接到init.d目錄下的程序。init進程逐一載入開機啟動程序,其實就是運行這個目錄里的啟動腳本。
比如運行級別為5(圖形化多用戶)時啟動的程序:
5、用戶登錄
開機啟動程序載入完畢以後用戶登錄。用戶的登錄方式有三種:
命令行登錄:init進程調用getty程序。
ssh登錄:init進程調用sshd程序。
圖形界面登錄:init進程調用顯示管理器,Gnome圖形界面對應的顯示管理器為gdm。
6 、login shell
默認shell時bash,命令行界面,讓念鎮孝用戶可以直接與操作系統對話。讀取環境變數,具體請參考筆者文章-Linux環境變數的設置。
⑤ 嵌入式linux的bootloader的啟動流程是怎樣的
嵌入式 Linux 系統從軟體角度看可以分為四個部分:引導載入程序(Bootloader), Linux 內核,文件系統,應用程序。
當系統首次引導時昌螞旦,或系統被重置時,處理器會執行一個位於Flash/ROM中的已知位置處的代碼,Bootloader就是這第一段代碼。它主要用來初始化處理器及外設,然後調用 Linux 內核。Linux 內核在完成系統的初始化之後需要掛載某個文件系統作為根文件系統(Root Filesystem),然後載入必要的內核模塊,啟動應用程序。這就是嵌入式Linux系統啟動過程 Linux 引導的整個過程。
Bootloader 的啟動方式:
網路啟動方式。這種方式的開發板不需要較大的存儲介質,跟無盤工作站有點類似,但是使用這種啟動方式之前,需要把Bootloader安裝到板上的EPROM或者Flash中。Bootloader通過乙太網介面遠程下載Linux內核映像或者文件系統。Bootloader下載文件一般都使用TFTP網路協議,還可以通過DHCP的耐擾方式動態配置IP地址。
硬碟啟動方式
傳統的Linux系統運行在台式機或者伺服器上,這些計算機一般都使用BIOS引導,並使用磁碟作為存儲介質。Linux傳統上是LILO (Linux Loader) 引導,後來又出現了GUN的軟體 (Grand Unified Bootloader) 。 這兩種Bootloader廣泛應用在X86的Linux系統上。
Flash啟動方式。大多數嵌入式系統上都使用Flash存儲介質。Flash有很多類型,包括NOR Flash、NAND Flash和其它半導體盤。它們之間的不同在於: NOR Flash 支持晶元內執行(XIP, eXecute In Place),這樣代碼可以在Flash上直接執行而不必拷貝到RAM中去執行。而NAND Flash並不支持XIP,所以要想執行 NAND Flash 上的代碼,必物仔須先將其拷貝到 RAM中去,然後跳到 RAM 中去執行。NOR Flash 使用最為普遍。Bootloader一般放在Flash的底端或者頂端,這需要根據處理器的復位向量來進行設置。可以配置成MTD設備來訪問Flash分區。
⑥ 33.Linux開機過程及啟動故障修復
Linux系統啟銷旦扒動過程如下:
initramfs鏡像用來啟動系統,解壓後是一個臨時的根目錄。
用file查看initramfs-2.6.32-696.el6.i686.img的文件類型為gzip壓縮文件,將它改為gz格式,解壓縮。
解壓後得到一個initramfs-2.6.32-696.el6.i686.img,查看文件類型為ASCII,繼續解壓。
grub允許用戶可以在 計算機 內同時擁有多個操作系統,並在計算機啟動時選擇希望運行的操作系統。grub中分區含義如表所示
grub配置文件/etc/grub/grub.conf
參數含義
按e進入命令編輯模式
游標移到kernel行,按e進入grub界面
在quiet後加1,進入單用戶模式
按b啟動,進入單用戶模式(可修改root密碼)
eg:假設啟動文件/etc/inittab文件被修改,如何修復?
我將inittab文件修改,將默認啟動級別改為6,這樣系統啟動時會一直重啟
在單用戶模虧昌式下修改/etc/inittab文件。
重啟後成功。
ps:後來我用的debian虛擬機忘記了密碼,嘗試後發現它進入遲陸單用戶的模式有點不一樣,記錄一下
按e進入編輯模式
在這一行quiet之後添加「init=/bin/bash」,可進入單用戶模式
進入後發現修改密碼出錯,將根目錄重新掛載後成功修改密碼
為防止外人進入單用戶模式修改root密碼,可將grub進行加密
加密過程如下
此時,需要按下grub的密碼才可以進入編輯模式
如果密碼輸錯,將不能進行編輯
正確輸入密碼,可以看到跟加密前一樣的編輯頁面。
首先查詢內核是否支持解析度修改
解析度參數如下
如果想將解析度設為1024*768,則寫入/boot/grub/grub.conf內,vga=791。
重啟後生效
插入光碟,啟動時快速按F2鍵(或者右鍵點擊虛擬機-電源-啟動時進入bios)。
進入bios後,將光碟啟動移到第一項(+)。
進入光碟修復模式,將游標移動到第三行
一路默認,網路可不設置
a、清除grub密碼步驟
b、重要文件找回步驟
eg:將/etc/inittab文件刪除,如何恢復?
<1>.進入光碟救援模式,後,將剛剛拷貝在/tmp下的inittab文件復制粘貼到/etc下
<2>.先查詢出inittab文件的安裝包版本,進入光碟救援模式後,將光碟掛載,從光碟的Packeges目錄里安裝inittab。
⑦ Linux如何啟動流程Linux啟動流程詳解
當用戶打開電源後,BIOS開機自檢,確定啟動設備,安裝啟動設備,啟動設備上面安裝的GRUB開始引導Linux,Linux首先先進行內核引導,通過跟切換,執行init程序,init程序確定啟動級別,根據啟動級別進行系統初始化和運行的服務,然後返回init啟動終端,用戶通過驗證成功登陸Shell,這就是一個從開機到登陸的啟動過程。
一、硬體引導啟動
當用戶打開電源後POST開始自檢,檢測硬體設備是否確實或者存在故障(是否影響正常開機),如果不影響正常開機,就把任務交給BIOS。BIOS通過搜索,安裝啟動確定啟動設備,啟動項為硬碟,BIOS去讀取硬碟的前512位元組到內存,找到BootLoader,確定GRUB
二、GRUB引導啟動內核
這一部分概況起來就是:GRUB程序載入執行並開始引導kernel程序
Boot Loader就是在操作系統內核運行之前運行的一小段程序。通過GRUB引導可以確定內核程序,因為引導扇區只有446位元組,GRUB只是一個小的程序安裝在裡面,真正使用的在MBR後面的扇區存放,我們想使用Bootloader GRUB功能必須讀取後面的文件,Bootloader GRUB功能程序的運行和載入配置選項分為三個階段
Stage1階段:
Stage1階段其實就是執行系統安裝時預先寫入到MBR的Bootloader中的程序。
Stage1階段的任務僅是將硬碟0柱面0磁軌2扇區的內容讀入內存並執行,它是Stage1.5階段或Stage2階段的入口,引導進入Stage1.5階段或Stage2階段。 在此Stage1階段,還沒有識別文件系統的能力。
Stage1.5階段:
stage1.5階段是stage1階段和stage2階段的中間橋梁。stage1.5階段具有識別啟動分區文件系統的能力,此後GRUB程序便有能力去訪問/boot分區下/grub目錄下的 stage2文件,並將stage2載入內存執行。
Stage2階段
Stage2階段執行時,首先會解析GRUB程序的配置文件grub.conf,並依配置文件決定是否顯示系統啟動菜單。然後載入內核鏡像到內存中,通過initrd程序建立RAMDisk內存虛擬根文件系統。此時控制權將轉交給內核程序。
三、內核引導啟動
這一部分主要是通過在內存中建立虛擬根文件系統實現相關設備的驅動並建立和切換到真正的根文件系統。
解壓內核鏡像載入到內存,以及initrd程序建立RAMDisk內存虛擬根文件系統後,內核開始驅動基本硬體,並調用虛擬根文件系統中的init程序載入驅動模塊初始化系統中各種設備的相關配置工作,其中包括CPU、I/O、存儲設備等。當所需的驅動程序載入完後,會根據grub.conf配置文件中「root=XXX」部分所指定的內容創建一個根設備,然後將根文件系統以只讀的方式掛載,並切換到真正的根文件系統上,同時調用系統進程的/sbin/init程序,進入系統初始化階段。
四、系統初始化
這一步是通過/sbin/init,init程序准備軟體運行壞境,啟動系統服務
通過/etc/inittab文件確定運行級別,然後去執行系統初始化腳本/etc/rc.sysinit,為用戶初始化用戶空間環境,在完成初始化後,根據運行級別,系統開始對應級別的目錄啟動服務,關閉那些不要的服務(裡面S99local -> ../rc.local)用戶自動服務啟動腳本
運行級別:為系統運行或維護等目的而設定;0-6:7個級別
0:關機
1:單用戶模式(root自動登錄), single, 維護模式
2: 多用戶模式,啟動網路功能,但不會啟動NFS;維護模式
3:多用戶模式,正常模式;文本界面
4:預留級別;可同3級別
5:多用戶模式,正常模式;圖形界面
6:重啟
默認級別:3, 5
切換級別:init #
查看級別:runlevel ; who -r
五、啟動終端,用戶登錄
這一步是用戶登錄shell過程
如果沒有改變級別,默認情況執行/sbin/mingetty打開6個純文本終端,讓用戶輸入用戶名和密碼。輸入完成後,再調用login程序,核對密碼。如果密碼正確,就從文件 /etc/passwd 讀取該用戶指定的shell,然後啟動這個shell。更多Linux介紹請查看《Linux就該這么學》。
⑧ Linux系統啟動及定製過程
CentOS的啟動流程總體順序如下:
POST --> Boot Sequence --> bootloader(MBR) --> Kernel --> 載入rootfs --> switchroot --> /sbin /init --> (配置文件:/etc/inittab, /etc/init/*.conf) --> 根據init配置文件設置默認運行級別 --> 運行系統初始化腳本/etc/rc.d/rc.sysinit,完成系統初始化 --> 開啟或關閉用戶選定的對應運行級別下所對應的服務 --> 啟動終端,列印登錄提示符。
註:前面加粗部分代表內核空間的系統啟動流程,後面未加粗部分代表用戶空間的系統啟動流程。
第一步:硬體啟動過程
POST加電自檢
主要實現的功能是檢測各個外圍硬體設備是否存在而且能夠正常運行起來,實現這一自檢功能的是固化在主板上的ROM(主要代表為CMOS)晶元上的BIOS(Basic Input/Output System)程序;例如BIOS會檢測CPU、Memory以及I/O設備是否能夠正常運行,如果是個人計算機的話可能還會檢測一下顯示器。只要一通電,CPU就會自動去載入ROM晶元上的BIOS程序,是這樣來實現的。而檢測完成之後就進行硬體設備的初始化。
選擇啟動設備以載入MBR
主要實現的功能是選擇要啟動的硬體設備,選擇了之後就可以讀取這個設備上位於MBR里頭的bootloader了。這一步的實現是這樣的:根據BIOS中對啟動順序的設定,BIOS自己會依次掃描各個引導設備,然後第一個被掃描到具有引導程序(bootloader)的設備就被作為要啟動的引導設備。
MBR(Main Boot Record),是硬碟的0柱面,0磁軌、1扇區(第一個扇區),稱為主引導扇區,也稱為主引導記錄。它由三部分組 成:主引導程序(BootLoader)、硬碟分區表DPT(Disk Partition table)和硬碟有效標志(55AA)。
註:硬碟默認一個扇區大小為512位元組。
第一部分,主引導程序(BootLoader)佔446個位元組,負責從活動分區中裝載,並運行系統引導程序。
第二部分,硬碟分區表DPT佔64個位元組,有4個分區表項,每個分區表項佔16個位元組,硬碟中分區有多少以及每一個分區的大小都記 錄在其中。
第三部分,硬碟有效標志,佔2個位元組,固定為55AA。如果這個標志位0xAA55,就認為這個是MB
第二步:GRUB引導階段
不同的系統有不同的主引導程序(BootLoader)。Windows使用的是NTLDR(NT Loader,Windows NT系列操作系統)、Bootmgr(Boot Manager,Windows Vista,7,8,10),Linux一般使用的是grub(也叫grub legacy)和grub2。GRUB程序載入執行並引導kernel(內核)程序,其中有三個階段,Grub引導階段的文件都在/boot/grub/目錄下。
stage1: 這一階段執行的就是系統安裝時預先寫入到MBR的Bootloader程序,即是存放在MBR的前446位元組里的程序。它的任務僅是讀取(載入)硬碟的0柱面,0磁軌,2扇區的內容(/boot/grub/stage1)並執行。
stage1.5: 這一階段是Stage1階段和Stage2階段的橋梁,功能是載入stage2所在分區的文件系統驅動,讓stage1中的bootloader能識別stage2所在分區的文件系統,此後grub程序便有能力去訪問/boot/grub/stage2。
stage2: 這一階段讀取並解析grub的配置文件/boot/grub/grub.cnf,根據配置文件載入內核鏡像到內存中,通過initrd程序建立虛擬根文件系統,最後調用(轉交)內核。
第三步:內部引導階段
載入內核,核心開始解壓,啟動一些最核心的程序。為了讓內核足夠的輕小,硬體驅動並沒放在內核文件裡面。系統僅探測可識別到的所有硬體設備,載入硬體驅動程序,即載入真正的根文件系統所在設備的驅動程序(有可能會藉助於ramdisk載入驅動),以只讀方式掛載根文件系統,運行用戶空間的第一個應用程序:/sbin/init。
第四步:init初始化階段(系統初始化階段)
雖然CentOS 5、CentOS 6以及CentOS 7的/etc/init配置文件內容各不相同,但總體的啟動流程相同:/sbin/init --> 根據/etc/inittab配置文件設置默認運行級別 --> 運行系統初始化腳本/etc/rc.d/rc.sysinit,完成系統初始化 --> 關閉或啟動用戶選定的默認運行級別所對應的服務 。
對於CentOS 5來說,初始化程序init是SysV init,其配置文件為:/etc/inittab; 對於CentOS 6來說,初始化程序init是upstart,其配置文件為:/etc/inittab, /etc/init/ .conf,也就是upstart將配置文件拆分成多個,在/etc/init/目錄下以conf結尾的都是upstart風格的配置文件,而/etc/inittab僅用於設置默認運行級別; 對於CentOS 7來說,初始化程序init是systemd,其配置文件:/usr/lib/system/systemd/, /etc/systemd/system/ ;
具體執行過程:/sbin/init程序會讀取/etc/inittab文件確認運行級別,然後執行/etc/rc.d/rc腳本,根據確認的運行級別啟動對應/etc/rc.d/rc#.d/目錄下的服務(#為0~6),與此同時執行系統初始化腳本/etc/rc.sysinit(軟鏈接,指向/etc/rc.d/rc.sysinit),還會載入/etc/rc.local(軟鏈接,指向/etc/rc.d/rc.local文件)用戶自定義服務(腳本)。
CentOS7中初始化進程變為了systemd,systemd即為system daemon,是Linux下的一種init軟體,開發目標是提供更優秀的框架以表示系統服務間的依賴關系,並依此實現系統初始化時服務的並行啟動,同時達到降低Shell系統開銷的效果,最終代替現在常用的System V與BSD風格的init程序。與多數發行版使用的System V風格的init相比,systemd採用了以下的新技術:A.採用Socket激活式與匯流排激活式服務,以提高相互依賴的各服務的並行運行性能;B.用Cgroup代替PID來追蹤進程,即使是兩次fork之後生成的守護進程也不會脫離systemd的控制。
第五步:啟動終端
根據前面獲取的運行級別來啟動終端,mingetty程序是用於啟動終端的,它會調用登錄程序login,這樣就能顯示出登錄提示符了,類似mingetty這種用於打開終端的程序還有getty等。而如果默認運行級別為5,則會打開圖形界面。
第一步:硬體啟動過程
這一步和CentOS6差不多,詳細請看1.1內容。
第二步:GRUB引導階段
從這一步開始,CentOS6和CentOS7的啟動流程區別開始展現出來了。CentOS7的主引導程序使用的是grub2,執行過程是先載入boot.img、core.img兩個鏡像,再載入MOD模塊文件,把grub2程序載入執行,接著解析配置文件/boot/grub/grub.cfg,根據配置文件載入內核鏡像到內存,之後構建虛擬根文件系統,最後轉到內核。
CentOS7中使用命令進行配置,而不直接去修改配置文件了。grub.cfg配置文件開頭注釋部分說明了由/etc/grub.d/目錄下文件和/etc/default/grub文件組成。改好配置後都需要使用命令grub2-mkconfig -o /boot/grub2/grub.cfg,將配置文件重新生成。
第三步:內部引導階段
這一步與CentOS6也差不多,載入驅動,切換到真正的根文件系統,唯一不同的是執行的初始化程序變成了/usr/lib/systemd/systemd。
第四步:init初始化階段(系統初始化階段)
CentOS7中我們的初始化進程變為了systemd。執行默認target配置文件/etc/systemd/system/default.target(這是一個軟鏈接,與默認運行級別有關)。然後執行sysinit.target來初始化系統和basic.target來准備操作系統。接著啟動multi-user.target下的本機與伺服器服務,並檢查/etc/rc.d/rc.local文件是否有用戶自定義腳本需要啟動。最後執行multi-user下的getty.target及登錄服務,檢查default.target是否有其他的服務需要啟動。
注意:/etc/systemd/system/default.target指向了/lib/systemd/system/目錄下的graphical.target或multiuser.target。而graphical.target依賴multiuser.target,multiuser.target依賴basic.target,basic.target依賴sysinit.target,所以倒過來執行。
unit對象:unit表示不同類型的systemd對象,通過配置文件進行標識和配置;文件中主要包含了系統服務、監聽socket、保存的系統快照以及其他與init相關的信息。(也就是CentOS6中的伺服器啟動腳本)
第五步:啟動終端
systemd執行sysinit.target
systemd啟動multi-user.target下的本機與伺服器服務
systemd執行multi-user.target下面的/etc/rc.d/rc.local
Systemd執行multi-user.target下的getty.target及登錄服務
getty.target是啟動終端的systemd對象。如果到此步驟,系統沒有指定啟動圖形桌面,到此就可以結束了,如果需要啟動圖形界面,要在此基礎上啟動桌面程序。
從 CentOS 7 版本之後,系統開始用 systemd 實現init進程,系統啟動和伺服器守護進程管理器功能,負責在系統啟動或運行時,激活系統資源,伺服器進程和其它進程。
unit表示不同類型的systemd對象,通過配置文件進行標識和配置;文件中主要包含了系統服務、監聽socket、保存的系統快照以及其它與init相關的信息。
3.2 system unit文件格式
/usr/lib/systemd/system:發行版打包者使用,每個服務最主要的啟動腳本設置,類似於之前的/etc/init.d/
/etc/systemd/system:系統管理員和用戶使用,管理員建立的執行腳本,類似於/etc/rcN.d/Sxx的功能,比上面目錄優先運行
/lib/systemd/system::ubutun的對應目錄
/run/systemd/system:系統執行過程中所產生的服務腳本,比上面目錄優先運行
unit 格式說明:
service unit file文件通常由三部分組成:
Unit段的常用選項:
Service段的常用選項:
Install段的常用選項:
注意:對於新創建的unit文件,或者修改了的unit文件,要通知systemd重載此配置文件,而後可以選擇重啟。
首先在啟動界面按e編輯啟動參數,
將ro參數更改為rw init=/sysroot/bin/sh,按ctr + x啟動系統
按下圖執行命令更改root密碼
⑨ Linux( bootloader)啟動操作系統過程
Linux Booting Process:
(1) BIOS
功能:執行計算機系統完整性檢測;通電自檢;搜索/載入/執行 boot loader程序。
一旦 boot loader 程序被探測到,並且載入到內存,BIOS會把控制權交給它。
(2) MBR
MBR位於引導盤(Bootable Disk)的第一個扇區(512B)。
通常是在 /dev/sda 或者 /dev/hda 。
注意:引導盤(bootable disk)和引導分區(bootable partition)的區別。
(3) GRUB
GRUB = Grand Unified Bootloader
如果在系統中安裝有多個內核鏡像,你可以選擇某一個被執行。
GRUB展示了一個啟動畫面,等待幾秒,如果你不輸入任何字元,它將會按照grub配置文件的規定載入默認的內核鏡像。
Grub配置文件在: /boot/grub/grub.conf
它包含了內核和initrd.img
(4) Kernal
(注意Kernal和kernel不一樣)
Kernal按照grub.conf文件的規定,掛載根文件系統。
一旦kernal啟動,它第一件事情就是執行:sbin/init 進程。
initrd是被kernel用做臨時根文件系統,直到Kernal掛載了根文件系統。
(5) INIT(Initilization)
根據 /etc/inittab 文件決定Linux運行層級,運行級別決定了哪個初始化程序(Initial Programs)被載入到啟動項。
(6) Run Level
根據你的運行級別的設定,操作系統會執行下來對應的文件夾下的程序:
Linux的7個運行級別(Run levels):
標準的Linux運行級別為3或者5,如果是3的話,系統就在多用戶狀態;如果是5的話,則是運行著XWindow系統。不同的運行級別有著不同的用處,也應該根據自己的不同清晰來設置。例如,如果丟失了root口令,那麼可以讓機器啟動進入單用戶模式來設置。
如果是使用S(Start)開頭的程序,那麼是用在啟動的時候,
如果是使用K(Kill)開頭的程序,那麼是用在關機的時候。