玩轉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 07:44
下一篇 2016-09-26 08:06

相關推薦

  • 學習宣言

    生命太過于短暫,今天放棄了明天不一定能得到。

    Linux干貨 2016-10-27
  • RPM包管理功能全解。【第三周】

    CentOS系統上rpm命令管理程序包: 安裝、升級、卸載、查詢、校驗、數據庫維護 rpm命令:rpm [OPTIONS] [PACKAGE_FILE]     安裝:-i, –install     升級:-U, –update,&n…

    Linux干貨 2016-11-26
  • 26期全程班-第六周博客作業

    請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; # cp /etc/rc.d/rc.sysinit /tmp # vim /tmp/rc.sysinit :%s@^\([[:space:]]\+\)@#\1@g 2…

    Linux干貨 2017-03-07
  • 系統管理之作業管理與計劃任務

    作業管理: Linux的作業控制(job )     前臺作業:通過終端啟動,且啟動后一直占據終端;     后臺作業:可通過終端啟動,但啟動后即轉入后臺運行(釋放終端) 如何讓作業運行于后臺?     (1) 運行中的…

    Linux干貨 2016-09-13
  • linux學習筆記: shell腳本編程相關(上)

    前言 unix/linux操作系統下的shell,是一種殼,其目的是提供一個用戶與計算機相互交互的命令接口,通過輸入各種命令,達到操作的目的。 與此同時,shell支持控制流程,進而可以組合出各種各樣的應用實例。 shell腳本的格式  首行shebang機制:  bash腳本,首行添加#!/bin/bash&nbsp…

    Linux干貨 2017-04-18
  • 第五周練習

    1.顯示當前系統上root,fedora或user1用戶的默認shell         # cat /etc/passwd | cut -d: -f1,7 | grep -E "(fedora|root|user1)" 2.找出/etc/rc.d/init.…

    Linux干貨 2016-11-26
欧美性久久久久