QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4145|回复: 25

LILO竟然比GRUB强!闷!望高人指点江山。

[复制链接]
发表于 2004-6-2 16:07:02 | 显示全部楼层 |阅读模式
1、今早开电脑,选择WindowsXP没想到还没启动完成,停电。半小时过后,供电恢复,进XP,启动未完成,XP崩溃,重启XP,依然崩溃。用XP安装盘启动想重装一遍,选"L"怕丢失数据,重启。
2、这时重启时MBR已被清除,XP、Linux都进不去,"十分脑火",用红帽安装盘进rescue模式,chroot命令之后,用grub-install /dev/hda命令重写MBR,没想到启动时黑屏,我断定GRUB已经写在MBR上,用上下箭头肓人摸象,选择Linux,这时屏幕出现如下提示:
Boot 'Red Hat Linux (2.4.20-'
root (hda,2)
Filesystem type is extfs.partition type 0x83
kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
Error 15: File not found
Press any key to countinue...
(注:上面的括号显示的是雪点),按Enter键后,出现一画面(如果清晰并加颜色那正是GRUB的启动图形画面),这时什么也看不清,只能看清轮廓,选Linux依然无效,不解!郁闷!我虽知道还有一方法安装GRUB,但没有用过。时间就这样过去了,我猛的想起救世主LILO,rescue模式用lilo -v重写MBR,启动正常,进runlevel 5。一切正常。
问:为什么grub-install /dev/hda没用,我是同方家用电脑呀,又不是什么特别的电脑。我现在只能用lilo 了。
发表于 2004-6-2 16:23:44 | 显示全部楼层

linux前辈们都比较喜欢用LILO而不是GRUB

以前我问一些LINUX的先驱们,他们用什么引导程序,得到的答案大多是LILO
一个是出于习惯的原因,因为LILO比GRUB先出来,但是还有一点:LILO比GRUB更低级。这种低级也意味着更多的灵活性。因为LILO是不依赖文件系统的,而是直接根据硬盘参数以找扇区的形式访问硬盘,这就是为什么修改了LILO的配置文件要重新装LILO的原因,LILO需要把内核所在位置的信息重新写到硬盘上,而GRUB是基于文件系统识别的,它能识别常见的很多种文件系统。可以做一个实验:把LINUX的/boot 文件系统格式化,启动电脑照样引导内核,因为格式化虽然使文件系统不存在了,但是内核仍然在硬盘上,只是不能通过文件系统访问。但是LILO直接通过硬盘读取数据,所以照样启动内核,但是GRUB却不能。另外,在欠入式应用场合,也几乎都用LILO,因为在这些场合基于文件系统的GRUB是不能胜任的。个人为人GRUB只是在外观上,和使用方便性上优于LILO,其他方面未必比LILO强,个人倾向于用LILO而非GRUB。
回复

使用道具 举报

发表于 2004-6-2 17:42:11 | 显示全部楼层
我也喜欢用lilo,不会用grub
回复

使用道具 举报

发表于 2004-6-2 18:07:57 | 显示全部楼层

Re: linux前辈们都比较喜欢用LILO而不是GRUB

[quote:8a082727fe="gucuiwen"]可以做一个实验:把LINUX的/boot 文件系统格式化,启动电脑照样引导内核,因为格式化虽然使文件系统不存在了,但是内核仍然在硬盘上,只是不能通过文件系统访问。但是LILO直接通过硬盘读取数据,所以照样启动内核,但是GRUB却不能。[/quote]


文件系统都不存在了, 内核作为一个文件还能存在吗??????
(就像房子都没了,房子里的家具还能在吗?????)
LILO和 GRUB 或者 NT loader, BSD bootmanager 等其他启动管理器一样,都是基于文件系统的, 都只能认识一部分 文件系统 (例如 Grub 只能认得 EXT2,3,FAT等。。),对于不认得的 文件系统,不能直接引导内核,只能通过读取该分区的启动扇区来转交引导权,从而引导其他操作系统

至于不能启动是因为Grub没有找到你的内核(决不是因为文件系统)
kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
Error 15: File not found (内核文件没找到)
Press any key to countinue...
因为有的 Linux (例如 redhat 默认)有一个 Boot 分区,内核文件在那个boot分区上面,你用Grub启动时候都要指向那个分区,而不是你的根分区,你启动后用 chroot ,指到根分区(其实应该指向 Boot分区),再安装 Grub,Grub自然认为内核在根分区上,其实内核在Boot分区上,所以 Grub 启动时当然找不到内核文件

假设你的 boot分区为 /dev/hda1 root分区为 /dev/hda2
则可以Grub 启动时用命令行:
root (hd0,0)指定你的 boot分区
kernel /vmlinuz-2.4.20-8 (假设你的内核名为如此)
boot
即可启动
然后进入 Linux 后, 输入 grub 进入 命令行
root (hd0,0)
setup (hd0) 将 Grub安装在 MBR,(setup (hd0,0) 安装在你的Boot分区上)重启即可
回复

使用道具 举报

发表于 2004-6-2 21:23:18 | 显示全部楼层
从技术上讲,grub肯定比lilo先进.
从易用性上讲,grub仍然比lilo先进.
比如每次改动了内核,lilo都要从新写一遍mbr,如果你某次安装了新内核却忘了更新mbr就重启了系统,那就等着用rescue光盘或者软盘去悔过吧,而grub却可以在不更新mbr的情况下用新内核引导.而且有时你的配置文件写错了也不要紧,grub有一个小小的shell可用,在这里你可以重新指定从何处引导,等进入系统之后再改动配置文件就行了.而lilo是根本不可能做到这些的.况且每次改动内核都去重写mbr,不光麻烦,而且会有安全隐患.

对于lilo和grub,我都用过不短的时间,因此对各自的优缺点还是有不少认识的.总的来说grub要比lilo好的多,也是将来的趋势.
回复

使用道具 举报

发表于 2004-6-3 03:46:16 | 显示全部楼层
我还是习惯用 lilo。
回复

使用道具 举报

发表于 2004-6-3 08:36:07 | 显示全部楼层
呵呵,我还是习惯用grub.
也许这就是linux的好处吧,有多种软件可以选择,这不喜欢用那个,不象M$  windows,只有一个nt loader,不想用也得用.
回复

使用道具 举报

发表于 2004-6-3 12:47:45 | 显示全部楼层

Re: linux前辈们都比较喜欢用LILO而不是GRUB

[quote:aa3d00a6af="yang97e"]文件系统都不存在了, 内核作为一个文件还能存在吗??????
(就像房子都没了,房子里的家具还能在吗?????)
[/quote]
你把/boot所在的分区格式化,请注意是创建一个新的文件系统比如FAT,而不是低级格式化把硬盘上的数据全部抹掉。可以这样 :把原来装linux的分区在windows 2k 或XP下快速格式化。启动后选择linux,内核还是正常引导,只是不能找到init程序启动失败,说明LILO的引导并不依赖文件系统,只依靠硬盘的BIOS参数来找到内核所在的硬盘扇区并读取。这在很多资料中都有提级。GRUB我确实不了解,只知道它引导系统是依赖文件系统的。所以在欠入式应用中,比如把LINUX系统烧制在一块ROM上,都是用LILO,因为这些场合GRUB就无能为力了,但是看上去笨拙的LILO却有用武直地。关于LILO引导系统的全过程请查看
《from power on to prompt》一文。在文件系统中,一个内核是一个文件,但是在一个没有文件系统的硬盘区域,内核就是一个连续的数据集,LILO只记录这个数据集的位置(在哪个柱面,哪个扇区等等) 并不关心内核在什么样的文件系统上。当然,我们并不否认GRUB的技术先进性。只是个人习惯和应用场合的问题。可以自己亲自实践一下,证明以上讲的内容。欢迎大家探讨。
回复

使用道具 举报

发表于 2004-6-3 16:29:52 | 显示全部楼层

Re: linux前辈们都比较喜欢用LILO而不是GRUB

[quote:fafd5ed5ff="gucuiwen"][quote:fafd5ed5ff="yang97e"]文件系统都不存在了, 内核作为一个文件还能存在吗??????
(就像房子都没了,房子里的家具还能在吗?????)
[/quote]
你把/boot所在的分区格式化,请注意是创建一个新的文件系统比如FAT,而不是低级格式化把硬盘上的数据全部抹掉。可以这样 :把原来装linux的分区在windows 2k 或XP下快速格式化。启动后选择linux,内核还是正常引导,只是不能找到init程序启动失败,说明LILO的引导并不依赖文件系统,只依靠硬盘的BIOS参数来找到内核所在的硬盘扇区并读取。这在很多资料中都有提级。GRUB我确实不了解,只知道它引导系统是依赖文件系统的。所以在欠入式应用中,比在文件系统中,一个内核是一个文件,但是在一个没有文件系统的硬盘区域,内核就是一个连续的数据集,LILO只记录这个数据集的位置(在哪个柱面,哪个扇区等等) 并不关心内核在什么样的文件系统上。[/quote]


首先申明, 只是技术讨论,没有人身攻击的意思,请gucuiwen不要误解
我也不是说 GRUB和 LILO 那个更好

(1)照您这么说,LILO可以直接引导 Windows 内核了????(或者说 还可以把 内核装在 NTFS上),反正Windows内核也只是一个文件而已(NTFS 又有什么关系),请问该如何做?

(2)如果我把 内核文件转移一下位置,(用CP,再用 RM),即内核在硬盘上的物理位置改变了, 路径和文件名不变,不重装 LILO的话,LILO应该找不到内核了,不能启动了(因为你说“一个内核是一个文件,但是在一个没有文件系统的硬盘区域”现在我吧硬盘区域改了),结果是不是??, LILO应该照常启动

(3)我们知道文件是磁盘存储的抽象,是一种数据结构,我们都知道,文件在硬盘上不是连续存储的,是由链表连接起来的,链接的信息存在磁盘的Table中(例如 Ext2 inode table 或者叫 inode list),现在格式化了,即便数据还在(但却是分布在硬盘的各个扇区,不见得是连续的),但连接他们的 Table没有了,即使 LILO 能读到第一部分,那它怎么能链接到其他部分从而读到完整内核文件呢?(即使Table还在LILO 能读到,那前提是 LILO知道链接的规则,即 LILO 懂得该文件系统 !,而不是所谓的和文件系统无关)
回复

使用道具 举报

 楼主| 发表于 2004-6-3 16:55:08 | 显示全部楼层
原因已经查明,不是GRUB的错。谢谢楼上兄弟的提醒,我用fdisk –l命令一看分区信息,觉得得整个硬盘的分区表就像重写一样,分区变了,变得我不认识,但规范了。我做梦也没想到root (hd0,2)会变。
我真不知道该向“比尔”大叔说一声谢谢呢还是骂他一句。都是XP光盘惹的祸,重写MBR的时候,把我的分区表的顺序调了一下。
===============================================
我原来买电脑的时候分了一个主分区[8G],一个扩展分区[32](N个逻辑分区),后来装Linux的时候为了了谨慎期间,从[8G]的主分区劈开了两个区用于Linux,追加到MBR-64字节分区表的“后两个分区”部分,分区信息为:
--------------------------------------------
hda: hda1 hda2 <hda5 hda6 hda7 hda8 hda9 hda10 hda11 hda12> hda3 hda4
分区表第一段(16B):hda1
分区表第二段(16B):hda2
分区表第三段(16B): hda3
分区表第四段(16B): hda4
--------------------------------------------
hda3,hda4正是从那8G劈出来的。但是物理磁道上,它是介于hda1与hda2之间的,当初这样的情况我是有所考虑的,怕有一天会给我带来麻烦,但不幸的是事情还是发生了,一年前的预言变成了活生生的现实。用XP光盘启动过之后,它把分区表信息按物理磁道重写了一遍,hda3,hda4往前挪,变成如下:
-----------------------------------------------------------------
hda: hda1 hda2 hda3 hda4 <hda5 hda6 hda7 hda8 hda9 hda10 hda11 hda12>
分区表第一段(16B):hda1
分区表第二段(16B):hda2(原来的hda3分区信息)
分区表第三段(16B): hda3(原来的hda4分区信息)
分区表第四段(16B): hda4(原来的hda2分区信息)
-----------------------------------------------------------------
至此变区表也变成按物理磁道编排,规范了,但给了我致命一击。我也有所感慨,第一次认识到到LABEL的好处并且学了GRUB的命令环境,/etc/fstab文件第一列它是由LABEL所控,不是定义了哪个具体的分区,以此用LILO启动Linux的时候一切都是正常的。
附上现在的分区信息:#fdisk –l
Disk /dev/hda: 40.0 GB, 40020664320 bytes
255 heads, 63 sectors/track, 4865 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1   *         1       750   6024343+   b  Win95 FAT32
/dev/hda2           751       769    152617+  83  Linux
/dev/hda3           770      1018   2000092+  83  Linux
/dev/hda4          1021      4865  30884962+   f  Win95 Ext'd (LBA)
/dev/hda5          1021      1412   3148708+   b  Win95 FAT32
/dev/hda6          1413      2065   5245191    7  HPFS/NTFS
/dev/hda7          2066      2718   5245191    b  Win95 FAT32
/dev/hda8          2719      3570   6843658+   7  HPFS/NTFS
/dev/hda9          3571      4355   6305481    7  HPFS/NTFS
/dev/hda10         4356      4388    265041   82  Linux swap
/dev/hda11         4389      4413    200781   83  Linux
/dev/hda12         4414      4865   3630658+  83  Linux
#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda3             1.9G  460M  1.4G  26% /
/dev/hda2             145M   12M  126M   9% /boot
/dev/hda11            190M   73M  108M  41% /home
none                   62M     0   62M   0% /dev/shm
/dev/hda12            3.5G  2.7G  604M  82% /usr
/dev/hda5             3.0G  578M  2.5G  19% /mnt/winxp

修改grub.conf文件如下:
# grub.conf generated by anaconda
#
# 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,2)
#          kernel /vmlinuz-version ro root=/dev/hda4
#          initrd /initrd-version.img
#boot=/dev/hda
default=1
timeout=10
splashimage=(hd0,1)/grub/splash.xpm.gz
title Red Hat Linux (2.6.6-lids)
        root (hd0,1)
        kernel /vmlinuz-2.6.6-lids ro root=/dev/hda3
        initrd /initrd-2.6.6-lids.img
title Red Hat Linux (2.4.20-
        root (hd0,1)
        kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
        initrd /initrd-2.4.20-8.img
title DOS
        rootnoverify (hd0,0)
        chainloader +1
再次谢谢好心人的帮助!
回复

使用道具 举报

发表于 2004-6-4 14:08:35 | 显示全部楼层
原来如此........
回复

使用道具 举报

发表于 2004-6-4 16:27:36 | 显示全部楼层
搞清楚就好,上次有个家伙说windows可以使用linux的swap分区,这是令人芬特。跟他说还说不清楚。
回复

使用道具 举报

发表于 2004-6-4 17:06:50 | 显示全部楼层
我觉得 Grub 好用的说. 而且现在有一个叫做 grub4dos 的patch, 这样Grub就可以在
纯 Dos 下运行出命令行来,异常方便. ;-)

还有,他提供了为 NTLDR 加载的选项,我们玩 Linux 的时候就在也不怕 MBR 灾难了...
现在的 0.94 可以支持 NTFS, ISO9660(网上均有 Patch ) 了.

                      http://www.cn-ebiz.com/grub4all/



------ Grub 是趋势!
回复

使用道具 举报

发表于 2004-6-4 20:43:51 | 显示全部楼层
[code:1]
如果我把 内核文件转移一下位置,(用CP,再用 RM),即内核在硬盘上的物理位置改变了, 路径和文件名不变,不重装 LILO的话,LILO应该找不到内核了,不能启动了(因为你说"一个内核是一个文件,但是在一个没有文件系统的硬盘区域"现在我吧硬盘区域改了),结果是不是??
[/code:1]
把内核文件转移一下位置确实如此,试验过。但是用“cp”、“rm”有时未必会改变物理位置。一般情况下“rm” 仅仅从文件系统链条中抹掉该文件的入口标记。
回复

使用道具 举报

发表于 2004-6-6 16:53:18 | 显示全部楼层
各有好处
grub是比lilo先进,但是有些时候聪明反被聪明误,就因为grub太先进了
有些地方lilo还是少不了的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-6-7 09:20 , Processed in 0.135565 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表