這章簡單描述下系統的啟動流程,主要以破環修復實驗為主:
系統啟動基本過程:
Linux系統啟動過程大致按照如下步驟進行(這是一個簡述):
第一階段:BIOS啟動引導階段;
在該過程中實現硬件的初始化以及查找啟動介質;
從MBR中裝載啟動引導管理器(GRUB)并運行該啟動引導管理
第二階段:GRUB啟動引導階段;
裝載stage1
裝載stage1.5
裝載stage2 讀取/boot/grub.conf文件并顯示啟動菜單;
裝載所選的kernel和initrd文件到內存中
第三階段:內核階段:
運行內核啟動參數;
解壓initrd文件并掛載initd文件系統,裝載必須的驅動;
掛載根文件系統
第四階段:Sys V init初始化階段:
啟動/sbin/init程序;
運行rc.sysinit腳本,設置系統環境,啟動swap分區,檢查和掛載文件系統;
讀取/etc/inittab文件,運行在/et/rc.d/rc(N).d中定義的不同運行級別的服務初始化腳本;
打開字符終端1-6號控制臺/打開圖形顯示管理的7號控制臺
同時在上述過程中各階段所需要讀取的文件和操作的對象:
BIOS啟動引導階段 |
GRUB啟動引導階段 |
:內核階段 |
/init/sysinit階段 |
None |
/boot/grub/grub.conf |
/boot/vmlinuz-<version> |
/etc/rc.d/rc.sysinit |
|
/boot/grub/stage1_5 |
/boot/initrd-<version> |
/etc/inittab |
|
/boot/grub/stage2 |
/etc/rc.d/rc<#>.d |
/etc/rc.d/init.d/* |
實驗一:如果開機啟動時發現某服務出錯導致無法啟動,進行排錯?
步驟:1、開機啟動讀秒后按esc鍵,進入GUN GRUB 窗口,按a進行內核參數修改。
2、chkconfig –list testsrv 查看服務所有模式下的啟動狀態
3、mount -o remount,rw / 用讀寫方式重新掛載/
4、chkconfig testsrv off 關閉服務,不制定級別,默認2,3,4,5級別下服務關閉
5、chkconfig –level 1 testsrv off
6、ls /etc/rc5.d/tsetsrv 查看是5模式下,文件是K或S開頭的,
7、重新啟動
實驗二:dd if=/dev/zero of=/dev/sda bs=1 count=446,破環MBR第一個分 區 前446字節(bootloader),修復?
hexdump -C -n 446 /dev/sda ---發現前446個字節變成空的
步驟:1、開機進入救援模式,按下面步驟,打開一個shell。
2、按照下圖,進行操作,
3 、exit,退出重啟.
實驗三:刪除/boot/grub下的所有文件,保留grub.conf和splash.xpm.gz這兩個文件;即stage_2階段被破環?
重啟時的界面如下圖:
修復方法和實驗二的過程一樣:
1、進入救援模式,開啟一個shell
2、chroot /mnt/sysimage
3、 grub-install /dev/sda
4、sync; exit ;退出重啟
實驗四:編輯/boot/grub/grub.conf文件,設置進入單用戶模式口令,不讓其他用戶隨便進入單用戶
模式,進行某些危險操作?
a、
1、 vim /boot/grub/grub.conf
2、在hiddenmenu這一行的上面插入:
3、password (輸入密碼)
b、也可以對密碼進行加密;
用 grub-md5-crypt 命令對密碼進行加密,
password –md5 加密后口令
c、md5加密算法不安全,已被破解,可以用 grub-crypt 命令生成更安全的加密口令;
password –encrypted 生成的加密口令
d、如果 password –encrypted 生成的加密口令,放在 title這一行的下面,則變成開機啟動 時的密碼;
輸入對應密碼才能啟動。
實驗五:/etc/grub/grub.conf文件里,initrd 與kernel這兩行的順序不能顛倒,如果順序反了,如何修復?
啟動時報錯的界面如下圖:
修復步驟如下圖:
1、重啟,按e進入編輯命令模式
2、 啟動完成后,再 修改/boot/grub/grub.conf文件;把initrd 與kernel行的位置換一下,kernel一定在initrd行的前面;然后保存退出。
實驗六: 刪除/etc/fstab 和/boot ,并恢復?重啟后界面如下圖:
步驟:1、重啟,在讀進度條界面快速按esc鍵,選擇下圖中救援模式:
2,下圖發現,找不到系統的分區了,要先修復/etc/fsatb,讓系統識別分區。
3、通過下圖中的操作找出/boot和”/”分區,并修復/etc/fstab文件:
4、修復完/etc/fstab 文件,保存退出,重新啟動,再次進入救援模式,可以看到,這時候,系統找到根分區了,并且被掛載到/mnt/sysimage下;
可以進行chroot /mnt/sysimage 切根操作了。如下圖:
5、先切換根,掛載光盤,發現光盤下有vmlinuz內核文件,移動內核文件到/boot,操作如下圖:
6、創建根文件系統**
mkinitrd /boot/initramfs-uname -r uname -r
7、安裝grub
grub-install /dev/sda
8、/boot/grub下缺少grub.conf文件。手動編輯一下,下圖中注釋可以不寫。
注意:如果上述實驗步驟8,grub.conf文件寫錯了,重啟時會出現下圖的界面:
這里也可以直接寫grub.conf文件,然后重新加載boot,就不需要再重新進救援模式重新修改grub.conf文件了;節省大量時間。
等機器重啟后,再把grub.conf文件修改好。操作如下圖:
實驗七:在邏輯卷環境下刪除/boot目錄和/etc/fstab文件如何恢復
上面的是一個邏輯卷的環境,按照上述方法刪除后恢復的方法如下進入救援模式先查看一下文件系統、分區情況
我們發現邏輯卷沒有被激活,并且根在邏輯卷上,只有激活邏輯卷才能掛載邏輯卷,激活卷組就相當于激活邏輯卷
掛載邏輯卷,并編輯邏輯卷的根上的etc/fstab文件
編輯文件的內容如下
重啟啟動,進入救援模式,發現根自動掛載到/mnt/sysimage目錄下
后續的操作過程同上一樣就可以了。在這里需要注意的是最后編寫grub.conf文件時真正的根是邏輯卷的根,文件名字很長。
用vim編輯器編輯文件時可以用:r!讀入命令的輸入到vim中,這樣可以節省時間,避免自己寫的時候出錯,比如內核文件和initrd文件都可以通過這種方法讀入,:r!ls /boot/內核文件,支持補全。
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。