在這篇文章,您將看到以下方面的修復方法:
●內核文件和虛擬
●grub.conf
●grub目錄
●boot分區
●fstab文件
●root密碼破解
首先,要想很愉快的修復linux啟動的各種問題,就必然要把linux的啟動流程搞清楚。
1. 加載 BIOS 的硬件信息和進行自我測試,并依據設定取得第一個可開機的裝置;
2. 讀取并執行第一個開機裝置內 MBR 的 boot Loader (grub等程序);
3. 依據 boot loader 的設定加載 Kernel ,Kernel 會開始偵測硬件并加載驅勱程序;
4. 在硬件驅動成功后,Kernel 會主動呼叫 init 程序,而 init 會取得 run-level 信息;
5. init 執行 /etc/rc.d/rc.sysinit 檔案來準備軟件執行的作業環境 (如網絡、時區等);
6. init 執行 run-level 的各個服務的啟動 (script 方法);
7. init 執行 /etc/rc.d/rc.local ;
8. init 執行終端機仿真程序 mingetty 來啟動 login 程序,最后就等待用戶登入;
在boot loader中grub有兩個階段(stage),其中,stage1是引導boot所在的分區,因為我們的kernel在這里面,又因這個分區可能是由不同文件系統格式化的,例如,xfs,ext等,單單MBR的446個bytes不可能存放這么多的東西,所以還要有stage1_5階段來加載boot分區的驅動,當然是什么驅動那就由你安裝操作系統時由什么文件系統格式化決定了,因此在這里我們可以認為為stage1_5的數據在mbr以后。
最終,通過stage1_5識別boot分區,然后加載vmlinuz開頭的內核文件。當然,識別boot分區以后,并不是上來就讀取內核,而是當識別好boot分區后,它會進入boot/grub/目錄的,這個目錄存放有stage2階段的文件,并且有個grub.conf文件,這個文件里記錄了linux啟動的很多重要啟動內容,比如剛才說的了內核文件在哪,根文件系統(rootfs)也就是“/”在哪,但我們知道,rootfs也會有自己的文件系統,它有可能與boot分區都不是同一個文件系統,那么/boot下還要存有rootfs的驅動,也就是以initramfs開頭的文件,我們稱為虛擬文件系統 (Initial RAM Disk 或 Initial RAM Filesystem) (centOS5x是initrd…)。這里注意,初始默認是ro(只讀)掛載。
根掛載完了,就開始加載系統第一個進程——init。首先讀取/etc/inittab 文件,它定義了默認的啟動模式(defaultrunlevel),然后,在進入相應的啟動模式之前,讀取/etc/rc.d/rc.sysinit 初始化系統的各項配置,包括/etc/fstab (主機名,swap分區,raid,lvm等),隨后再進入例如3模式:/etc/rc.d/rc3.d/K*,S*,然后執行/etc/rc.d/rc.local,最后是mingetty的tty1-6。
既然啟動的各項流程都明了的話,接下來開始我們的主題,大破壞?。?!
首先,解讀一下/boot/grub/grub.conf的這個可以調整內核參數的文件:
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS Linux 6 (2.6.32-642.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=aa1e2a6c-5e45-4da4-9429-b33d23861411 rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet selinux=0 max_loop=100
initrd /initramfs-2.6.32-642.el6.x86_64.img
●default :grub菜單默認啟動的內核,相對于下一個title(啟動菜單描述)
●timeout :默認等待時長
●splashimage :grub菜單背景圖片位置。
●kernel /vmlinuz- 這個是修復的必要字段,這個“/”意味著相它的根(存放位置)是boot分區,也 就是上面的root(hd0,0),而/boot這個分區又是相對主機的第一塊硬盤的第一個分區,即 /dev/sda1。所以我們也可以這樣寫:kernel(hd0,0)/vmlinuz
●root=UUID:這個是操作系統的根分區,必不可少,也可以寫設備名:/dev/sda2
●ro : 只讀掛載根分區,可不加。為了安全考慮,默認是加上的。
●initrd /initramfs: 虛擬文件系統文件,必要!
●rhgb :centOS6啟動時的圖形界面,不寫就變成字符模式。
●quiet:不顯示內核啟動時等其它一些加載的信息,不寫就顯示。
可以在quiet后加算定的內核參數,如selinux,max_loop等。
可以在/var/log/boot.log查看啟動相關信息,CentOS字樣顯示之后的過程,沒有內核信息。
/etc/rc.d/rc.sysinit 被破壞/刪除
默認情況下,系統會按照init進程中的順序執行,但是如果你把rc.sysinit這個文件刪了的話,后續的進程與服務就啟動不了,停住不動了。這時,我們可以不運行init,把它指定到別的shell里。
例如:init=/bin/bash
這樣的話,我們至少可以執行一些基本的命令或工具來進行修復。
/boot/grub/中的一個或多個或所有文件被破壞/刪除
情況一:grub.conf內容有錯誤
若單單是grub.conf的內容出問題,例如,title下的kernel或initrd,沒了等,我們可以:
重啟–>倒計時按任意鍵–> 進入相應的內核菜單選項按e或c鍵編輯對應的kernel或initrd–>回車完成。
最簡單的可以這樣寫(initrd同下):
kernel (hd0,0)/vmlinuz-(版本號) root=/dev/sda2
情況二:grub.conf文件被刪除
●方法一(重啟,grub命令):
重啟后會出現以下畫面:
輸入以下命令,包括指定內核與虛擬文件位置。
然后會有一段較長的修復時間,修復完成后還要再輸一次,方可登入。但因為grub.conf文件并未生成,如果不寫一個下次重啟還要指定。
●方法二:
光盤啟動–>救援模式(recuse)–>start shell(前面選項略)–>cd /mnt/sysimage/boot/grub。vim一個grub.conf。
情況三:stage系文件被刪除
●方法一(全面)
MBR主引導446bytes被擦除(dd if=/dev/zero of=/dev/sda bs=10 count=1)。
光盤啟動–>救援模式(recuse)–>start shell(前面選項略)–>cd /mnt/sysimage–>grub install /dev/sda
這個命令會在/boot下,創建grub目錄,恢復里面的所有除grub.conf文件。
這里因為已經切到了根目錄,且boot分區所在的父目錄就是根目錄。所以就無需再指定 –root-directory=/了。
●方法二(依賴grub目錄下的stage備份文件)
grub命令–>root(hd0,0)–>setup (hd0)
root密碼被破解
我們都知道grub菜單默認是任何人都可以對內核參數修改,從而進入單用戶模式(添加init 1參數),最終破解root用戶密碼。這是很不安全的,所以要對其加密。方法是在grub.conf的timeout
后添加password xxx。如果加在initrd后,則啟動都需要密碼(對于那個內核)。
內核,虛擬文件系統被刪除
那vmlinuz-和iniramfs文件沒了怎么辦呢?當然這時靠grub是不可能的了,我們可以用光盤:
光盤啟動–>救援模式(recuse)–>start shell(前面選項略)–>掛載光盤–>復制光盤里的isolinux下的vmlinuz到/boot下,改名稱vmlinuz-`uname -r`–>mkinitrd initramfs-`uname -r`.img (有空格)`uname -r`
網絡救援引導模式
用光盤模擬:
光盤啟動–>救援模式(recuse)–>Setup Networking窗口選擇“Yes”–>此時用Ctrl+Alt+f2可切換一下,看看是否有IP地址,如果沒有回到原終端,即可手動指定,也可DHCP自動獲取–>shell–>lftp
/boot所有內容被刪除
終極大法,一下解決所有問題:
光盤啟動–>救援模式(recuse)–>shell–>rpm -ivh /mnt/cdrom/Packages/kernel…rpm –root=/mnt/sysimage –replacepkgs |force(grub目錄除外,都恢復了)–> grub-install /dev/sda–>vim grub.conf
/etc/fstab被刪除
若這個文件沒了則意味著,根分區和boot分區沒掛載上,我們需要手動掛載。用df命令看一下分區信息,我們姑且可以先從分區大小大概猜出哪個是boot,哪個是根,然后,臨時建一個目錄,把覺得有可能的分區掛到這個目錄下,進入查看一下內容,發現是目標再vim /etc/fstab 寫進去。
原創文章,作者:菩提本無樹,如若轉載,請注明出處:http://www.www58058.com/45432
理論部分寫的很詳細,后面實際操作簡單帶過?注重理論也要注重實踐哦。