LINUX教程,Linux啟動流程與模塊管理(15)

 2023-11-05 阅读 29 评论 0

摘要:系統的啟動其實是一項非常復雜的過程,因為內核得要檢測硬件并加載適當的驅動程序,接下來則必須要調用程序來準備好系統運行的環境,以讓用戶能夠順利的操作整臺主機系統,如果你能夠理解系統啟動的原理,那么將有助于你在系統出問題時能夠很快速的修復系統,而且還能夠順利的配置多

系統的啟動其實是一項非常復雜的過程,因為內核得要檢測硬件并加載適當的驅動程序,接下來則必須要調用程序來準備好系統運行的環境,以讓用戶能夠順利的操作整臺主機系統,如果你能夠理解系統啟動的原理,那么將有助于你在系統出問題時能夠很快速的修復系統,而且還能夠順利的配置多重操作系統的多重啟動問題,為了多重啟動的問題,你就不能不學 grub 這個 Linux 下優秀的啟動管理程序(boot loader),而在系統運行期間,你也得要學會管理內核模塊,下面進入正題開始學習吧.

關于Linux系統的啟動流程一覽

操作系統的啟動過程是一個很復雜的過程,在啟動過程中,那個引導裝載程序(BootLoader)使用的軟件可能不一樣,例如目前主流發行版為GRUB,但是呢早期Linux系統使用的是,LILO,現在很多人喜歡使用SPFDISK,不管如何,我們總要了解整個(BootLoader)的工作情況,才能了解怎樣進行多重引導的設置.

這里以個人計算機搭建的Linux主機為例子,當你按下電源時計算機硬件會主動讀取BIOS來加載硬件的一些信息,和自我檢測,之后系統會讀取第一個可啟動的設備(由BIOS設置的),此時就可以讀入引導裝載程序啦.

LINUX教程、引導裝載程序可以指定使用那個內核來啟動,并負責實際加載內核到內存當中解壓與執行,此時內核就能夠開始在內存中活動啦,并檢測所有硬件信息,與加載相應的驅動程序,等到內核加載驅動完畢,此時我們的操作系統就完成整個啟動過程啦,簡單的歸納來說,系統的啟動流程是這樣的:

● 按下開機按鈕,這個是必須的,奧對了,必須要有電才可以.
● 系統會加載BIOS,來進行硬件信息的讀取,和自我檢測,并依據設置取得第一個可啟動設備.
● 讀取并執行第一個可啟動設備內 MBR 記錄里的 BootLoader(grub或者是spfdisk).
● 依據BootLoader里的設置加載內核,內核會開始檢測硬件,并加載相應的驅動程序.
● 在完成驅動的加載后,內核此時會主動調用systemd進程,而systemd進程會取得run-level信息.
● systemd進程執行 /etc/rc.d/init.d 內的腳本,部署操作環境(如網絡,時區等).
● systemd進程執行,run-level的各個服務程序腳本,來啟動指定運行級別的各種服務.
● systemd進程執行 /etc/rc.d/rc.local 加載內部的一些數據.
● systemd進程執行終端機模擬程序mingetty來啟動login程序,最后等待用戶的登陸.

以上的流程,就是Linux系統的啟動流程,你會發現systemd進程非常重要,當然這可是系統的根,這些內容你最好背過,要不然面試問到的話就尷尬啦.

關于BIOS開機自檢與MBR主引導記錄

想要啟動一個系統首先就得讓系統去加載BIOS,并通過BIOS程序去加載CMOS里的相關信息,并通過CMOS里的設置值去讀取主機的各項硬件配置,例如:CPU頻率,內存大小,系統時間等常規的參數.

接著在取得這些信息后,BIOS還會進行開機自檢(Power-On Self Test,POST),然后開始執行硬件檢測初始化,并配置PNP設備等,之后再定義出可啟動的設備順序,接下來就會開始進行啟動設備的數據讀取了(MBR的相關任務開始).

LINUX系統,BIOS會指定啟動的設備,好讓我們可以讀取磁盤中的操作系統內核文件,但由于不同的操作系統的文件格式并不相同,因此我們必須要以一個引導裝載程序來處理內核文件的加載問題,這個引導裝載程序就被稱為BootLoader,這個BootLoader程序就安裝在啟動設備的第一個扇區內,也就是我們所說的MBR(主引導記錄)了.

其實只要BIOS能夠檢測得到你的磁盤,那么它就有辦法來讀取你的第一個扇區,如此一來,BootLoader也夠被執行.

Boot Loader的功能

每個文件系統 (filesystem,或者 partition) 都會保留一塊引導扇區 (boot sector) 提供操作系統安裝 boot loader,而通常操作系統默認都會安裝一份 loader 到他根目錄所在的文件系統的 boot sector 上.

每個操作系統默認是會安裝一套 boot loader 到他自己的文件系統中,而在 Linux 系統安裝時,你可以選擇將 boot loader 安裝到 MBR 去,也可以選擇不安裝。.如果選擇安裝到 MBR 的話,那理論上你在 MBR 與 boot sector 都會保有一份 boot loader 程序的,至于 Windows 安裝時,他默認會主動的將 MBR 與 boot sector 都裝上一份 boot loader 所以你會發現安裝多重操作系統時,你的 MBR 常常會被不同的操作系統的 boot loader 所覆蓋.

BootLoader的常用功能有以下幾個

vim三種工作模式怎么切換?1.提供一個菜單:用戶可以選擇不同的啟動項.
2.加載內核文件:直接執行可啟動系統的區段.
3.轉交給其他loader:將引導裝載入成功,轉交給其他loader負責.

由于具有菜單功能,因此我們可以選擇不同的內核來啟動,這里需要強調的是,如果要裝雙系統應該先裝windows再裝linux.

加載內核自檢與systemd的功能

接下來就是加載內核的時候啦,由于我們的Linux驅動都是以模塊的形式存在的,比如鍵盤鼠標驅動,網絡驅動等,包括我們的硬盤驅動,常用的一些驅動文件就是放在/lib/modules目錄內的,那么這里就出現了一個問題,想一下,我們的硬盤驅動是在Linux模塊里的,而我們要使用硬盤才是能啟動系統,系統沒啟動也就無法加載磁盤驅動,無法加載磁盤驅動也就無法打開磁盤啊,這里就出現了一個東西,那就是虛擬文件系統(InitiaIRAM Disk).

虛擬文件系統,一般使用的文件名為/boot/initrd,這個文件的作用是臨時加載一些系統啟動而需要用到的驅動的,你可以把它想象成是一個微型的Linux系統,它的作用只是加載系統的必要驅動而已,通過該程序來加載啟動過程中所最需要的內核模塊,通常這些模塊就是 U盤,RAID,LVM,SCSI等文件系統與磁盤驅動程序,等加載完成后會自動調用 /sbin/init 將控制權交給完整的Linux系統管理.

當上面的工作完成后,我們的系統已經可以開始工作啦,下面就要將控制權交給/sbin/init來進一步初始化我們的系統環境.

shell進程。第一個進程init,與/etc/inittab

當內核加載完成后,我們的init進程就開始干活了,/sbin/init主要的任務就是加載后續的系統環境,比如終端的變量,或者調用其它配置文件,繼續干活,其最主要的是系統的執行等級,我們的系統有以下7個執行等級,分別是:

基本上runlevel分為0-6 ,7個等級:

0:關機-shutdown
1:單用戶模式(sigle user),root用戶,無須認證;維護模式
2:多用戶模式(multi user),會啟動網絡功能,但不會啟動NFS;維護模式
3:多用戶模式(multi user),完全功能模式;文本界面
4:預留級別:目前無特別使用目的,但習慣同3級別使用
5:多用戶模式(multi user),完全功能模式,圖形界面
6:重啟模式

由于 run level 0, 4, 6 不是關機、重新啟動就是系統保留的,所以:『 您當然不能將默認的 run level 配置為這三個值 』,否則系統就會不斷的自動關機或自動重新啟動.

完成級別的選擇之后,下一步就是進一步調用配置文件,繼續加載參數.

vim進入命令模式,系統初始化的過程主要是執行一些腳本配置文件來完成的:

1.執行系統初始化腳本(/etc/rc.d/rc.sysinit)對系統進行基本的配置以讀寫方式掛載,根文件系統及其它文件系統,到此系統算是基本運行起來了,后面需要進行運行級別的確定及相應服務的啟動.
2.執行/etc/rc.d/rc腳本,該文件定義了服務啟動的順序是先K后S,而具體的每個運行級別的服務狀態是放在/etc/rc.d/目錄下,所有的文件均是指向/etc/init.d下相應文件的符號鏈接,rc.sysinit通過分析/etc/inittab文件來確定系統的啟動級別,然后才去執行/etc/rc.d/rc.d下的文件.
3.執行用戶自定義引導程序/etc/rc.d/rc.local完成了系統所有的啟動任務后,linux會啟動終端或X-Window來等待用戶登錄.
4.最后一步輸入用戶名及密碼就可以登入系統了.

至此我們的操作系統就啟動起來啦,接下來看一下常用的啟動管理命令吧.

GRUB相關配置

改開機等待時間

1.第一步修改GRUB配置文件,改掉幾個配置參數,然后生成寫入/boot目錄即可.

[root@localhost ~]# vim /etc/default/grubGRUB_TIMEOUT=5    #引導時間
GRUB_DEFAULT=1    #從哪個內核引導,默認是0[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg

啟動GRUB加密

1.第一種方式是明文設置,不推薦,但下面還是要看一下配置流程的.

[root@localhost ~]# vim /etc/grub.d/00_header
文件末尾追加cat << EOF
set superusers=admin
password admin 123123
EOF[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg

2.第二種方法,先加密我們的密碼,此處通過命令生成.

[root@localhost ~]# grub2-mkpasswd-pbkdf2
Enter password:
Reenter password:PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.4E2254C5684C9F12C06354A090B8447B0D1532D1BCA9FA5CBE870E7
0E1ED46A25BD3D2443E2E3676613AAF909FD4F34C213B2904C7580B1096B1E16736E48883.D5C3FDF2DF61424C6655FE343CE909C0D13B65
95312DD50CE764B6EC3954347BA63E04CA62D6B3DA1AE00D5DAA8CF8DCF752F8046BFB18F5B19604DCE512C09E

創建shell程序?接著復制這一行將密碼列用密鑰代替即可.

[root@localhost ~]# vim /etc/grub.d/00_header
文件末尾追加cat << EOF
set superusers=admin
password_bkdf2 admin grub.pbkdf2.sha512.10000.4E2254C5684C9F12C06354A090B8447B0D1532D1BCA9FA5CBE870E7
0E1ED46A25BD3D2443E2E3676613AAF909FD4F34C213B2904C7580B1096B1E16736E48883.D5C3FDF2DF61424C6655FE343CE909C0D13B65
95312DD50CE764B6EC3954347BA63E04CA62D6B3DA1AE00D5DAA8CF8DCF752F8046BFB18F5B19604DCE512C09E
EOF[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg


Linux系統修復流程

◆破解開機密碼◆

1.如果我們的開機密碼忘記了,我們可以使用如下方法解決.重啟系統按e鍵,找到linux16加入以下內容.

linux16 /vmlinuz-3.10.0 root=/dev/centos-root rhgb quiet刪除: rhgb quiet 添加上:init=/bin/sh
按住: CTRL+X

2.接著會看到進入到一個shell環境,我們依次執行以下代碼即可.

sh-4.2# mount -o remount,rw /
sh-4.2# echo "redhat" | passwd --stdin root
sh-4.2# touch /.autorelabel
sh-4.2# exec /sbin/init

◆破解GRUB密碼◆

grub密碼也忘記了,如何修改密碼.(光盤救援模式)了解下.

執行以下步驟:Troubleshooting -> Rescue a CentOS system -> Continue ->/bin/sh 會進入光盤系統.sh-4.2# chroot /mnt/sysimage/
sh-4.2# vi /etc/grub.d/00_header刪除以下字段
cat << EOF
set superusers=admin
password admin 123123
EOF[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg

◆MBR/GRUB修復◆

1.使用命令來模擬數據損壞,這里我們強制覆蓋硬盤的前446字節的數據,來模擬MBR損壞.

[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=1 count=446
[root@localhost ~]# reboot

shell界面。2.執行完成上面的步驟再次開機,會發現自動的從光盤引導啟動啦,原因就是我們的MBR被刪除了,而系統會默認尋找第二個啟動設備,此時正好光盤能夠被啟動.

執行以下步驟:Troubleshooting -> Rescue a CentOS system -> Continue ->/bin/sh 會進入光盤系統.sh-4.2# chroot /mnt/sysimage            #切換到硬盤分區
bash-4.2# grub2-install /dev/sda        #把grub裝在sda里面
bash-4.2# exit
sh-4.2# reboot

如上我們就完成了MBR的修復工作,再次開機系統會進入正常的環境啦.

◆BOOT丟失修復◆

1.這里我們通過刪除/boot/目錄下的所有文件,來模擬BOOT文件丟失的修復流程.

[root@localhost ~]# rm -fr /boot/*
[root@localhost ~]# reboot

2.此時重啟后我們的系統就無法正常使用啦,會看到以下grub rescue>提示符,說明我們的GRUB沒問題,接下來我們來修復,老樣子掛載光盤使用光盤系統進入bash并修復一下.

執行以下步驟:F12->CD-ROM->Troubleshooting -> Rescue a CentOS system -> Continue ->/bin/sh 會進入光盤系統.sh-4.2# chroot /mnt/sysimage/
bash-4.2# mount /dev/sr0 /mnt
bash-4.2# rpm -ivh --force /mnt/Packages/kernel-3.10.0-862.el7.rpmbash-4.2# mkdir /boot/grub2                        #創建BRUB目錄,并修復
bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg
bash-4.2# grub2-install /dev/sdabash-4.2# exit
sh-4.2# reboot

到此為止我們的/boot目錄就修復成功啦,是不是很簡單啊.

轉載于:https://www.cnblogs.com/LyShark/p/10221824.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/166190.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息