CentOS6和5啟動流程

簡述過程

一、CentOS? 5和6的啟動流程

linux內核: 存在于/boot分區,是整個操作系統的最底層,它負責整個硬件的驅動,以及提供各種系統所需的核心功能,包括防火墻機制、是否支持LVM或Quota等文件系統等等,如果內核不認識某個最新的硬件,那么硬件也就無法被驅動,你也就無法使用該硬件。
計算機真正工作的東西其實是硬件,例如數值運算要使用到CPU、數據儲存要使用到硬盤、圖形顯示會用到顯示適配器、音樂發聲要有音效芯片、連接Internet 可能需要網絡卡等等。內核就是控制這些芯片如何工作。
Linux的非核心驅動程序(大部分驅動程序,如網卡):存放于/lib/modules//lib/modules/VERSION-release.ko文件,支持內核模塊的動態裝載和卸載
modprobe 模塊名 #裝載模塊
modprobe -r 模塊名 #卸載模塊
lsmod 模塊名 #查看是否裝載了模塊
ramdisk:輔助偽文件系統,加載一些必要的驅動程序
Centos5: /boot/initrd-version-release.img
Centos6、7:/boot/initramfs-version-release .img

Centos6的啟動
1.加載BIOS的硬件信息,獲取第一個啟動設備(在啟動時需要配置bios)
2.讀取第一個啟動設備MBR的引導加載程序的啟動信息我稱之為grub的1階段,MBR:也稱為引導扇區,有446個字節的引導區和64個字節的分區表構成最后兩個字節為55AA表示結束,沒有特定的含義;當然,我們的操作系統是都是由一個個文件組成的,而文件是需要建立在文件系統之上的,如果沒有文件系統,那么我們的文件將無法組織,而446個字節很顯現不夠存放一個文件系統的驅動,那么446個字節的作用是什么呢?這446個字節的引導區,稱之為引導區,不如稱之為一個指針(個人而言啊,并不官方),這446個字節指向了MBR后續的27個扇區,用來加載我們操作系統分區的文件系統,讓我們在啟動系統的時候可以識別最基本的/boot分區,這個階段我稱之為grub的1.5階段,當加載完這27個扇區之后,我們就可以識別/boot分區下的文件系統了。這時進入引導的第2階段系統會加載 /boot/grub/grub.cfg文件,并支持可操作的grub界面。

3.經歷了grub的引導階段,這時加載核心操作系統的核心信息,核心開始解壓縮,進行自身初始化
4.探測可識別到的所有硬件設備,加載硬件驅動程序(借助于ramdisk加載驅動 Centos6為 initramfs)
5.從initramfs中chroot到真是的/下
6.運行用戶空間的第一個應用程序:/sbin/init,并獲取默認的運行信息
7.init程序執行/etc/rc.d/rc.sysinit文件
8.init執行運行的各個服務啟動scripts
9.init執行/etc/rc.d/rc.local
10.執行/bin/login程序,等待用戶登錄
11.登錄之后開始以Shell控制主機
POST –> Boot Sequence(BIOS) –> Boot Loader –> Kernel(ramdisk) –> rootfs –> switchroot –> /sbin/init –>(/etc/inittab, /etc/init/*.conf) –> 設定默認運行級別 –> 系統初始化腳本rc.sysinit –> 關閉或啟動對應級別的服務 –> 啟動終端
/etc/rc.d/rc.sysinit: 系統初始化腳本的工作流程
(1) 設置主機名
(2) 設置歡迎信息
(3) 激活udev和selinux
(4) 掛載/etc/fstab文件中定義的文件系統
(5) 檢測根文件系統,并以讀寫方式重新掛載根文件系統
(6) 設置系統時鐘
(7) 激活swap設備
(8) 根據/etc/sysctl.conf文件設置內核參數
(9) 激活lvm及software raid設備
(10) 加載額外設備的驅動程序
(11) 清理操作
二、運行級別
運行級別:為系統運行或維護等目的而設定;0-6:7個級別
0:關機
1:單用戶模式(root自動登錄), single, 維護模式
2: 多用戶模式,啟動網絡功能,但不會啟動NFS;維護模式
3:多用戶模式,正常模式;文本界面
4:預留級別;可同3級別
5:多用戶模式,正常模式;圖形界面
6:重啟
默認級別: 3, 5
三、故障分析和解決方法(記得啟動時關閉selinux,否則你會悲劇的,啟動的時候在grub內核加載環節中,在內核參數最后加入selinux=0):
1、initramfs文件被破壞的解決方法
ramdisk(initrd或initramfs)文件的制作,可以在光盤救援模式下進行:
(1) mkinitrd命令(內部實際調用的dracut命令
為當前正在使用的內核重新制作ramdisk文件
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut命令
為當前正在使用的內核重新制作ramdisk文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)
2、MBR446個字節引導區被破壞(dd if=/dev/zero of=/dev/sda bs=1 count=446 ; sync),由下圖可見系統已經無法正常引導

843117FE8F28438B9F1CC0600F8E078D

破壞MBR后的系統啟動狀態

05AF3522F479432394123349D65BC8CA

這是我們使用救援光盤,啟動救援模式
系統提示,救援光盤已經掃描到了,我們服務器上已經存在的系統,并在之后掛載到/mnt/sysimage目錄下

AE8A607FBE9F40DCAF1E8BBDC53A0EEA

首先我們需要把根切換到/mnt/sysimage/下,然后使用grub-install /dev/sda 重新安裝grub

7EBA61D6A96244AB93A956CB7C03B140

我們使用hexdump 查看一下sda的MBR扇區是否已經恢復了。

1AA22F1BFF23498CBA63DAE3E61E04B8

系統已經可以正常啟動了
3、內核丟失補救
現在我們把內核刪了

60653CF567F54A2C85B5586B518B9BFD

因為系統已經啟動,并且內核已經加載到了內存當中,所以先階段,內核文件損壞不會影響到系統的運行,但是如果重啟系統,系統將不能正常運行。下圖為刪除內核后提示錯誤信息

DFB7CB5942EC4712A5C8F330B47FA115

這種情況下,系統加載不到內核,單用戶模式都無法啟用,我們還是使用救援光盤來恢復
我們真正的系統存在路徑在 /mnt/sysimage,因為內核丟失,所以我們需要重新安裝內核,我們將光盤掛載到真正根的/mnt目錄,并chroot到真正根目錄下

0431182617E043C49EC6BF328FB571FA

重新安裝內核

2C2B05D8A0CF4E3D8CB9BC34D7D7AA83

重啟,系統可以正常啟動了,但是注意一點,在生產環境中,如果有編譯內核的需要,必須要做/boot目錄的備份工作,如果定制的內核丟失,使用rpm的安裝方式,修改一下grub.conf文件的內核指向,雖然依然可以正常使用,但是可能會導致系統的一些服務無法正常使用,而重新編內內核的話,但是當時編譯時的選項忘記了怎么辦。。這將是一個很糾結的問題,所以,備份備份!重中之重!
4、/etc/fstab 文件損壞的錯誤提示,和修復方法(我們依然使用刪除的辦法來破壞)

B7C4117E3CFA43A5B9F4D15F36FF2C72

重啟系統

C4430BF8F8C8465288B6F01FA5FBDDBE

啟動時按esc,可以很清楚的看到,第一條錯誤提示 /etc/fstab: open failed: No shuch file or directory ! 說明文件丟失,后面需要在磁盤上做的操作都做不了,在這里就卡住了。
解決方法:1、使用救援光盤,進入系統后重新編輯/etc/fstab文件
2、使用單用戶模式進入,這時系統直接進入,不需要輸入口令,但是系統值掛載了根,我們現在需要做的是,以讀寫的方式重新掛在根,并編輯/etc/fstab文件(這里我們使用第二種方法來操作?。?br />這時候我們根據下面提示,按e,進入grub的編輯模式

D248E97B905644DAAC8D3E7680039D5F

上下鍵移動到kernel再點e,編輯引導參數

00B829A11C2F4E33AEE373103A8275F0

在quiet后面輸入1回車,按b鍵啟動系統

77A35BF4DA3D4D8BB90C91E0CC6D13C9

圖可見,系統只掛在了根分區,其他分區信息一概沒有

6939FE50F31747DDA1248C256E1B092A

現在重新建立/etc/fstab文件,該文件必要的幾條信息,就是根分區的信息和 /boot分區的信息還有swap分區,其他分區都是選填的(有的生產環境會為為home單獨建立分區,該條目也必須填寫,否則無法正常登陸普通用戶),現在這種情況只能挨次掛載各個分區,查看其信息。輸入blkid可以看到sda5是swap分區,那么這個就確認了,而系統啟動sda2是根分區這個也是確認的,那么只差boot分區,一般boot分區都是磁盤的第一個分區,那么我們臨時將sda1臨時掛載在一個目錄下,看一下里面的文件是否是boot的。

3496DBDBEF524E73AE24D3F52211E96E

掛載 /sda1到mnt下

414D58F5CDBF4C8990EC41C9A6229258

sda1為boot分區,現在信息已經確認,我們來修復/etc/fstab文件

3C53774CDC574708B348020B260303E5

提示文件系統只讀,重新掛載一下根分區,再編輯文件

0A109711B7B844449654DAC73FFA4673

使用vim /etc/fstab編輯文件
在命令模式下輸入r!blkid 將設備信息導入到編輯框內

3D6509638B244022BD327DAB35E33150

編輯后的fstab文件,現在我們重啟系統

EE4CB2EC044F44EEBCD476F4D1F8DB07

系統已經可以正常啟動了!修復fstab文件的問題已經解決。
如果系統使用的lvm的方式安裝的,那么在掛在lv的時候需要使用vgchange -ay 來激活所有vg,然后才能掛在lv
5、整個boot目錄損壞的恢復方法
由下圖演示,我們已經破壞了真個boot分區,連文件系統都已經損壞了,毫無疑問,重啟將無法啟動,這時候我們使用光盤來恢復boot分區

325F06CF63A64BE39F95D45CAEAE687B

第一步先掛載光盤到/mnt/sysimage/mnt下(真實根的mnt目錄下

D8A1E9217EB9457FB803710C55B7AB09

第二步chroot到真實的根

DBF9DC6C2AB54CA5A0A688BD1E280C39

第三步修復文件系統,并掛載到/boot下

803F6F241DB84BECAFE77406A02B29D7

安裝kernel

34FF857967C5427FAF82217777F01C4F

kernel安裝成功,但是initramfs生成失敗,我們看一下問題,我想應該是重新制作的文件系統,在fstab中掛載的uuid變了

CB05D6EF15654F2888153217996654DC

修改fstab中記錄,并重新生成initramfs文件

C63D20AB51F04D3682604CBC87219E68

重新安裝grub,并編輯grub.conf

292FE63DA6F04D9EB5334759992EDA86

default 0 : 默認為0選項
timeout 3 : 3秒自動加載系統
hiddenmenu 隱藏菜單
kernel:加載內核 root為根分區的uuid或者使用設備名也行,建議使用uuid
initrd :指定initramfs文件
修復grub引導

489CAEFE8C714C7AA73150D173E6755D

安裝失敗,這個問題我暫時沒有找到,但是/boot/grub/下的引導文件已經安裝好了,如果系統起不來可以在grub命令行界面安裝grub的1.5階段

8548365D369E46EF8CFB142645EC4943

1.5引導階段的數據安裝成功,hd0,0為引導分區,即boot分區,如果/boot/grub/grub.conf文件配置正確的話,將可以正常啟動了。
6、系統,/sbin/init文件被破壞
init文件依賴upstart安裝包,重新安裝這個包就行了,進入救援模式或者在grub菜單界面按e修改內參數,在quiet 后面添加 init=/bin/bash,用bash來代替init,這樣我們便可以進入命令行使用一些基礎的命令來操作了,下面是操作步驟
直接清空/sbin/init文件的內容,然后重啟,到grub引導界面,我們修改內核參數 在quiet后面添加 init=/bin/bash 回車并按B鍵啟動

21A5D8C90BC74E7D90CAD021FB1FE610

掛載光驅到/mnt下

2995EFBB6A9942BAB3664574C7F23B12

嘗試安裝 upstart包

7530E8481EFC4B7EB397AE84FDA0939F

安裝成功了,重啟系統,可以正常啟動了。
7、如果一些配置文件丟失或軟件誤刪除,且無備份,可以通過重新安裝軟件包來恢復,例:
首先查找到/etc/inittab屬于哪一個RPM包
chroot /mnt/sysimage
rpm -qf /etc/inittab
initscripts-9.03.49-1.el6.centos.x86_64

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/99002

(2)
會飛的蝸牛會飛的蝸牛
上一篇 2018-05-20
下一篇 2018-05-20

相關推薦

  • 課堂筆記

    cat— 文本文件 1.cat/etc/centos/—release看到發行版名稱 lsb—releas—a ? ? ? ? ? ? ? ? ?? 看到發行版名稱 (centors? 7上如果看不到發行版名稱,并不是沒有,而是沒有安裝對映的軟件,生產環境中都是最小化安裝,默認安裝是最小文件) 2.sz/etc/centos—release傳到w…

    Linux筆記 2018-07-24
  • Linux-文件管理

    文件系統分層結構標準 http://www.pathname.com/fhs http://www.pathname.com/fhs/pub/fhs-2.3.pdf 包括 boot bin sbin etc lib64 tmp usr mnt media dev var home net misc srv proc sys root opt selinux …

    2018-03-30
  • 計算機的組成及功能

    1. 計算機是由硬件系統及軟件系統組成 1.1 硬件系統:CPU、存儲器、輸入及輸出設備; CPU:包括運算器及控制器;運算器完成算數及邏輯運算,而控制器則實現取指令和分析指令。 存儲器:包括內存、外存;內存主要負責存儲緩存數據,外村主要負責存儲本地數據。 輸入設備:鍵盤、鼠標等標準輸入設備。 輸出設備:顯示器、打印機等。 1.2 軟件系統:系統軟件及應用軟…

    Linux筆記 2018-05-12
  • linux下練習及答案

    1.顯示當前時間,格式:201-06-18 ?10:20:30 2.顯示前天是星期幾 3.設置當前日期為2019-08-07 06:05:10 4、在本機字符終端登錄時,除顯示原有信息外,再顯示當前登錄終端號,主機名和當前時間 6.今天19:30自動關機,并提示用戶 7.顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數字的文件或目錄 …

    2018-03-31
  • 馬哥Linux云計算面授班第1天課堂筆記

    開班典禮,規章制度,自我介紹,寫博客

    2018-03-26
  • 在CentOS7上編譯安裝apache 2.4源碼包,并啟動此服務

    1 關閉firwalld systemctl stop firewalld systemctl disable firewalld 2 關閉SElinux setenforce 0 vim /etc/selinux/config 找到以SELINUX開頭的那行,修改成SELINUX=disabled 以下就是腳本里的內容,執行就OK了 yum groupin…

    Linux筆記 2018-04-22
欧美性久久久久