#GRUB詳解
grub基礎概念
前面的開機過程我們知道:按照BIOS定義的硬件設備啟動順序,第一啟動設備中的MBR去讀取boot loader。boot loader功能很強大,要重新自檢硬件設備,開始有一個菜單供用戶選擇系統或者內核版本,還要加載內核將內核解壓到RAM中并執行,最后將控制權移交給內核。屈屈446個字節怎么讓它完成那么多功能。所以Linux將boot loader的程序代碼執行分成兩個階段。
stage1: mbr stage1_5: mbr之后的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統; stage2:磁盤分區(/boot/grub/)
看看/boot/grub上都有什么
centos7上面的:
centos6上面的:
grub主程序最重要的任務之一是:識別磁盤,加載內核文件。怎么識別:
(hd0,0) ()括起來,硬盤以hd表示,后面接數字,后面的表示硬盤分區。 第一塊磁盤的第一個分區的boot sector代號就是(hd0,0) 第一塊磁盤的第一個邏輯分區的boot sector代號就是(hd0,4)
grub的配置文件
vim /boot/grub/menu.lst
這里面的root代表的是內核文件放置哪一個分區,而不是根目錄。
kernel后面接的是內核的文件名,文件名后面接的是文件名的參數
啟動時要掛載根目錄,所以root=/dev后面指的是Linux根目錄掛載到哪個分區
配置項: default=#: 設定默認啟動的菜單項;落單項(title)編號從0開始; timeout=#:指定菜單項等待選項選擇的時長; 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
如果你的Linux主機原來使用的并非grub,那么就需要來安裝。
grub-install --root-directory=ROOT /dev/DISK 將grub安裝至當前系統的MBR下面 grub-install /dev/sda 我的/home為獨立的/dev/sda3,如何安裝grub到/dev/sda3 grub-install --root-directory=/home /dev/sda3 ll /home/boot/grub/
實例:預計啟動時要直接顯示菜單,且菜單倒數位30秒。另外,在原本的menu。lst當中新增三個啟動菜單,分別說明如下:
1、假設/dev/sda1內含有boot loader,此loader如何取得控制權? 2、如何重新讀取MBR內的loader? 3、利用你原本的系統內核文件,新建一個可強制進入單用戶維護模式的菜單。
配置完成后,我們并不知道/dev/hda1到底有沒有包含grub的主程序,因此我們想要將grub主程序再次安裝到/dev/hda1的boot sector,重新將grub安裝到MBR上面去。
#grub #root (hd0,0) #find /grub/stage1 #find /vmlinuz-2.6.28-92.e15 #setup (hd0,0) (覆蓋原來的boot sector)
這要重啟后就是這樣
原創文章,作者:N24_yezi,如若轉載,請注明出處:http://www.www58058.com/60767
可以寫寫grub的修復的過程