GRUB Legacy&Trouble Shooting

GRUB (Grand Unified Bootloader)

       位于系統引導盤的MBR中的Boot Loader。

       GRUB是一個來自GNU項目的啟動引導程序。GRUB是多啟動規范的實現,它允許用戶可以在計算機內同時擁有多個操作系統,并在計算機啟動時選擇希望運行的操作系統。GRUB可用于選擇操作系統分區上的不同內核,也可用于向這些內核傳遞啟動參數。

       Grub分為2個版本:

              grub 0版本:也叫grub legacy。CentOS6、CentOS5采用此版本

              grub 1版本:也叫grub2。CentOS7采用此版本

一、grub legacy:

       stage1:mbr

       stage1_5:mbr之后的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統。

              功能:為grub提供文件系統驅動。從而能訪問2階段內核所在的分區。

       stage2:磁盤分區(/boot/grub)

       stage2及內核通常放置于一個基本磁盤分區。

       stage2的功用:

              (1)提供菜單、并提供交互式接口

                     e:編輯模式,用于編輯菜單

                     c:命令模式。交互式接口。

              (2)加載用戶選擇的內核或操作系統

                     運行傳遞參數給內核

                     可隱藏菜單          

              (3)為菜單提供了保護機制

                     為編輯菜單進行認證

                     為啟用內核或操作系統進行認證

二、配置文件:/boot/grub/grub.conf,有一鏈接文件/etc/grub.conf

2.1、grub配置文件:      

/boot/grub/grub.conf 配置項:              
 default=#:設定默認啟動的菜單項,菜單項編號從0開始             
 timeout=#:指定菜單項等待選項選擇的時長              
 splashimage=(hd#,#)/path/to/xpm_pic_file:指明菜單背景圖片文件路徑。              
 hiddenmenu:隱藏菜單              
 passwd [--md5] String:菜單編輯認證              
 title TITLE:定義菜單項“標題”,可出現多次                     
 root (hd#,#):grub查找stage2及kernel文件所在的設備分區。為grub的根。                     
 kernel /path/to/vmlinuz ro root=/dev/mapper/some_path:啟動的內核                     
 initrd /path/to/initramfs_file:內核匹配的ramfs文件。                     
 passwd [--md5] String:啟動選定的內核或操作系統時進行認證。

2.2、如何生成加密密碼串:

1)openssl生成加密密碼串

~]#openssl passwd -1 -salt "123456"

       -1 指定加密方式為md5

       -salt 在生成加密密碼時,注入“鹽質”

blob.png

2)grub-md5-crypt命令:生成要保護密鑰的密碼串

 blob.png

三、grub中如何識別設備 

       (1)boot目錄單獨分區,并掛載于/目錄。

        這個時候,由于內核還未加載,所以不存在真正意義上的根,那么存放于/boot上的內核文件以及ramdisk文件和grub配置文件如何能夠被識別呢?

        stage1會將/boot選舉為boot的根,在grub階段查找/boot上的文件時, 是以boot為跟查找。比如,查找磁盤上的/boot/vmlinuz在grub階段表現為查找/vmlinuz;查找/boot/grub/grub.conf表現為查找/grub/grub.conf。          

       (2)boot目錄沒有單獨分區,而是位于/所在的分區。

        這種情況下,grub階段查找boot下的vmlinuz文件表現為查找/boot/vmlinuz;查找boot下grub目錄下的grub.conf文件表現為查找/boot/grub/grub.conf文件。

       (3)什么樣的情形下boot單獨分區,而不是位于/所在的分區?

 grub訪問的分區只能是基本磁盤分區,LVM&RAID等都不支持。當要使用LVM按需擴展/時,boot要單獨分區。

       (4)如何在grub中指定boot的根

       grub中的root指令用于指定系統啟動處于grub階段時,文件系統的跟。若boot單獨分區,則以boot分區為根;若boot未單獨分區,則以文件的絕對路徑查找文件。

root (hd#,#)

       hd#:磁盤編號,用數字表示;從0開始編號

       #:分區編號,用數字表示;從0開始編號

四、grub的命令行接口

4.1、在命令行中可使用的命令  

 help:獲取幫助立標 
 help Command:獲取對應命令的幫助信息 
 find (hd#,#) /path/to/some_file 
 root (hd#,#) :設置在grub階段的/ 
 kernel /path/to/kernel_file:設定本次啟動時用到的內核文件;額外還可以添加許多內核支持使用的cmdline參數 如:init=/path/to/init,selinux=0 
 initrd /path/to/initframfs_file:設定為選定的內核提供額外文件的ramdisk,其版本號必需與內核的版本號完全一致。 
 boot:引導啟動選定的內核

4.1、如何手動在grub命令行接口啟動系統:      

grub>root (hd#,#)
grub>kernel /vmlinuz-Version-Release ro root=/dev/Device
grub>initrd /initramfs-Version-Release.imggrub>boot

五、GRUB Trouble Shooting:

5.1 如何進入單用戶模式

       (1)開機,進入系統,在grub菜單選擇要使用的內核,摁“e”鍵,進入grub菜單,選定要編輯的title,而后使用e進行編輯      

blob.png

       (2)選定kernel項,摁“e”進行編輯,在選定的kernel后附加:1、s、S或single都可進入單用戶模式,輸入完成,回車

blob.png

blob.png

       (3)在kernel所在行,摁"b"鍵引導系統。

5.2 如何進入救援模式

選擇通過光盤引導

blob.png

選擇進入救援模式

blob.png

選擇語言

blob.png

選擇鍵盤類型

blob.png

根據需要選擇是否開啟網絡功能

blob.png

選擇繼續

blob.png

選擇shell,進入命令行模式

blob.png

之后,可在命令行進行修復操作.

5.3 安裝grub

grub-install命令:完整安裝stage1、stage1_5、stage2

       grub-install –root-directory=Root /dev/Disk

              –root-directory=/  #指定/

              /dev/Disk               #指定/所在的硬盤,注:不是/所在的硬盤分區

5.4 grub被破壞或配置文件丟失。

如何為本機修復GRUB:

       破壞stage,無法看見grub啟動菜單,若退出,只能進入救援模式修復。若未退出,使用下面第一種、第二種方式進行修復。

       模擬破壞:破壞之前先備份,也可以對虛擬機做備份。

dd if=/dev/sda of=/src/mbr.bak bs=1 count=512dd if=/dev/zero of=/dev/sda bs=1 count=200
sync

       修復

       第一種方式           

grub-install --root-directory=Root /dev/Disksync

第二種方式      

grub#進入grub提示符 
grub >root (hd#,#)    #指定/分區 
grub >setup (hd#)     #指定在那塊磁盤上安裝stage1 sync

注意:第二種方式僅限于/目錄下必須事先存在boot目錄,且stage1、stage1_5、stage2等文件必須存在,否則安裝失敗

       第三種方式:破壞之后重啟,進入救援模式修復

       如何進入救援模式:

              (1)載入系統光盤

              (2)敲esc鍵,進入命令行模式,鍵入“linux rescue”命令;或者通過啟動菜單中的rescue選項進入救援模式。

              (3)chroot /mnt/sysimage   #切換至原有系統的/目錄下

              (4)grub-install –root-directory=Root /dev/Disk

              (5)exit

              (6)reboot

1) 破壞stage1

              在命令行模式進行修復

              模擬破壞stage1,即MBR的前446字節

blob.png

              查看,發現前446字節已被破壞

blob.png

~]#grub-install  --root-directory=/ /dev/sda

再次查看MBR

blob.png

       重啟系統可以正常進入系統

2) 破壞stage1.5

~]#dd if=/dev/zero of=/dev/sda bs=1 count=1024 seek=512

       seek=n:跳過of指定的文件的前n個字節

 blob.png

不退出系統,使用grub命令進行修復

blob.png

 blob.png

之后,重啟系統,啟動正常

3) 破壞stage2

stage2是加載內核及偽根文件系統initramfs的,要破壞stage2,刪掉/boot下的vmlinuz文件和initramfs文件即可。

blob.png

進入救援模式,恢復丟失的2個文件

       a、系統上掛載有安裝光盤,可以通過拷貝安裝光盤上isolinux目錄下的vmlinuz文件到/boot目錄下,并使用mkinitrd命令生成initramfs文件,之后修改grub/grub.conf文件,修改kernel、initrd對應的文件。  

chroot /mnt/sysimage
cp  /mnt/iso/isolinux/vmlinuz  /boot/
mkinitrd /boot/initramfs-`uname -r`.img `uname -r`

 blob.png

blob.png

       修改grub/grub.conf文件

blob.png

exit退出救援模式,選擇reboot Reboot選項,重啟系統

blob.png

b、若系統不能掛載安裝光盤,則可以選擇通過網絡來拷貝vmlinuz文件。在進入救援模式時,選擇啟用網絡功能。之后使用scp 命令來拷貝遠程文件??截恦mlinuz文件之后,使用mkinitrd命令生成initramfs文件,修改grub.conf文件,重啟系統即可。

注:在這一過程中,損壞的系統必須與拷貝的目標主機在同一個局域網中。且目標主機應允許遠程拷貝文件。

選擇啟用網絡功能

blob.png

選中要使用的網卡,摁"tab"鍵切換至ok選項,回車

blob.png

若局域網中有dhcp服務器,可選擇通過dhcp獲取ip地址。沒有dhcp服務器可選擇手動添加ip地址。這里選擇dhcp獲取,ok確認

blob.png

       之后操作不再贅述。

4)破壞grub配置文件

要恢復grub.conf配置文件較簡單,若未退出系統,手動編輯一份配置文件即可;若退出系統重啟,進入救援模式編譯grub.conf配置文件即可。修復過程不再贅述。

blob.png

5)破壞/etc/fstab

刪除/etc/fstab文件。重啟不能正常啟動。

blob.png

啟動報錯

blob.png

不能進入系統

blob.png

重啟進入救援模式

進入救援模式,能看到沒有發現linux分區的錯誤,摁"ok"繼續進入救援模式修復。

blob.png

進入到命令行之后,使用fdisk -l查看磁盤分區情況,可以查看到,/dev/sda1為boot分區。但是無法確認/分區。

blob.png

怎么確認/分區是那塊磁盤呢,通過fdisk可以看到,除了boot分區之外,共有4個分區。為每個分區建立一個掛載點,分別掛載各分區,之后,進入掛載目錄,查看目錄結構,/分區的目錄結構還是很好區分的。這里,掛載/dev/sda2報錯,查看,發現sda2是LVM。

blob.png

如果/是普通文件系統,可以直接掛載;若果是LVM,則需先激活,才能掛載。、

使用vgchange -ay 激活LVM

blob.png

之后,掛載分區,進入分區查看。

其實通過lvscan直接就看出/dev/vg0/root是根分區了。如果/是普通分區的話,需要一一查看。

blob.png

使用blkid可以查看到分區的文件系統。

blob.png

 blob.png

查找到/之后,切換/

chroot /mnt/sda2(/dev/vg0/root的掛載點)

若在其他目錄,有fstab文件的備份,可以拷貝該備份;若沒有備份,則編輯/etc/fstab文件。注:若/usr單獨分區,則/usr也應該掛載

blob.png

保存,退出。重啟系統。啟動正常。

系統是能夠正常啟動,但是,若fstab文件沒有備份,又不知道具體的每個分區掛載情況,有可能導致某些數據或功能或業務不能正常使用。所以,關鍵數據的備份是非常重要的,當系統出現錯誤時,我們能夠通過備份快速恢復系統,并能保障業務的正常運行。

6) 破壞/boot

刪除/boot下的所有文件,并umount /boot

blob.png

進入救援模式修復

若/etc/fstab文件沒被破壞,則直接切換根至/mnt/sysimage;若/etc/fstab文件被破壞,則先修復fstab文件,之后重啟系統,再次進入救援模式,修復/boot。

chroot /mnt/sysimange

掛載安裝光盤

安裝光盤中的kernel-Version包。安裝時使用–force選項。

blob.png

kernel包安裝完成之后,會生成vmlinuz文件及initramfs文件,但是grub目錄及目錄下的文件并沒有生成,使用grub-install命令,生成grub目錄及文件。

blob.png

grub-install執行完成之后,生成grub目錄及相關文件,但是grub.conf文件并沒有生成,需要我們手動配置。重寫grub.conf配置文件不再是個難題啦。

blob.png

配置完成之后,重啟系統,在grub菜單欄可以查看到我們填寫的配置,回車選擇,等待系統修復。

blob.png

blob.png

啟動正常

7) /sbin/init文件被刪除

       刪除/sbin/init文件

blob.png

重啟進入系統,無法正常工作。

blob.png

進入救援模式,若有文件備份,直接拷貝使用,也可以重其他機器上拷貝使用;若沒有備份,則需安裝upstart的rpm包。

blob.png

退出,重啟,系統啟動正常。

blob.png

總結:系統重要文件應該備份,在出錯時能及時得到恢復。在對配置文件做修改時,應先備份再修改,當配置出現錯誤時能得到還原。熟悉系統啟動流程對于系統排故非常重要。熟練掌握在救援模式下修復系統非常重要。

原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/46042

(0)
M20-1鐘明波M20-1鐘明波
上一篇 2016-09-13
下一篇 2016-09-13

相關推薦

  • SQL Server 2012 故障轉移群集最佳實踐

    一、Windows server  2012 系統主域的安裝配置 功能介紹:  SQL Server 故障轉移群集在網絡上顯示為一臺計算機上的單個 SQL Server 實例。在群集內部,一次只有一個節點擁有群集資源組,滿足針對該故障轉移群集實例的所有客戶端請求。在出現故障(硬件故障、操作系統故障、應用程序或服務故障)或進行計劃升級時,組…

    Linux干貨 2015-10-27
  • ACL概述

    ACL概述 一、什么是ACL ACL是linux系統中一種被稱為訪問控制列表的權限控制方法,它是一種權限分配之外的普遍范式。在一般情況下,要確認三個權限組:owner、group和other。而使用ACL則可以增加權限給其他用戶或組別,不再僅僅是在“other”中定義權限,可以允許指定的用戶擁有不同于其所屬組的權限。 ACL支持多種Linux文件系統,包括e…

    2017-07-29
  • (總結)MySQL自帶的性能壓力測試工具mysqlslap詳解

    PS:今天一同事問我有木有比較靠譜的mysql壓力測試工具可用。其實mysql自帶就有一個叫mysqlslap的壓力測試工具,還是模擬的不錯的。下面舉例說說。mysqlslap是從5.1.4版開始的一個MySQL官方提供的壓力測試工具。通過模擬多個并發客戶端訪問MySQL來執行壓力測試,同時詳細的提供了“高負荷攻擊MySQL”的數據性能報告。并且能很好的對比…

    Linux干貨 2015-02-10
  • 8.1-用戶和組(作業篇)

     1、將/etc/issue文件中的內容轉換為大寫后保存至/tmp/issue.out文件中。 [root@localhost ~]# tr a-z A-Z </etc/issue > /tmp/issue.out [root@localhost ~]#&n…

    Linux干貨 2016-08-04
  • ansible批量部署主從DNS

    什么是DNS服務DNS的解析流程分析遞歸查詢迭代查詢DNS相關的術語說明生產環境中的應用Bind9常見配置說明使用ansible自動部署主從DNS 什么是DNS服務 DNS(Domain Name Service)是Internet上用于名稱解析的服務,簡單來說,就是將域名轉換為IP地址的服務(正向解析),也可以用于將IP地址解析為對應的…

    Linux干貨 2016-06-29
  • linux文件、目錄基本操作命令及bash特性介紹

    1、文件層級FHS介紹: Filesystem Hierarchy Standard(文件系統層次化標準)的縮寫,多數Linux版本采用這種文件組織形式,類似于Windows操作系統中c盤的文件目錄,FHS采用樹形結構組織文件。 FHS定義了系統中每個區域的用途、所需要的最小構成的文件和目錄,同時還給出了例外處理與矛盾處理。 /:linux文件系統根目錄 /…

    2017-09-17
欧美性久久久久