多方面修復linux系統

在這篇文章,您將看到以下方面的修復方法:

●內核文件和虛擬

●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命令):

重啟后會出現以下畫面:

圖像 002.png 

輸入以下命令,包括指定內核與虛擬文件位置。

圖像 001.png 

然后會有一段較長的修復時間,修復完成后還要再輸一次,方可登入。但因為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 |forcegrub目錄除外,都恢復了)–> grub-install /dev/sda–>vim grub.conf


/etc/fstab被刪除


若這個文件沒了則意味著,根分區和boot分區沒掛載上,我們需要手動掛載。用df命令看一下分區信息,我們姑且可以先從分區大小大概猜出哪個是boot,哪個是根,然后,臨時建一個目錄,把覺得有可能的分區掛到這個目錄下,進入查看一下內容,發現是目標再vim /etc/fstab 寫進去。  

原創文章,作者:菩提本無樹,如若轉載,請注明出處:http://www.www58058.com/45432

(1)
菩提本無樹菩提本無樹
上一篇 2016-09-13 11:17
下一篇 2016-09-13 11:17

相關推薦

  • 修改文件的權限

        linux中一切皆文件,文件有權限,所有者,所屬組,大小等屬性。文件所有者是指創建文件的用戶,所屬組是指創建文件的用戶屬于哪一個主要的組(用戶的主組只能有一個)。     用戶對文件進行各種操作的前提是有相應的權限,所以有些文件我們只能讀,不能寫,而有些文件既可以讀寫,還可以更改內容,下面就…

    2017-07-30
  • lvs筆記之nat&dr模型簡單實現

    lvs筆記之nat&dr模型簡單實現 lvs筆記之nat&dr模型簡單實現 lvs 集群 實現 負載均衡 nat lvs筆記之nat&dr模型簡單實現 ipvsadm使用說明 lvs-nat的簡單實現 踩過的坑1 lvs-dr實現 總結 ipvsadm使用說明     -A: 添加一個…

    2017-01-03
  • N26-第七周作業-邢巖

    馬哥門徒-N26-邢巖      今天看了一本書《運維前線:一線運維專家的運維方法、技巧與實踐》,有一張運維全平臺規劃體系如下:      看完這張圖,瞬間覺得自動化運維真的是很龐大精深,我只是在運維這片海洋的岸邊,剛剛邁入一只腳步而已,究竟什么是山,什么是水,還不得而知。就讓我化身一條小魚,在這片…

    2017-03-11
  • 文件查找

    文件查找: locate查找:     locate:     依賴于事先構建好的索引庫,操作系統剛完成沒有       系統自動實現(周期性任務);      &nbs…

    Linux干貨 2016-08-15
  • iptables練習

    iptables實戰 1.開啟防火墻 systemctl start firewalld 2.清空所有的默認規則,定義自己的規則 iptables -F 查看此時的iptables iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD…

    2017-06-24
  • Linux下的I/O重定向與管道

    一、I/O設備     Linux中,對系統進行操作時,就需要I/O設備與系統產生交互,同時會產生三種數據,標準輸入(0)、標準輸出(1)、標準錯誤(2)。其中標準輸入(stdin)默認接受來自鍵盤的輸入,標準輸出(stdout)和標準錯誤(stderr)默認向終端窗口輸出,改變默認輸出和出入的位置,就是I/O重定向。 二、輸出重定向到文…

    Linux干貨 2016-08-04

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-20 14:06

    理論部分寫的很詳細,后面實際操作簡單帶過?注重理論也要注重實踐哦。

欧美性久久久久