grub相关问题~

发表于:2007-07-04来源:作者:点击数: 标签:
grubversion:0.92,redhat8.0.. 先拿一个例子出来吧: #grub.conf default=0 timeout=10 splashimage=(hd0,0)/grub/splash.xpm.gz titleredhat8.0 root(hd0,0) kernel/vmlinuz-2.4.18-14roroot=LABEL=/ initrd/initrd-2.4.18-14.img grub问题若干: 看过很多

grub version:0.92, redhat 8.0..
先拿一个例子出来吧:
#grub.conf
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz

title redhat 8.0
root (hd0,0)
kernel /vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /initrd-2.4.18-14.img

grub问题若干:
看过很多文章写grub的,无非也都是写grub.conf和menu.lst
的,但是很少看见把/boot/grub内部目录拿出来写的,我想估计也是没什么意义吧。主要配置文件就是grub.conf,也就是menu.lst,那么针对这个文件我也有相关问题,请高手解答:

分区编号问题:
kernel认分区跟grub是不同的,譬如grub把第一个硬盘的第一个分区认为(hd0,0),它从0开始记数,而kernel认成hda1,是吧,这里应该也有基本分区和逻辑分区的概念吧,我看到的一篇文章说kernel 认第一个 逻辑分区是hda5,我不敢确认,请高手来解答,如果只有一个基本分区的话,那第二个分区也就是第一个逻辑分区是hda5,那么也就是说第一个基本分区是hda1,hda2~hda4都不存在,是吗?但是grub是如何认的呢?(hd0,4)还是(hd0,1)???grub也分基本分区和逻辑分区吗?

启动盘问题:
看见的两种方法中:
1. cp /usr/share/grub/i386-pc/stage*
2. cp /boot/grub/stage*
我发现这两个文件夹内容是一样的嘛。。。
是否一个是另外一个的软链接或是镜像?

初始化镜像问题:
如上边列出的那个文件:
initrd /initrd-2.4.18-14.img
这一行是初始化镜像。但我所看到的所有文章中。都说是初始化镜像。。我也知道了。一般都是初始化镜像,设置相应参数,
我不太懂哦。我找到的文章里好象也没介绍这个的东东。。能不能讲一下:)
镜像是什么意思?起什么作用?而我又看见有的文章上边写编译内核之后要重新做一个镜像,然后系统才能启动(我没确认过,我没编译过内核),请问这又是怎么回事,这个意思应该是说编译内核之后不能再使用以前的镜像,导致启动出错,但是大多数好象都启动成功了?这又是什么原因呢?
镜像究竟是干什么的噶货?

读取多种分区问题:
我想知道grub是如何做到读取多种分区的,关于物理传输我不想了解,但是我注意到/boot/grub文件夹里边有一些文件,。诸如e2fs_stage1_5,minix_stage1_5之类,我想这个有可能是读取多种分区的原因吧,不知道是否属实,请指点。但是我有一个经历,那就是我装FreeBSD,好象没装bootloader然后想在grub里边指定,但是在启动rh8的时候,系统自动挂载,认不出这个分区,这应该是操作系统认不出这个分区。这个应该与/etc/fstab相关吧。请问怎么解决?因为系统在认不出这个分区之后就直接自动重启了,linux系统读取多种分区(而不是grub)是通过加载模块来解决的吗??
还是要我手动调入模块才能读取吗?或者说在/etc/fstab内部指定,然后按照特定格式去读取(因为默认可能是e3fs,而不是FreeBSd导致读不出来)???
启动系统的时候认不出FreeBSD的分区,自动挂载是由fstab指定的?我记得system service里边有一个是autofs,看字面应该是auto filesystem,是否打开这个服务,然后系统在读取非ext2 ext3分区的时候会auto地调用相关模块来读取。然而不开autofs就无法自动读取,而需要手动添加模块?


嘿嘿。。其实grub.conf我都搞不懂。实在太笨。。
而且FreeBSD的安装方式跟Linux完全不同。弄不懂。

最后。非常感谢高手您通读了我的问题,谢谢。。
我是针对网上下载的一些文章来提问的。所以不要告诉我精华区什么的都有。
我是从那里下的。但是没看明白。所以才来提问。。。

The Last question:
怎么我的splash.xpm.gz(自己指定的)。显示好象花屏.....

 双眼皮的猪 回复于:2003-09-24 13:59:54
grub文件夹里的stage1 stage2究竟是干啥子用的啊??

 双眼皮的猪 回复于:2003-09-24 14:06:12
initrd***.img

initrd的镜像,类似ramdisk,把一段程序打包到img里,然后在内存里开辟一段区域,一般是2m,释放到那里运行,都是一些初始化的程序     


不同内核,初始化的img可以相同,也可以不同,不要也可以。。。    

如果没有,可以在grub.conf里加上no initrd,它就跳过initrd的检测和执行了,以前好像就没有,后来才有的     

在没有mount /分区以前,系统要执行一些操作,比如挂载驱动什么的,它就把initrd释放到内存里,作一个虚拟的/,然后执行     

查看initrd.img:
initrd好像是gz格式的
cp initrd.img initrd.gz
guzip initrd.gz
mount -o loop initrd /mnt/floppy
试试
看看/mnt/floppy下有没有啥

 双眼皮的猪 回复于:2003-09-24 14:06:54
针对只有一个基本分区的硬盘:

第一个逻辑分区的编号是:
kernel认:hda5
grub认javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">hd0,4)

 双眼皮的猪 回复于:2003-09-24 14:14:37
grub读取多种分区:
只要grub认的分区格式,它都会知道怎么去处理,其实grub只是负责引导,就是bios和操作系统之间的桥梁,所以它一般装在mbr里,负责把计算机的操作权交付给你指定的操作系统 。。     

我猜测还是根据 /boot/grub/里边的那些minix_stage1_*什么的文件来读取多种格式,而进入系统之后,由内核来跟各种分区交流,但是内核是如何与分区交流的,不管了。等我看源码。
希望有高手指导。。hoho。。。

 luqibing 回复于:2003-09-24 14:57:50
solaris怎么引导。

 双眼皮的猪 回复于:2003-09-24 15:01:04
老大,我也是初学者,不能给予答复啊,sorry啦。。
:)
HonestQiao老大叫我先玩系统,没办法,
只有从引导程序玩起。。。
然后再深入点搞系统。。
网络服务。。。

 双眼皮的猪 回复于:2003-09-24 20:42:30
stage1和stage2究竟是干啥的啊?
autofs是干啥的啊?
/etc/fstab的读取是在autofs之前还是之后呢?

 sakulagi 回复于:2003-09-25 00:06:53
相对于MBR来说,grub太大,所以分成stage1和stage2,只有stage1是放在MBR里的。
man autofs里面讲了autofs的作用,和启动过程没有什么关系。

 siyeclover 回复于:2003-09-25 02:08:08
[color=gray:fec9cff652]分区编号问题:
没错,hda5在grub里是(hd0,4),你只要记住grub少1就行了。不管有几个主分区,第一个逻辑分区都是hda5。

读取多种分区问题:
你这个问题cloud看的不是很明白,你是用grub引导FreeBSD失败了是吗?
这个和fstab是无关的,cloud猜测你的grub.conf写的不正确。
你安装好FreeBSD后,若没有安bootloader,那么应该和从前一样进入linux,这时你运行一下fdisk  -l,看看FreeBSD在哪个分区,比如在hda3,那么你就在grub.conf最后添加这么一段:[/color:fec9cff652]  
[code:1:fec9cff652]title FreeBSD
        rootnoverify (hd0,2)
        chainloader +1[/code:1:fec9cff652]
[color=gray:fec9cff652]应该可以顺利引导FreeBSD的。
luqibing先生问solaris怎么引导,和FreeBSD是一样的,在grub.conf里添上边那么一段话。


以上
喜欢魉呼的siyeclover
[/color:fec9cff652]

 双眼皮的猪 回复于:2003-09-25 19:49:00
[quote:ecac56d4d8="siyeclover"][/quote:ecac56d4d8]     
您好,非常谢谢您的回答,
如果在grub.conf内部添加上一条您说的那一条。
那么也就是在grub引导系统之后再把系统引导权交给
bsd的bootloader,但是我的bsd是没有安装bootloader的
您的意思是说只要安装了操作系统,那么其必然会有引导程序的吗?
如果是这样的话那就可以的,我只需要添加这么一条就行了

抱歉我说的不是很明白.我再说一遍.希望可以让您明白:
我的意思是,在redhat 8.0引导的过程中。系统会加载
/etc/fstab中所有倒数第二列为1的分区,(mount -a)是吗?
那么我当初在没安装FreeBSD的时候。它所在的分区是在/etc/fstab
中倒数第二列为1,也就是说应该自动加载,但是当我安装了FreeBSD
之后呢。因为BSD的分区Linux认不出来,而我没有修改/etc/fstab
这样的话,在fstab中我的bsd的分区类型就依然是default,也就是
安装bsd系统之前的分区格式(ext3),而在这个时候,系统加载,发现格式
不对(这时已经改成bsd的分区格式了),,认不出来,于是就自动重新启动了,我觉得解决办法可以有两种,
一种在/etc/fstab中把FreeBSd的分区给去掉。

另外一种是把它的编号(倒数第二列)
改成0,这样,在系统启动的时候不会自动加载这个分区(这个是看的
www.douzhe.com/linux中的内容)

但是经我测试第二中方法行不通,为什么呢?
当我在把倒数第二列改成0的时候。重新启动看了一下。依然加载了
/FreeBSd分区,然而我把最后一列改成0的时候,系统重新启动却没有加
载bsd分区,那么也就是说系统加载的是最后一列(第六列)为1的(mount -a)
而不是倒数第二列,是吗?如果是这样的话。
www.douzhe.com/linux中有一篇文章就写错了..(忘记哪篇了,呵呵)

我回去加那么一条就可以引导FreeBSD啦?(我个人认为,还要在fstab里去掉
这个分区,不然linux启动的时候想要加载这个分区,却认不出来)
我的grub.conf内部我都没添加任何东西。却重新启动了。
解决这个问题我才去修改menu.lst,呵呵。.我根本没引导FreeBSD
Linux就重新启动了
谢谢指点。..

我的表达能力不行. ..

 双眼皮的猪 回复于:2003-09-25 20:05:48
[quote:447ec67a28="sakulagi"]相对于MBR来说,grub太大,所以分成stage1和stage2,只有stage1是放在MBR里的。
man autofs里面讲了autofs的作用,和启动过程没有什么关系。[/quote:447ec67a28]     

老大,你又来了。当初在chinaunix第一个环境变量就是您帮忙回答的,
记忆着呢,呵呵 ops: 
顺便问一下。stage1放在mbr内,那么在启动mbr的时候,由stage1
来调用stage2是吗?

man看不懂.全英文,我没说autofs跟启动有关系,是我没说清楚,俺在
说一次:

假如我在ntsysv(也可以setup-->System services吧)里指定autofs
可以随机启动,同时我机器上装有FreeBSd(不是ext3格式的),那么在
系统自动加载的时候(假设FreeBSD是处于自动加载的分区队列中),
系统启动到加载机器上分区的时候(譬如加载/ 什么的),
两种情况:

1.开了autofs服务

到了加载各个分区的时候,论到FreeBSd,这时系统本来认不出来,但是开了autofs服务,于是就调用autofs服务,哎呀,这是FreeBSD的分区,它就认出来了


2.没开autofs服务
系统启动到加载分区的时候,呀,这是什么分区啊,到fstab中去找。
类型是default啊,没错啊,应该是ext3的啊,怎么认不出来啊?
(这时候系统会自动重新启动,我的是rh8.0),

请问我的猜测正确吗??
只是猜测。...

 sakulagi 回复于:2003-09-26 09:41:08
不客气。
autofs的作用举一个例子。比如你把/dev/hdb7设置成mount point是/tmp/db7,然后设置成autofs。那么如果你访问/tmp/db7,/dev/hdb7就会被自动mount(由automountd来完成)。如果你一段时间不访问/tmp/db7,那么/dev/hdb7就会被自动的umount.

 sakulagi 回复于:2003-09-26 09:54:57
是由stage1来把stage2来调入内存的。

 simbasun 回复于:2003-09-26 13:48:06
顶。。

 siyeclover 回复于:2003-09-26 19:51:43
[quote:625e5c0b5e="双眼皮的猪"]    
那么我当初在没安装FreeBSD的时候。它所在的分区是在/etc/fstab
中倒数第二列为1,也就是说应该自动加载,[/quote:625e5c0b5e]     
[color=gray:625e5c0b5e]不客气,fstab的第5,6两列的作用不是你理解的那样,你man fstab一下,里面说的很清楚。[/color:625e5c0b5e]
[code:1:625e5c0b5e]The  fifth  field,  (fs_freq),  is  used  for  these filesystems by the
       dump(8) command to determine which filesystems need to be  dumped.   If
       the  fifth  field  is not present, a value of zero is returned and dump
       will assume that the filesystem does not need to be dumped.

       The sixth field, (fs_passno), is used by the fsck(8) program to  deter-
       mine the order in which filesystem checks are done at reboot time.  The
       root filesystem should be specified with a fs_passno of  1,  and  other
       filesystems  should  have a fs_passno of 2.  Filesystems within a drive
       will be checked sequentially, but filesystems on different drives  will
       be  checked  at  the  same time to utilize parallelism available in the
       hardware.  If the sixth field is not present or zero, a value  of  zero
       is  returned  and fsck will assume that the filesystem does not need to
       be checked.
[/code:1:625e5c0b5e]
[color=gray:625e5c0b5e]简单的说,第5列和dump有关,第6列和fsck有关。
cloud的理解,只要在fstab文件里的在引导时都会mount的,所以你若不想在引导时mount它,应该用#注释掉它,这样你的linux就不会在启动途中自动重启了。

以上
喜欢新田由加的siyeclover于Angel Voice中[/color:625e5c0b5e]

 双眼皮的猪 回复于:2003-09-29 11:44:48
非常感谢..
但是我不清楚dump是什么意思?是干嘛的?回去找找.

在fstab里都会自动加载吗?
最后一列应该是做check 用的,我把那里改成0,
然后在开机过程中(dmesg),并没有出现我改成0 的那个分区.
应该是没有加载的呀

原文转自:http://www.ltesting.net