Grub詳解
---------------推薦博客----------------------------------------------------
http://essun.blog.51cto.com/721033/1366045
http://www.mamicode.com/info-detail-1169442.html
http://www.centoscn.com/CentosBug/osbug/2014/0327/2671.html
CentOS 7 進入單用戶模式:
http://www.centoscn.com/CentOS/2015/0312/4864.html
------------------------------------------------------------------------------
Grub(GRand Unified Bootloader)是統一資源引導器,也就是引導加載器;它的工作是提供一個菜單,允許用戶選擇要啓動的系統或不同的內核版本;把用戶選定的內核裝載到RAM中的特定空間中,然後解壓、展開,而後把系統控制權移交給內核。
它目前有兩個版本:
1、GRUB 0.X:Grub Legacy
2、GRUB 1.X:Grub2
注意:
1,CentOS 6 使用 Grub Legacy
2,CentOS 7 使用 Grub2
一、Grub Legacy 分爲三個部分stage1、stage1_5和stage2。
1、stage1:即寫入mbr中存儲的bootloader程序。它的任務就是將stage1_5(此時並不能算是磁盤分區/boot/grub/下的stage1_5,因爲stage1無法識別文件系統)載入內存執行。
2、stage1_5:位於mbr之後的扇區,通過提供基本文件系統驅動讓stage1中的bootloader程序能識別磁盤分區/boot/grub/上的stage2文件並載入內存執行。
注意:此處若是boot分區的文件系統類型不屬於stage1_5的中的一個,則會藉助ramdisk來加載在/lib64/moudles/下額外的文件系統驅動。
3、stage2:這個程序主要給用戶提供一個比較友好的啓動菜單,而後去加載位於同一個磁盤分區/boot/的內核文件(例如 vmlinuz-2.6.32-573.el6.x86_64)
二、Grub Legacy的配置文件和功用
1、配置文件grub和內核等在一個目錄,此外它創建了一個鏈接文件指向配置文件來保證用戶使用配置文件一致性
配置文件:/boot/grub/grub.conf <-- /etc/grub.conf
配置項:
default=#:設定默認啓動的菜單項:菜單項(title)編號從0開始
timeout=#:指定菜單項等待選項選擇的時長;
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;
hiddemenu:隱藏菜單
password [--md5] STRING:菜單編輯認證;
title TITLE:定義菜單項“標題”,可出現多次;
root(hd#,#):grub查找stage2及kernel文件所在設備分區:爲grub的“根”
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啓動的內核
initrd /PATH/TO/INITRAMFS_FILE:內核匹配的ramfs文件
password [--md5] STRING:啓動選定的內核或者操作系統進行認證;
2、功用
(1)提供菜單、並提供交互式接口
e:編輯模式,用於編輯菜單
c:命令模式,交互式接口
(2)加載用戶選擇的內核或操作系統
允許傳遞參數給內核;可隱藏此菜單(通過grub.conf中的hiddenmenu)
(3)爲菜單提供了保護機制
爲編輯菜單進行認證(title上定義的password)
爲啓用內核或者操作系統進行認證(title下的password字段)
三、Grub的命令行接口和編輯功能
1、進入grub的命令行界面和編輯界面
(1)啓動機器時,按任意鍵鍵可進入grub界面
(2)c:可進入命令行界面
(3)e:進入編輯界面
2、grub的命令行命令和編輯命令
(1)grub的編輯命令
b:boot,啓動
e:edit,編輯選中的項
o:在選中行的下一行新加一行
O:在選中行的上一行添加一行
d:刪除選中行
ESC:可以退出編輯界面進入主界面
(2)grub的命令行命令
help:獲取幫助信息(列出所有的命令)
help KEYWORD:獲取某一具體命令的幫助信息
find (hd#,#)/PATH/TO/SOMEFFILE:查找文件(內核文件等)
root (hd#,#):設定那個磁盤是根,執行後,fnd不需指磁盤了;
kernel /PATH/TO/KERNEL_FILE:設定本次啓動時用到的內核文件;額外還可以添加許多內核支持使用的cmdline參數;
例如:init=/path/to/init, selinux=0
initrd /PATH/TO/OMOTRAMFS_FILE:設定爲選定的內核提供額外文件的ramdisk;
boot:引導啓動選定的內核;
手動在grub命令行接口啓動系統:
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
四:進入單用戶模式 :
CentOS 6:
(1)編輯grub菜單(選定要編輯的title,而後使用e命令)
(2)在選定的kernel後附加 1,s,S或single 都可以
(3)ESC退出後在編輯界面,選中kernel所在行,鍵入"b"命令;
CentOS 7:
centos7的grub2界面會有兩個入口,正常系統入口和救援模式,
e 鍵進入edit 模式。
找到以 linux16 開頭的行,注意:只在該行裏面進行操作。
1:
(1)把 ro更改成 rw ;(把只讀更改成可寫)
(2)把 rhgb quiet 刪除;(quiet靜默模式,可以不刪)
(3)增加 init=/bin/bash;(或init=/bin/sh,指定shell環境)
(4) 按下 ctrl+x 來啓動系統。
.....修改操作......
(5)重啓
2:
(1)該行最後輸入 rd.break
(2)ctrl+x 啓動系統
(3)進去後輸入命令 mount,發現根爲/sysroot/,並且不能寫,只有ro=readonly權限;
mount -o remount,rw /sysroot/,重新掛載,之後mount,發現有了r,w權限;
(4)chroot /sysroot/ 改變根
.....修改操作......
(5)ctrl+d 或者 exit 退出
(6)重啓
五、grub的安裝
(1)grub-install 命令
使用格式:grub-install --root-directory=/PATH/TO/rootDIR DEVICE
~]# grub-install --root-directory=/ /dev/sda3
~]# sync
(2)grub命令(shell中輸入)
~]# grub
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
~]# sync
(3)如果mbr中的bootloader程序損壞
插入一個系統引導光盤,進入救援模式重新安裝grub
五、grub損壞與備份。
硬盤的0柱面、0磁頭、1扇區稱爲主引導扇區(也叫主引導記錄MBR)。
三部分組成(共 512bytes)。
446bytes:主引導程序、(boot loader)
64bytes:硬盤分區表DPT(Disk Partition table)(4個分區,一個分區16bytes)
2bytes:硬盤有效標誌(55AA)。固定爲55AA
備份mbr:
dd if=/dev/sda of=/root/mbr.bak count=1 bs=512
破壞:
dd if=/dev/zero of=/dev/sda bs=200 count=1
分區表不能破壞,bs不能超過446bytes
Grub詳解
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.