Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1013396
  • 博文数量: 238
  • 博客积分: 2842
  • 博客等级: 少校
  • 技术积分: 2765
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-16 00:20
个人简介

stdlf

文章分类

全部博文(238)

文章存档

2013年(6)

2012年(13)

2011年(82)

2010年(89)

2009年(48)

我的朋友

分类: IT业界

2012-07-18 13:21:58

装过linux的大概都知道grub这个引导器吧!很强大,我在前面也说过我电脑的一些情况(连接)3个系统,当初由于不是很懂,在装系统的时候很多选项都是用的默认,结果也导致现在这样的情况。grub装在了MBR,通过grub来引导ntloader,虽然能正常地引导,但还是推荐不要这样。

正确的顺序应该是ntloader装在MBR中,通过ntloader来加载grub,这样做的好处就是尽可能地减少对windows的影响。在不想要linux的时候可以在windows中直接把那个“未知分区”格式化。如果是我那种情况删掉linux后windows就无法正确引导了(因为grub的一些配置在linux分区中)。当然可以通过启动软盘来恢复MBR,使之正确引导windows(前提条件是你必须要有软驱)。

下面介绍一个方法使grub来引导linux(这步其实没有必要,现在装linux都自带grub)
安装Grub的简便方法是用一张带有Grub的Linux LiveCD(比如常见的Knoppix丶Morphix丶Ubuntu,都是可以的),启动系统,在Linux的安装程序内如果能进入shell也是可以的,总之就是为了执行Linux指令,在终端下执行以下指令: 
# grub 
grub > root (hd0,X-1) 
grub > setup (hd0,X-1) 
grub > quit 
以上指令首先定位Grub所需的/boot目录在分区(hd0,X-1),然后将Grub的引导代码写入(hd0,X-1)分区的第一个扇区,所以你首先应该确保(hd0,X-1)分区内的/boot/grub目录下已经有stage1丶stage2丶*_stage*等文件,这些文件可以通过释放Grub的打包文件来获得,或者直接从LiveCD光盘内的/boot/grub目录复制。 
如果LiveCD带有grub-install脚本,也可以直接执行 
# mount /dev/hdaX /mnt 
# grub-install --root-directory=/mnt /dev/hdaX 
以上指令首先将带有Grub目录/boot/grub的/hdaX挂载到/mnt,然后将Grub安装到/hdaX。

二丶将Grub装配到ntloader内 
Grub已经安装到了Linux分区内,但它还不能引导系统,我们需要把它和ntloader联接起来,由ntloader对Grub加以引导。这是通过把hdaX分区内的Grub引导扇区转换为文件,并装配到Windows的ntloader内来实施的。 
仍然用LiveCD启动Linux系统(因为你所安装的Linux系统目前还是不能引导的),或者在安装程序可以进入shell的情况下,执行以下指令: 
# mount -t vfat /dev/hda1 /mnt 
# dd if=/dev/hdaX of=/mnt/linux.lnx bs=512 count=1 
以上两条指令将Windows的启动分区(本文中为hda1)挂载到/mnt下,然后把Linux分区(hdaX)的第一个扇区(大小为512字节)复制为Windows启动分区根目录下名为linux.lnx的文件。 
注意:如果你的Windows启动分区(即Windows下的C盘)不是fat32文件系统,而是ntfs文件系统,你需要在软驱内放入格式化的DOS软盘,并将第一条指令替换为: 
# mount -t msdos /dev/fd0 /mnt 
因为ntfs文件系统不经过特殊处理,在Linux下是不可写的,即使你将指令中的vfat替换为ntfs,实现了挂载,也是一样,所以我们在这里把linux.lnx写入DOS格式的软盘,然后通过软盘在Windows下把linux.lnx放入C盘。 
接着是在Windows下编辑C盘根目录下的boot.ini文件,boot.ini通常是隐藏丶只读的系统文件,所以需要把它的“隐藏”丶“只读”属性去掉,才可以编辑。在“我的电脑”工具菜单“文件夹选项”下的“查看”栏中取消“隐藏受保护的操作系统文件”和“隐藏已知文件类型的扩展名”,并选择“显示所有文件和文件夹”,就可以看到C盘根目录下的boot.ini文件了。在boot.ini内的[operating systems]栏增添一行: 
c:\linux.lnx=”Grub Menu” 
并将[boot loader]栏内的“timeout=0”,改为“timeout=5”,这样引导Windows时将会显示带有“Grub Menu”字样的操作系统选择菜单,并持续5秒钟,如果选择Grub Menu,就会进入Grub菜单。

三丶设置menu.lst文件 
menu.lst是对Grub进行设置的一个文本文件,可以用文本编辑器加以编辑,位于/boot/grub目录内。我们在前面虽然已经把Grub安装到了Linux根分区上,但如果没有生成menu.lst文件并对它加以设置,Grub是没有任何作用的。对menu.lst文件进行设置是个复杂的工作,特别是有关kernel和initrd的各种特殊参数,幸而系统安装的menu.lst文件内通常有详尽的注释。并且你的Grub如果是由安装程序自动设置的,那么通常menu.lst已经被设置好了,我们仅仅根据自己的需要进行一些修改和调整,而不必重写menu.lst。即使你的menu.lst不是由安装程序生成的,也不必担心,还可以参考丶分析安装光盘或者LiveCD上的menu.lst文件来对Linux分区内的menu.lst加以设置。 
如果Grub已经由安装程序装到了MBR,并且能够引导所安装的Linux,那么自动生成的Linux系统根分区下的/boot/grub/menu.lst就已经被配置好了,我们只须把Grub重新安装到Linux系统根分区,恢复Windows下的原初MBR,按照上文的方法把Linux系统根分区的Grub引导代码装载到ntloader就可以了。因为Grub的安装位置不是在menu.lst文件内指定,而是在linux shell中执行grub,进入Grub命令行后,应用Grub的内部指令root和setup来指定,或者在可执行的shell脚本文件grub-install中,以参数的形式指定设备文件(如/dev/hda或/dev/hdaX)。

下面这个内容是我电脑上linux的menu.lst文件的内容

# 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,6)
#          kernel /vmlinuz-version ro root=/dev/hda9
#          initrd /initrd-version.img
#boot=/dev/hda
default=2
timeout=20
splashimage=(hd0,6)/grub/splash.xpm.gz
hiddenmenu
password --md5 $1$2VWBLn/O$1B14KKRoSF0jP1zo2UTu2.
title Fedora Core (2.6.17-1.2157_FC5)
 root (hd0,6)
 kernel /vmlinuz-2.6.17-1.2157_FC5 ro root=LABEL=/ rhgb quiet
 initrd /initrd-2.6.17-1.2157_FC5.img
title Windows XP
 rootnoverify (hd0,0)
 chainloader +1
title Windows Server 2003
 rootnoverify (hd1,0)
 chainloader +1

这里面只用知道几个参数就行,default用来设置缺省引导系统,0表示第一个,1表示第二个。
timeout是grub界面等待时间
title Fedora Core (2.6.17-1.2157_FC5),就是要引导的系统,root (hd0,6)表示第一块硬盘第三个逻辑分区
title Windows XP,引导的是xp

这个是我winXP下的boot.ini信息
[boot loader]
timeout=6
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(1)partition(1)\WINDOWS="Microsoft Windows 2003" /fastdetect
C:\grldr=DOS工具

这个很简单partition代表分区,1表示第一个分区。rdisk代表硬盘,0表示第一块硬盘。timeout倒计时。

从这两个文件中可以看出,grub的功能确实要比ntloader强,因为grub可以引导目前所有的操作系统!!!

阅读(3293) | 评论(0) | 转发(0) |
0

上一篇:MSDOS.SYS文件的设置

下一篇:.bat

给主人留下些什么吧!~~