此处以C5 C6为例,GRUB的主要作用是提供一个菜单,允许用户选择要启动系统或不同的内核版本,把用户选定的内核装载到内存的特定空间中,解压展开,并把系统控制权移交给内核,一台主机上可能装有不止一个操作系统,用户可以根据GRUB提供的启动菜单选定操作系统,随即加载指定内核
GRUB分为三个阶段,
stage 1 这段代码的其中一段代码是MBR中的 bootloader(446字节),这一步在GRUB 中是不可或缺的,主要负责当BIOS 交接给GRUB 时,载入存在于各分区中的开机文件,也就是所谓的开机管理程序。其大小大约512字节
stage1_5 这段代码是在紧接着MBR的,辅助GRUB识别stage2所在的文件系统所在的磁盘。stage1.5 被加载时,就已经赋予GRUB 访问文件系统目录的能力(这段程序中有访问stage2文件系统的驱动),所以,自然可以在开始找不到stage2 的情况下,从文件系统目录中找出stage2 的所在位置,并激活Linux。
其大小约32K
stage 2 在boot目录中,不一定在根分区上,即,可以独立分区;
stage提供一个GRUB启动菜单,供用户选择不同的操作系统选择不同的操作系统
提供选项,访问配置文件、连接下一个bootsector(主机上可能装的不止一个系统,,可能,可以手动选择启动哪个系统,也可以修改其配置文件以达到不同效果)stage2主要就是根据配置文件,或手动选择、设置启动需要的内核或系统!
在系统读秒的过程中按任意键可进入GRUB选择菜单,如下图,假如你的主机中不止一个操作系统,你可以根据需要选择不同的操作系统;
仔细看菜单下面的选项,键入e键,可在开机前进入编辑模式,如下图,
方框内第一行代表boot目录所在的位置,此处为第一个磁盘第一个分区,
方框内第二行就是你的内核位置及内核,
方框内第三行ramdisk(ramfs),这是一个虚拟文件系统,可通过这个文件系统可找到根分区位置 以方便内核找到根分区、init程序、以及必要的驱动程序、库文件
在这个界面,如果再次键入e键,可对你选择的选项进行修改!
在这两个界面中你也可以按c进入GRUB的命令
在以上两个界面中你也可以按c进入GRUB的命令行模式
这样手动指定内核及initrd也能启动系统
grub 2主要是为加载内核提供菜单,主要依靠配置文件,它的位置在 /boot/grub/grub.conf
#boot=/dev/sda
10 default=0 #启动项可以有多种,default=0表示默认第一项,1表示默认第二项
11 timeout=5 #在grub菜单处停留的时间,超时则自动进入默认项
12splashimage=(hd0,0)/grub/splash.xpm.gz #grub2 的背景图片,可以修改
13 hiddenmenu #是否隐藏菜单
14 title CentOS 6 (2.6.32-504.el6.x86_64) #内核或title不止一个,此处的内容将出现在选择菜单中
15 root (hd0,0) #内核的磁盘位置
16 kernel /vmlinuz-2.6.32-504.el6.x86_64ro root=/dev/mapper/VolGroup-lv_root
rd_NO_LUKS rd_NO_MDrd_LVM_LV=VolGroup/lv_swap crashkernel=auto.UTF-8 #内核的一些参数选项,名字,选项等。
rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
rhgb quiet
17 initrd/initramfs-2.6.32-504.el6.x86_64.img # initrd的名字
看到它的配置文件,便会明白grub2 的主要作用了
安装grub会自动生成此文件
[root@localhost ~]# ls /boot/grub/
device.map grub.conf minix_stage1_5 stage2
e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 ufs2_stage1_5
fat_stage1_5 jfs_stage1_5 splash.xpm.gz vstafs_stage1_5
ffs_stage1_5 menu.lst stage1 xfs_stage1_5
功用,
(1)提供菜单。并提供交互接口
e: 编辑模式,用于编辑菜单
c:命令模式 ,交互式接口
(2)加载用户选择的内核或操作系统
允许传递参数给内核
可隐藏此菜单
(3)为菜单提供了保护机制
为标记菜单进行认证
为启用内核或操作系统进行认证
将grub破坏后,有三种途径可以修改之!
如果grub破坏后没有重启,则直接grub-install 如下,如果已经关机了,则可以把坏的系统磁盘分区挂载到好的系统之上,grub-install安装。
[root@localhost~]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 16G 4.8G 11G 33% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/sda1 291M 48M 228M 18% /boot
/dev/sr0 3.5G 3.5G 0 100% /media/cdrom
[root@localhost~]# dd if=/dev/zero of=/dev/sda1 bs=200 count=1
1+0 records in
1+0 records out
200 bytes (200B) copied, 0.00160427 s, 125 kB/s
[root@localhost~]# man bs
No manual entryfor bs
[root@localhost~]# man dd
[root@localhost~]# grub-install --root-directory=/ /dev/sda1
ll /boot/grub –d
drwxr-xr-x. 2root root 1024 9月 29 08:35 grub
2、如果只是grub2 坏了,则可以手动配置grub的配置选项,或者在grub命令行重新安装grub,grub命令行的操作类似于在系统中进入grub
3、再不济,开机进入到系统救援模式下,安装配置grub,
(1)首先插入光盘,进入bios,将光盘调整为第一启动,略…,启动后如下。。。
未提示步骤选择默认!
此处设置不用联网,选no
此处提示,要chroot 切换跟
切换至bash下,进行grub安装,安装后退出重启
重新修改bios就可以重新启动了!
原文地址:http://fallcamel.blog.51cto.com/8079848/1699690