先來看下配置文件的格式:
[root@centos6 ~]# uname -r 2.6.32-642.el6.x86_64 [root@centos6 ~]# cat /boot/grub/grub.conf # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda2 # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS 6 (2.6.32-642.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=a60b5a4a-0be1-44b6-bce3-363d117f52b7 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-642.el6.x86_64.img
grub最重要的是識別磁盤信息:(hd0,0)
1,硬盤代號以小括號()括起來
2,硬盤以hd表示,后面會跟一組數字,數字之間以逗號隔開
3,是以搜到的順序來作為磁盤的編號,而非根據磁盤的排線編號(多硬盤情況,搜尋的次序是根據bios中設置的啟動順序,而非插槽編號)
4,第一個搜尋到的磁盤編號為0,第二個為1,以此類推
5,每快磁盤上的第一個分區編號為0,第二個分區為1,以此類推
因此,(hd0,0)表示第一塊磁盤上的第一分區
default=0 默認的啟動條目,假如同時裝有多個操作系統,0表示定義的第一個title系統,1表示 定義的第二個title系統,以此類推
timeout=5 表示可供選擇的等待時間,如果超過5秒鐘,則使用默認的啟動條目default定義的
splashimage=(hd0,0)/grub/splash.xpm.gz 定義啟動時的背景圖片信息
hiddenmenu 啟動時是否要宣示菜單,默認情況下是不顯示菜單信息,如果想要顯示菜單,可將該配置信息注釋即可(行首加#);所謂顯示菜單就是下面的信息:
title 定義各個操作系統的名稱
root 表示內核文件存放的位置,這里所指的是分區位置,而非 / 目錄
kernel 內核的名稱以及一些啟動時的核心參數。由于啟動過程中需要掛載根目錄,因此就需要指定根 目錄所在的分區。rhgb表示彩色顯示,quiet表示靜默模式加載內核
initrd 虛擬文件系統
grub.conf文件的配置方法:
default: 設定默認啟動的內核或操作系統
timeout: 超時時長;單位是秒
splashimage:grub 菜單的背景圖片(可選)
圖片:xpm格式,壓縮為zip,14bits顏色,640X480
需安裝gimp圖片編輯工具
hiddenmenu: 隱藏選擇菜單(可選)
title 定義一個操作系統或內核
root: 指明引導當前操作系統或內核文件所在分區
kernel: 內核文件路徑、根文件系統所在設備,以及傳遞給內核的參數
initrd: 指明用于輔助內核完成系統啟動的ramdisk文件路徑再次在內存緩存
實驗:
一,設置密碼保護編輯功能(在title前面)
在grub.conf配置文件里的title之上添加password –md5 “加密后的密碼”即可
生成密碼的方式:在vim末行模式下,輸入該命令,當光標自動跳到行首時,輸入密碼后按回車,再輸入一次密碼后按回車,即生成密碼
以后每次開機想要進入菜單進行編輯時,需要輸入密碼:
二,設置密碼保護內核(在title之內)
在grub.conf配置文件里的title之內添加password –md5 “加密后的密碼”即可
生成密碼的方式:在vim末行模式下,輸入該命令,當光標自動跳到行首時,輸入密碼后按回車,再輸入一次密碼后按回車,即生成密碼
以后每次開機進入系統時,需要輸入密碼:
三,損壞grub.conf文件后的恢復
四,在分區情況下,刪除并恢復 /boot 和 /etc/fstab(友情提示:先做快照備份)
1,先查看下本機的分區情況和相關配置文件/etc/fstab, /boot/grub/grub.conf
2,刪除 /boot 和 /etc/fstab,并重啟系統
3,由于刪除了/boot 和 /etc/fstab,系統找不到啟動分區和kernel,就要進入救援模式,提示系統沒
有分區,故要先創建分區
4,創建/boot 和 /etc/fstab
5,創建grub的配置文件
6,重啟系統,又回到熟悉的界面
五,在邏輯卷情況下,刪除并恢復 /boot 和 /etc/fstab(友情提示:先做快照備份)
1,先查看下本機的分區情況和相關配置文件/etc/fstab, /boot/grub/grub.conf
2,刪除 /boot 和 /etc/fstab,并重啟系統
3,由于刪除了/boot 和 /etc/fstab,系統找不到啟動分區和kernel,就要進入救援模式,提示系統沒
有分區,故要先創建分區
4,創建/boot 和 /etc/fstab
5,創建grub的配置文件
6,重啟系統,又回到熟悉的界面
六,在U盤上自制linux
1、給U盤分區并創建文件系統
# fdisk/dev/sdb
/dev/sdb1對應 /boot /dev/sdb2對應 /
# mkfs.ext4 /dev/sdb1
# mkfs.ext4 /dev/sdb2
2、掛載U盤的 /boot和 /
# mkdir /mnt/boot
# mkdir /mnt/sysroot
# mount /sdb1 /mnt/boot
# mount /sdb2 /mnt/sysroot
3、安裝grub至U盤
# grub-install –root-directory=/mnt /dev/sdb
4、復制內核和initrd文件至U盤
# cp /boot/vmlinuz-Version /mnt/boot/vmlinuz
# cp /boot/initramfs-Version.img /mnt/boot/iniyramfs.img
5、創建目標文件的根系統文件至U盤
# mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,src,mnt,media,home,root}
6、移植bash等至U盤的根文件系統
# bash copy.sh
腳本內容如下:
#!/bin/bash ch_root="/mnt/sysroot/" [ ! -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 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:" command while [ "$command" != "quit" ];do if bincopy $command;then libcopy $command fi read -p "Please input a command or quit:" command done
7、為U盤創建文件系統的配置文件
# vim /mnt/sysroot/etc/fstab
/dev/sda1 /boot ext4 defaults 1 1
/dev/sda2 / ext4 defaults 1 2
8、為U盤的grub提供配置文件
# vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title
root(hd0,0)
kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs.img
原創文章,作者:pingsky,如若轉載,請注明出處:http://www.www58058.com/47829
寫的很好,圖示清晰,原理部分闡述的很詳細。贊一個