玩轉linux之啟動篇

  

 想要玩轉linux,首先明白其啟動流程,這里簡單說明一下:

CentOS 6啟動流程:

   POST –> Boot Sequence(BIOS) –> Boot Loader –> Kernel(ramdisk) –> rootfs–> switchroot–> /sbin/init–>(/etc/inittab, /etc/init/*.conf) –> 設定默認運行級別–> 系統初始化腳本rc.sysinit–> 關閉或啟動對應級別的服務–> 啟動終端

Boot Loader:

   bootloader是系統的啟動加載器。通常情況下,引導程序都安裝在bootloader中。以我們常見的grup為例,grub分為stage1,stage1.5,stage2。其中stage1的代碼是直接存放在mbr中的。當BIOS將控制權傳遞給MBR后,stage1的代碼就開始運行,它主要負責將stage1.5或者stage2的內容加載在內存中。stage2被加載到內存中后,就會讀取grub的配置文件grub.conf。

想要玩轉,我們就要先玩破壞,然后再修復,才可以。


首先stage1階段:

  stage1的代碼是直接存放在mbr中的,

MBR引導扇區共512bytes,其中:

    主引導程序(boot loader):446bytes, 可以安裝引導加載程序

    主分區表(partition table):64bytes,記錄整塊硬盤分區的狀態(16bytes: 標識一個分區)

    結束標識: 2 bytes, 55AA ,MBR區域的有效性標識;55AA為有效

我們可以使用命令來查看一下MBR的內容:

[root@CentOS-6 ~]# hexdump -C -n 512 /dev/sda

然后我們要破壞stage1,主要是破壞MBR中前446個字節,可以使用命令

[root@CentOS-6 ~]# dd if=/dev/zero of=/dev/sda bs=446 count=1

wKiom1fXUBDCg0cdAAAVTASCKfQ490.png

這樣MBR前446個字節就全為0了,這時bootloader就已經被破壞,下面來重啟試試看:)

重啟系統后,stage1階段沒有正常啟動,直接跳至光盤引導。。。

wKioL1fXVqehr0pOAASGAlXHzTo100.png

下面我們就要進入救援模式,來進行修復:

wKiom1fXVrfzNOj5AAQGfQRwzn4992.png

之后會有一些語言和鍵盤及網卡的選項,根據需要自主選擇,再之后會出現Rescue選擇界面,我們選擇Continue繼續。

wKiom1fXV-DBkOC3AAAlevc4WqQ596.png

再之后會有一些提示信息,ok繼續,直至出現下圖界面,我們選擇start shell,ok繼續

wKioL1fXWCXyFAfjAAAKD2mjF5I287.png

這樣我們就會進入一些救援模式的shell,現在我們所在的位置,并不是我們系統的根,而是當前救援shell的根,所以我們首先要切換根目錄,使用“chroot”命令:

wKioL1fXWuaB_inEAAAup-TWK9w903.png修復完成后,退出shell,選擇reboot重啟系統

wKiom1fXWx2gfyK8AAAZ85Z2dOw119.png

wKioL1fXWy3Tr-CZAAAKlOqxRvk475.png

在系統重啟后,系統會修復,需要等待一段時間,切勿強制退出

wKioL1fXW4zC0eyCAABMoo4s68k750.png

OK,這樣stage1的破壞與修復我們就學會了,是不是很簡單,下面我們將stage1.5給破壞了,看看怎么修復。stage1.5是為stage2提供驅動的(在0柱面1扇區后面的63個扇區中存儲)        

首先我們看看stage1.5的位置

[root@localhost6 ~]# hexdump -C -n 1024 /dev/sda

wKioL1fXYLzADg0oAAAg8dTSEow894.png

我們摧毀stage1.5,而不摧毀stage1就需要跳過前512個字節

[root@localhost6 ~]# dd if=/dev/zero of=/dev/sda bs=512 count=2 seek=1

然后重啟來試試看:

顯示結果就是:黑屏。。。

這是因為stage1是正常的,他認為系統是存在的,但是到1.5階段,找不到驅動,所以就卡在那里了。

所以我們修復的話還是需要進入的救援模式下,進行修復,步驟和修復stage1是完全一樣的,這是因為

安裝grub命令:

(1) grub-install

安裝grub stage1和stage1_5到/dev/DISK磁盤上,并復制GRUB相關文件到DIR/boot目錄下

 命令格式:grub-install –root-directory=DIR /dev/DISK  

    注:這里的"–root-directory=DIR"是指定/boot目錄的父目錄,因為grub-install還可以復制GRUB相關文件到DIR/boot目錄下。如果/boot的父目錄為根目錄,則可以省略。

(2) grub    交互式修復

grub> root (hd#,#)

grub> setup (hd#)

    注:這條命令,依賴于“/boot/grub”目錄下的文件,如果文件丟失,請使用第一種方法。

   因為“grub-install”命令不僅能修復stage1 還可以修復stage1.5,所以1.5的修復步驟和1的完全一樣,但這里我們就來使用第二種方法來修復一下1.5階段,(進入救援模式的步驟參考前文)

wKioL1fXaD_y6ykWAAA5Grbjhi0227.pngreboot重啟!

完工,還是這么簡單。。。:)

   修復就是這么簡單,下面我們來玩一個稍微復雜一點的,將stage1,stage1.5,stage2及/boot/grub目錄全部破壞,然后來修復。

wKioL1fXb2eC6XjbAAA2lNe-BLc852.png

進入救援模式:然后執行以下操作:

wKioL1fXhUqAQNCnAAAsNlqhOHw850.pngwKiom1fXhMyAxb7bAAALC66aGB0671.png

然后保存退出,重啟系統即可。

 

 再接再勵越玩越大

實驗:刪除/boot 和/etc/fstab,恢復之

wKiom1fXpb2CDCknAAAVuUoGAGA741.png

進入救援模式,首先解決掛載問題,然后重啟讓系統重新讀取fstab文件,重新掛載

wKioL1fXs8Gzx0yBAAAyUPK-jGU618.png

wKiom1fXthDxzxzbAAALzvPftBo570.png


wKioL1fXv6-D0jyRAAAFOrqVQUg702.png

reboot 重啟,讓系統重新掛載,重新進入救援模式:

wKioL1fXvPyBfwgaAAA_YbYIh_0573.png

wKiom1fXhMyAxb7bAAALC66aGB0671.png

重啟系統,系統需要修復文件,需要稍等片刻。。。

進入系統后,即可重新更改/etc/fstab/ 重新設置系統掛載條件。

原創文章,作者:Groot,如若轉載,請注明出處:http://www.www58058.com/48694

(0)
GrootGroot
上一篇 2016-09-26
下一篇 2016-09-26

相關推薦

  • 第二周博客作業

      '經過了兩周的學習,對Linux有了更深的認識,學習到了很多的新知識,在此進行總結。一、Linux上的文件管理類命令都有哪些,其常用的使用方法及相關示例演示。答:Linux常用的文件管理類命令主要有以下幾個:  cp,mv,rm,mkdir,rmdir,install,touch;  cp命令:  作用是拷貝文件或文件夾,其用法為:  cp […

    Linux干貨 2016-12-12
  • vim常用快捷鍵

    1、vim /etc/vimrc進入配置文件 如果不知道vimrc文件在哪,可使用 :scriptnames 來查看 set nu      #行號 set tabstop=4  #一個tab為4個空格長度 set ai  #設置自動縮進 syntax on   #高亮   2、基本 空格鍵 向右移動一格 x 刪除后面…

    2017-09-05
  • FTP服務

        FTP是一個非常古老的協議,其主要的作用是用于文件的傳輸。FTP采用明文的方式傳輸,極其不安全,但在局域網等環境中使用還是比較方便的。 一、工作原理     FTP的工作方式分為主動模式與被動模式。     1、主動模式 &nbsp…

    Linux干貨 2015-07-08
  • Linux發展及OS基礎

    開源協定:          GPL  LGPL,Apache,BSD          BSD:      …

    Linux干貨 2016-08-08
  • Linux Kernel

    Linux Kernel 概述:文章將主要介紹Linux 內核的相關信息,包括內核各組成部分的詳細介紹,其中有內核信息的獲取命令,uname;內核模塊管理類命令:lsmod,modinfo,modprobe,insomd,rmmod;ramdisk生成的相關命令,mkinitrd和dracut命令;以及linux中的兩個為文件系統 /proc和/sys。最后…

    Linux干貨 2016-09-19
  • 文本處理三劍客之 Sed

         Sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Sed主要用來自…

    2017-08-26
欧美性久久久久