先来看下配置文件的格式:
[[email protected] ~]# uname -r 2.6.32-642.el6.x86_64 [[email protected] ~]# 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