一、電腦的啓動過程
(一)大概過程
開機找到BIOS--》找到硬盤的MBR--》加載引導程序(lilo grub等) --》加載kernel內核(掛載設備和硬件和必要的內核模塊)--》啓動用戶空間程序。
(二)詳細過程
(1)BIOS:開機--》bios啓動,載入基本輸入輸出設備--》找到CPU,內存,和基本的IDE和SCSI硬盤
(2)根據設備的啓動順序找到硬盤(或其他存儲設備如光盤、USB等)中的MBR(存放引導文件和分區引導的地方即bootloader,常用的bootloader程序有GRUB,lilo)--》通過grub等引導程序會列出操作系統列表,並標識出操作系統的引導文件所在的分區。
(3)引導文件找到操作系統的內核,並加載內核Kernel-->內核通過initrd文件進入虛根,用以訪問存於文件系統中的內核模塊,並加載相關設備的驅動和模塊,加載完成後切換到實根--》後啓動/sbin/init進程,內核開始初始化內存,並設置內核與相關模塊。
(4)最後系統根據運行級別確定啓動或停止哪些服務。根據/etc/inittab中設定的運行級來啓動相關的服務和腳本。
(5)進入用戶空間程序。
(三)幾個關鍵概念:
1、mbr
MBR:位於0磁道,0扇區,共512字節。
其中446字節用於存放bootloader。常用的bootloader程序有grub,lilo等。
64字節用於存放分區,其中16字節存放一個分區,所以硬盤只能劃分四個主分區,要想劃分更多的分區,就需要用到擴展分區。
2字節標註MBR是否有效。
2、內核
linux內核設計: 單內核+模塊
內核在/boot分區目錄下
模塊在/lib/modules/內核版本號相同的目錄/ 此目錄下。
inux內核是單內核,單內核會讓內核文件相當大,因爲需要把所有的驅動都加載進來。所以Linux雖是單內核爲了更優化,做成了核心內核和外圍模塊的模 式。啓動時只是啓動了內核核心。
而動態加載的內核外圍模塊有:驅動程序、文件系統(因爲不僅僅只有一種文件系統)、加密文件等。
3、虛根
因爲核心內核加載外圍模塊,就需要先加載存放外圍模塊這個磁盤的驅動,並能訪問文件系統。而驅動又存於硬盤的文件系統的模塊目錄中。而沒有驅動又無法識別出硬盤和文件系統,就沒法加載模塊。所以 內核就先設置了一箇中間層叫虛擬根,有基本的/proc /sys /dev等目錄,此虛根可以訪問相關的模塊文件,可以加載驅動,等加載完相關模塊後會切換到實根。可以用chroot命令切換根目錄。
kernel-->initrd-->ROOTFS, 即內核通過initrd找到文件系統才能找需要掛載的模塊。
(內核載入從BIOS中取得的基本硬件相關數據(CPU和內存等),然後再查找各接口,以找到不同接口上的新硬件(如硬盤、網卡、顯卡、USB等)--》如果探測到新硬件,則把相關信息加進/etc/sysconfig/hw.conf中,如設備驅動名稱。
如需要特殊設備驅動,剛把技術規範加入/etc/modules.conf中。下次啓動時會讀取modules文件,裝入所需的驅動。所以新設備如果沒有驅動時,需要裝入驅動。驅動一般在modules文件夾下。
(4)載入相關硬件後,內核開始初始化內存,並設置內核與相關模塊。
(四)命令
dmesg 命令查詢啓動過程的交互信息
/proc 目錄下提供了linux安裝的硬件信息
lsmod 命令檢查安裝的模塊。
rmmod {模塊名} 刪除模塊
insmod {模塊名} 安裝模塊
(五)/etc/inittab中的六個運行級:
0: 停止、關閉linux,停止所有服務
1:單用戶方式,不聯網
2、多用戶方式,不能訪問NFS
3、多用戶方式,啓動計算機上的網絡監控
5、圖形登錄
6、重新啓動
redhtat7之後更改啓動的方式有所改變:
1、systemctl set-default命令:設定新的運行級別:
systemctl set-default multi-user.target 設定默認爲字符界面,也就是3
systemctl set-default graphical.target 圖形界面 5
2、ln 軟鏈接方式:
ln -sf /lib/systemd/system/multi-suer.target /etc/systemd/system/default.target 更改爲3級
n -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target 更改爲5級
二、排錯
(一)啓動模式
1、單用戶模式
也就是運行級 1 。只啓用兩個服務。 可用於根口令忘記; /etc/fstab文件損壞,文件系統無法裝載等故障。
單用戶的方式:
grub下:
(1)如果GRUB有口令,則先鍵入P鍵輸口令
(2)選擇想引導的版本,ELSMP版爲支持 多處理器版,EL爲單處理器版
(3)在想選擇的版本上按e 鍵編輯
(4)到本行行末鍵入空格,然後輸入single,回到引導行,輸入b鍵開始引導。
可用的常用命令:
passwd root 更改根口令
檢查卸載硬盤的命令 如 fsck
exit退出單用戶模式後,不需要重啓電腦。
lilo下:
必須按 ctrl+x退出圖形屏幕,在 boot:提示符下輸入 linux single即可。
2、救援模式
用引導盤或第一張光盤引導到安裝模式下輸入: linux rescue
三個選項:
(1)contunue:linux會搜索硬盤中的安裝文件,所有找到的文件系統都裝載成/mnt/sysp_w_picpath的子目錄。是一種自動救援模式。其實就是單用戶模式。將/etc/fstab文件中相應文件系統都裝載成/mnt/sysp_w_picpath的子目錄。可以用fsck /dev/分區來檢查磁盤;mount命令來重載分區設備。
(2)read-only: 只讀,與上一方式差不多,只是找到的所有文件系統都裝載成只讀,是隻讀救援模式。可以在啓動時,把單用戶模式時輸入的single改爲emergency即可。
(3)skip: 跳過:則直接出現單用戶方式中的shell提示,不查找可用的文件系統,是手工救援模式。
(二)MBR和GRUB
1、MBR概念
位於0磁道,0扇區,共512字節。
其中446字節用於存放bootloader。常用的bootloader程序有grub,lilo等。
64字節用於存放分區,其中16字節存放一個分區,所以硬盤只能劃分四個主分區,要想劃分更多的分區,就需要用到擴展分區。
2字節標註MBR是否有效。
2、grub概述
grub存於MBR中的bootloader區域,因爲只有446字節大小,所以grub只把啓動放於mbr中,只是用於找到/boot/grub目錄,其他的文件放置於/boot/grub目錄下。
grub分爲三階段:
stage1:存於mbr中,只爲了引導然後找到/boot/grub目錄
stage1.5:識別常見的不同文件系統。因爲需要找到/boot/grub就需要先找到此分區,且識別出文件系統,所以需要此階段。
stag2:/boot/grub目錄。
3、/boot/grub/grub.conf配置文件詳解
default=0 //默認啓動哪個內核
timeout=5 //等待用戶選擇時間
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz //grub背景圖片
hiddenmenu //隱藏菜單,去掉此項就不隱藏
password grub密碼 //明文的。
password --md5 //加密的密碼格式,然後保存,再用gurb -md5-crpt命令生成一個密碼文件,再把生成的密碼複製到 此處的後面,以後編輯GRUB就需要輸密碼
title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64) //要引導內核的標題,可以更改,第一行title是表示第0個內核。
root (hd0,0) //內核文件所在位置,對grub而言,所有類型的硬盤一律爲hd.
kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=e6f3c00e-91be-4c8d-b3da-a8685be82bd3 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
//內核文件路徑及傳遞給內核的參數:
vmlinuz-2.6.32-358.el6.x86_64是內核版本,一定要寫全。
ro 是隻讀的意思
root=LABEL= 後面是指定根文件系統所在分區,因爲這裏沒有給根文件系統指定卷標,所以用uuid值指示根文件系統所在分區。
rhgb 圖形方式啓動
quiet 不輸出啓動信息
initrd /initramfs-2.6.32-358.el6.x86_64.img //ramdisk文件路徑 ,即虛擬根磁盤路徑。
4、MBR修復(grub修復)
爲防止MBR損壞,最好把MBR內容備份下來,然用把備份的內容放到其他機器或介質上保存。
MBR損壞,修復MBR
可通過藉助別的主機修復和使用緊急救援模式兩種模式修復MBR,主要講緊急模式修復:
(1)使用完整的系統安裝光盤引導,進入rescue模式
(2)安裝grub:
grub
grub>root (hd0,0) //指定/boot掛載在哪個地方,即內核所在的硬盤和分區。如果不知道可以用命令 find (hd0,0) / 來查找根在哪個硬盤的哪個分區,如果不是,就一個一個分區查找。
注:(hd0,0)中hd0是指第一個硬盤,linux中用hda表示,而grub用hd0表示,以此類推,具體看自己的linux內核安裝在哪個硬盤;0指第一個分區。
grub>setup (hd0) //安裝grub
grub>quit
sync //同步到磁盤。
5、grub配置文件丟失修復
grub>root (hd0,0) //指定/boot所在分區
grub>kernel /vmlinuz-2.6.32-358.el6.x86_64 //注意,前面的內核版本一定要寫全,如果不記得根分區此時也可以不添加。
grub>initrd /initramfs-2.6.32-358.el6.x86_64.img //指定Initrd文件,一定要完全相同。
grub>boot //重新啓動
進入系統,重建grub.conf文件。參照上面grub配置文件。
(三)其他常見錯誤修復
1、把默認級別設定爲0,或6, 進行單用戶模式,編輯intttab文件
2、/etc/rc.d/rc3.d 不小心刪除了, 進入單用戶模式,修改目錄系統
3、服務故障
如果某個服務無法啓動,進入單用戶模式下,先關掉此服務。然後再啓動電腦,然後修復此服務後再啓用此服務。或重啓進入交互模式(敲I鍵),手工確認是否啓動某服務。
4、/etc/rc.local 語法錯誤,也進入單用戶模式下,修改此腳本。
5、用戶無法登錄系統(bash程序故障)
光盤安裝:
進入緊急救援模式
mkdir /media/cdrom
mount /dev/hdc /media/cdrom //在緊急救援模式下,光驅被映射成了 /dev/hdc
找到bash包安裝。
rpm -ivh --replacepkgs --root /mnt/sysp_w_picpath bash-3.2-32.e15.i386.rpm // -root 指定安 裝位置爲實根/mnt/sysp_w_picpath下。
chroot /mnt/sysp_w_picpath //切換到實根
6、命令無法運行
手動指定PATH
或修改/etc/profile文件