一、启动冲突
造成启动冲突的原因往往只有一个,MBR覆盖。比如先装的XP再装的Linux,Linux就会把XP安装时写入MBR的数据给覆盖掉,如果先装Ubuntu再装Fedora,Fedora的GRUB会安装到MBR上覆盖了Ubuntu的GRUB。这些情况都可能会造成某些操作系统不能启动。
幸好Linux在这方面还算人性化,它在覆盖XP在MBR中的数据之后,会自动搜索可启动的Windows分区,并且把XP的启动信息写到自己GRUB的menu.lst中,这样在装完Linux后能在启动菜单上看见原先的 Windows启动项(通常在最后一项)。
而有时候不小心会把Windows弄坏,需要重装Windows,等你Windows重新装好了,Linux也就启动不了了,因为Windows把MBR又给更新了。Windows和Linux抢MBR的矛盾一直如此激化。
那么如何防止两个系统吵架呢?两种方法。
第一种就是事后修复。用任何一张可以引导到grub的启动盘(比如,可以是你的LiveCD),进入grub。如果先进入的是终端,那么以超级用户模式在终端中输入
grub
即可进入终端,然后进行grub修复安装过程,如果你知道你的磁盘序号X(一般为0)和Linux分区序号(Partition Number)Y(从0开始数),那么可以运行:
root (hdX,Y)
setup (hd0)
后面一句的hd0表示把grub写到MBR上。
也可以简单地一句话:
setup (hd0) (hdX,Y)
成功了的话会返回successful
如果不知道或者忘记了Linux的分区序号(磁盘序号你应该知道吧,要是不确定就填0),先键入
root (hdX,
然后按TAB键,将会出现自动补全信息,此时你应该就知道Linux分区所在的序号了吧。
输入完毕后仍旧再进行setup操作。这样重启后GRUB就修复了。
第二种方法就是在重装XP前,先把Linux写在MBR里的信息给保存出来,保存成一个文件,通常这个文件的大小必须是512字节。运行这个命令:
sudo dd if=/dev/sda f=~/linux bs=512 count=1
(如果是SCSI硬盘则为sda,IDE硬盘为hda。of=后面的路径为输出路径,路径和文件名可以任意。)
就可以把MBR中的前512字节的信息保存到用户文件夹下名为linux的文件中。
然后重装XP,把这个linux文件放到Winodws分区中,为了便于管理,我们习惯上将其放入C盘根目录下。
接着修改XP的boot.ini,在最后一行添加如下语句:
c:\linux=”Ubuntu Linux Operation System”
并修改启动菜单读秒的长度。
重启之后想办法进入DOS重写分区表:
fdisk /mbr
再次重启就可以看到,XP的启动管理器中出现了双启动菜单,而选择”Ubuntu Linux Operation System”就和以前进入MBR的时候一样了。这种方法的原理也很清晰,将MBR头512字节(包含启动信息的头512字节啊)保存成文件,让 Windows系统来调用这个文件并且处理启动。
以后重装Windows,只要实现把那个长度为512字节的“linux”文件转移到别处,装完后移回来,修改boot.ini就可以了。
Linux不同发行版之间也需要协调才能和平共处,装了Ubuntu,还想装个Fedora,于是在硬盘上独立分区安装。结果装好后Ubuntu进不去了。想到肯定是Fedora也霸道地把自己的启动信息写到MBR中去而覆盖了Ubuntu的信息了。
于是想到修改menu.lst,因为menu.lst可以显示处理启动菜单。把Ubuntu分区挂载之后,找到Ubuntu下的menu.lst,把和它有关的启动语句给复制到Fedora的menu.lst中,重启电脑,可以了。
二、关于menu.lst
menu.lst用于管理启动菜单项。包括是否隐藏启动菜单、启动菜单倒计时、启动项显示等选项。一般的操作顾名思义就可以看懂是什么意思。
值得一提的是Linux的启动都是通过这两个文件的引导:kernel的vmlinuz-XXXXX和initrd的initrd.img。也就是说需要引导一个操作系统的话,在grub的menu中告知这两个文件所在的分区,加入这两个文件的路径就可以启动了。
比如:
title Ubuntu
root root(hd0,0)
kernerl /boor/vmlinuz-2.6.22-14-generic root=UUID=XXXXXX ro quiet splash locale=zh_CN
initrd /boot/initrd.img-2.6.22-14-generic
三、启动时候的挂载
老是手动挂一个分区太麻烦了,于是想到用fstab来自动挂载
fstab的每一个非注释行都挂了一个分区到对应路径下,其参数分别为:挂载的设备 挂载点 文件格式 挂载模式(此后的一大段我不甚了解)
“挂载的设备”中,我试过/dev/sda1这种的格式,发现不好使;再看看用UUID,先手动挂载需要的盘,在终端键入
ls -l /dev/disks/by-uuid
显示每个分区的uuid,一串乱七八糟的数字,在fstab中写下:
UUID=xxxxxxxxxxxxxx /media/sda8 vfat user,noauto,utf8,umask=000,gid=46 0 0
搞定。


litkt 于 2008-02-19 22:39:57发表:
哪有那么麻烦?
在后装的linux里编辑lilo.conf或grub.conf,加入原来装的linux的相关信息,然后lilo或(grub怎么用?)重写写MBR,就有原来装的选项了。
如果MBR被windows冲了,用救援盘启动进linux,在lilo.conf或grub.conf里加入windows启动项...
Programming 于 2008-02-19 16:58:19发表:
我来听听是什么东东