GRUB的啟動流程:
grub:
在centos56中:0.X版本 grub legacy
在centos7中:1.X版本 grub2
grub可分為三個階段:
stage1:mbr前446字節中保存的Boot Loader程序
stage1.5:mbr之后的扇區,讓stage1中的Boot Loader能夠識別stage2所在的分區上的文件系統
stage2:存放在磁盤分區中(/boot/grub)
配置文件:/boot/grub/grub.conf 有個鏈接文件 /etc/grub.conf
工作流程:當我們系統啟動的時候,如果加載grub所在的磁盤時會讀取磁盤上的MBR從而找到stage1,stage1加載完以后,它會嘗試去讀取隨后扇區中的stage1.5,stage1.5讀到以后從而就能夠驅動真正的stage2所在的磁盤分區了,所加載的磁盤分區上不但有第二階段,還有內核文件及ramdisk等都放置在此分區,所以,這就是為什么我們grub能夠加載到內核文件的原因,要記得,我們當前硬件平臺的主板BIOS一定要能夠識別硬盤,然后BIOS才會幫你去加載硬盤中的Boot Loader磁盤中的Boot Loade自身加載完之后就能直接識別當前主機能識別到的硬盤設備了,要注意,硬盤設備能識別不代表硬盤設備中的文件系統也能識別,因為文件系統是額外附加在硬盤上的一層軟件組織的文件結構通常我們要對接文件系統要用到文件系統驅動你的應用程序必須能夠識別理解文件系統才可以,在stage1.5階段其實就是給grub提供了文件系統驅動,從它而就能夠訪問第二階段和內核所在的分區了。
stage2及內核等通常放置于一個基本的磁盤分區。
grub的功用:
(1) 提供菜單、并提供交互式接口
e:編輯模式,用于編輯菜單
c:命令模式,交互式接
a:修改kernel參數
(2) 加載用戶選擇的內核或操作系統
允許傳遞參數給內核
可隱藏此菜單
(3) 為菜單提供了保護機制
為編輯菜單機型認證
為啟用內核或操作系統進行認證
grub如何識別設備:
(hd#,#)
hd#:磁盤編號,用數字表示 從0開始編號
#:分區編號,用數字表示 從0開始編號
例如:(hd0,0)第一塊磁盤的第一個分區
/boot目錄有兩種可能:
/boot為單獨的分區
在根文件系統上
grub的命令行口
help:獲取幫助列表
在列表中的root命令是用來設置當前grub
的根設備的,在我們啟動設備時,對于grub來說,根設備不是操作系統的根文件系統,而是grub的第二階段所在的磁盤才為grub的根。root命令只能設置設備或分區為根;
find(hd#,#)/path/to/somefile:根據路徑查找文件
root (hd#,#)
kernel /PATH/TO/KERNEL_FILE:設定本次啟動時使用到的內核文件,額外還可以添加許多內核支持使用的cmdline參數;
例如:init=/path/to/init, selinux=0 quied:靜默模式ro只讀 initrd /PATH/TO/INITRAMFS_FILE:設定為選定的內核提供額外文件的ramdisk,ramdisk必須與內核版本號完全匹配。
boot:引導啟動選定的內核
手動在grub命令行接口啟動系統:
grub> root(hd#,#)
grub>kernel /vimlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub>initrd /initramfs-VERSION-RELEASE.img
grub>boot
配置文件:/boot/grub/grub.conf
配置項:
default=#:指定默認啟動菜單項;落單項(title)編號從0開始
timeout=0:指定菜單項等待選擇的時常
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑
hiddenmenu:隱藏菜單
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:啟動選定的內核或操作系統時進行認證
grub-md5-crypt命令:可以生成md5加密密碼串
進入單用戶模式:
(1) 編輯grub菜單(選定要編輯的title而后使用e命令);
(2) 在選定的kernel后附加
1 s S 或single都可以
(3) 在kernel所在行,鍵入“b”命令
只要Boot Loader壞了,系統就不能夠啟動
安裝grub:
安裝命令:
(1)grub-install –root-direction=/boot的父目錄 /dev/DISK
(2)grub>root(hd#,#)
grub>setup(hd#)l
ldd命令:查看某程序依賴的庫
緊急救援模式:
使用光盤引導,把光盤引導調至最上面
按提示選擇下一步,最后進入救援模式所提供的shell環境中進行系統的修復。
自制linux:
在虛擬機中添加一塊新硬盤,將新硬盤分三個區,分別作為自制linux的根分區、boot分區和swap分區;然后格式化各分區,創建掛載點目錄,將分好的區進行掛載,(注意:創建的boot分區的掛載點名稱一定叫boot,因為grub-install命令一定要找boot目錄才行,所以就需要創建一個boot目錄作為掛載點 例如:/mnt/boot)進入到根分區的掛載點目錄,因為此分區是要作為自制linux的根分區的,所以,要在此分區中創建根目錄下的一級目錄,如:bin、sbin、boot 、root、home、usr、etc、dev、srv、proc、var、tmp、mnt、media、sys、lib、lib64等等
然后進入到/boot分區所在的掛載點目錄中,執行grub-install /dev/DISK 安裝grub,而后進入到grub目錄中,創建grub.conf配置文件,具體內容為:
default=0
timeout=5
title centos linux
root (hd0,0)
kernel /vm……. selinux=0 init=/bin/bash root=/dev/sda2(因為當硬盤加到新的系統上后,此硬盤就為第一塊硬盤了)
initrd /initramfs…….
然后復制內核文件和initrd文件到/boot目錄
cp /boot/vm……. /mnt/boot
cp /boot/initramfs…… /mnt/boot
創建完這些后就可以去導入一些基本的命令了,可以手動的復制到自制linux的根分區目錄中,也可以使用腳本往里導入
手動導入:用cp命令從/bin目錄中復制出需要的命令,
然后用ldd命令查看此命令所依賴的共享庫文件;
(ldd命令:用來查看各應用程序所依賴的庫
格式為:
ldd [選項] …FILE…)
導入共享庫文件到自制linux 的根目錄中(一般存放在lib目錄或lib64目錄中)
使用腳本,可以使用腳本導入,腳本內容如下:
#!/bin/bash
ch_root="/mnt/sysroot" //這里改成自制linu的根分區位置 (例如:/mnt/sdb2)
[ ! -d $ch_root ] && mkdir $ch_root
bincopy() {
if which $1 &>/dev/null; then
local cmd_path=`which –skip-alias $1`
local bin_dir=`dirname $cmd_path`
[ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}
[ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}
return 0
else
echo "Command not found."
return 1
fi
}
libcopy() {
local lib_list=$(ldd `which –skip-alias $1` | grep -Eo '/[^[:space:]]+')
for loop in $lib_list;do
local lib_dir=`dirname $loop`
[ -d ${ch_root}${lib_dir} ] || mkdir -p ${ch_root}${lib_dir}
[ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}
done
}
read -p "Please input a command or quit: " command
while [ "$command" != "quit" ];do
if bincopy $command ;then
libcopy $command
fi
read -p "Please input a command or quit: " command
done
創建/etc/fstab文件
是在根分區的掛載目錄中的/etc/目錄下創建的
vim /etc/fstab
/dev/sda2 /boot ext4 defaults 1 1
/dev/sda1 / ext4 defaults 1 2
這輛個掛載設備都應該改為/dev/sda#因為自建的系統加上此塊盤后,磁盤為第一塊,這個應根據情況而定。
做完以上步驟就可以硬盤卸下,去創建一個新的虛擬機,然后把這塊硬盤當作新虛擬機第一硬盤,就可以使用了。
grub菜單修復:
當破壞了MBR的前446字節的內容后怎么修復?
修復方法:
可以進入到救援模式,
切換到根chroot /mnt/sysimage
grub-install –root-direction=/ /dev/sda //安裝grub
reboot
當誤刪除了/boot目錄以及/etc/fstab文件后該如何修復?
修復方法:
重啟系統,在bios界面選擇光盤引導,進入救援模式,在救援模式的shell環境中,執行以下命令:
fdisk –l //查看分區情況
mkdri /mnt/cdrom //創建掛載點目錄
然后,把剛才查看到的分區一一掛載至此目錄,去找出根分區和boot分區,找到后就掛載根分區至此目錄,
mkdir /mnt//boot //創建boot分區的掛載點目錄
切換到根分區的掛載點目錄,創建/etc/fstab文件
vi /etc/fstab
/dev/DISK1 / ext4 defaults 1 2
/dev/DISK2 /boot ext4 defaults 1 1
reboot //重新進入,使fstab文件生效
再次進入到救援模式是shell環境中
chroot /mnt/sysimages //切換到真正的根
cd boot //切換至boot目錄
grub-install /dev/DISK //安裝grub
cd grub //進入grub目錄
vi grub.conf //創建grub配置文件
default=0
timeout=5
title centos6
root (hd0,0)
kernel /ve……… ro root=/dev/DISK1
initrd /initramfs……
mount /dev/sr0 /media/cdrom //掛載光盤
rpm –ixh /media/cdrom/Package/kernel-2…… –force //強制重新安裝內核
exit //退出
reboot // 重啟,
修復完成,進入系統后,可自行將grub配置文件和/etc/fstab文件進行完善
原創文章,作者:ZJM,如若轉載,請注明出處:http://www.www58058.com/45718
總結的還不哦,只是排版是不是太隨意了?