当前位置: 主页 > 操作系统 > FreeBSD > FreeBSD引导扇区被Windows覆盖的解决方案

FreeBSD引导扇区被Windows覆盖的解决方案

时间:2009-9-27来源:互联网 点击:
 1、引言

  对于在一个硬盘上安装多操作系统而言,经常面临的一个问题就是当重新安装了Windows后,引导分区将会被Windows覆盖掉。无论是安装Linux还是FreeBSD,当重新安装Windows时,都会遇到这个问题。作者就在自己的机器上安装了双系统:Windows XP和FreeBSD 6.1。最近由于Windows出现被病毒感染的症状,因此作者一怒之下将Windows重装了,这下,世界彻底清净了。但同时,也就无法启动FreeBSD了。作者通过阅读网络上的相关文章,采用一种与通常的方式稍微不同的办法来解决了这个问题。

  2、通常采用的方法

  作者在网上查找了相关的资料,发现大多数都是通过修改Windows的C:\boot.ini来实现NTLDR(Windows的引导程序)的多系统引导。这种解决方式的做法如下:

  1、 首先用FreeBSD的引导光盘(或软盘)启动FreeBSD,进入Fixit控制台;

  2、 通过mount_msdosfs命令挂载Windows系统所在的分区,通常是C:\,其在FreeBSD下的设备通常对应的是/dev/ad0s1。因此挂载(mount)命令如下:

  mount_msdosfs /dev/ad0s1 /mnt

  3、 通过dd命令将FreeBSD的引导扇区的内容转储到一个文件中,通常FreeBSD的根文件系统位于/dev/ad0s3a上——至少在作者的机器上是这样的。这里将转储的输出文件命名为bootsect.bsd,同时这个文件应该位于Windows的C:\下,故具体的命令如下:

  dd bs=512 count=1 if=/dev/ad0s3 of=/mnt/bootsect.bsd

  4、 然后取出FreeBSD的引导光盘,启动Windows,修改C:\bootsect.bsd文件,在其末尾添加下面一行:

  c:\bootsect.bsd=”FreeBSD 6.1”

  实际上,等号后面的字符串是NTLDR显示操作系统列表的时候的字符串,因此可以写成任何你喜欢的值——你甚至可以用你的宠物的名字来命名,比如RedDaemon(假设这是你养的一只猫的名字)。

  5、 然后,再次启动Windows的时候,就会出现一个让用户选择启动哪个操作系统的提示,就好像Windows安全模式下那样。

  以上就是作者在网上找到的被说明得最多的方法。然后作者试过之后,发现这种方法不能在作者的机器上工作。具体的原因并不清楚,于是作者试图寻找另外一种做法。

  3、作者采用的方法

  实际上,在FreeBSD中有这样一个工具:boot0cfg,其man手册说这是一个boot managerinstallation/configuration utility,通过这个工具可以修改硬盘的MBR(也就是引导扇区)。这不就是我们所需要的么?作者仔细阅读了boot0cfg的man手册,详细了解了其各项参数的意义。最后给出了本文将要说明的这种修复MBR的方案:

  1、 通过FreeBSD引导光盘启动FreeBSD的Fixit控制台,在这个控制台下可以使用各种系统工具——这些系统工具都位于引导光盘上,而引导光盘则被自动挂载到了/mnt2上,使用者也不需要修改PATH环境变量,因为PATH环境变量也被自动地做了修改,使得不用给出绝对路径就可以使用各种系统工具,这其中自然也包括boot0cfg。

  2、 通过下列命令修复MBR(也即硬盘的引导扇区),关于boot0cfg的这几个命令行选项,这里仅做简要说明,感兴趣的读者请参考[1]。以下命令需要root权限(这句是废话,通过Fixit控制台进入系统自然就是root用户):

  boot0cfg -B -v -o noupdate -t 185 ad0

  简要的说明一下:

  -B选项:指明要在硬盘上安装引导程序

  -v选项:给出详细信息

  -o noupdate选项:避免在某些平台上出现问题(这些平台带有反病毒硬件,不允许修改MBR)

  -t 185选项:启动时暂停10秒(近似值),以允许用户选择要启动的系统

  本来,像上面这样用一个boot0cfg命令将MBR修复了工作也就完成了。但是在作者的系统上还遇到了下面这样一个问题:内核启动之后,要求手动加载/dev/ad0s4a根文件系统。但是却无法加载——内核被锁住了。经过一番搏斗之后,作者发现了问题的所在:原来,在重新安装Windows的时候格式化了原来的C盘,这导致分区标号(label)发生了变化。原来的根文件系统是在/dev/ad0s4a上的,但是现在却不在这个分区上了,而变成位于/dev/ad0s3a上了。作者是通过在Fixit控制台下面使用fdisk命令发现这一变化的。知道了这一点之后,事情就很好解决了。因为我们知道FreeBSD要加载的文件系统是在/etc/fstab中指定的。因此只需要把这个文件中的所有/dev/ad0s4*改成/dev/ad0s3*就可以了(这里*表示下列字符之一:a、b、d、e、f,没有c,因为/dev/ad0s*c通常被交换分区占用了)。具体说来,作者采用的详细步骤如下:

  1、 通过FreeBSD引导光盘(或软盘)启动FreeBSD;

  2、 进入Fixit控制台;

  3、 通过下列命令挂载FreeBSD的根文件系统:

  mount /dev/ad0s3a /mnt

  4、 切换当前目录到/mnt/etc下:

  cd /mnt/etc

  5、 通过vi编辑器修改fstab文件(不能使用vim),修改的方式如上所述:

  vi fstab

  这样,就可以正常地启动FreeBSD了。就好像什么都没有发生过一样——尽管实际上有些地方已经变化了。

  4、结论

  在作者采用的这种解决方案中,修复文件系统表/etc/fstab实际上与修复MBR是没有关系的。即便是采用第一种修改方式能够启动FreeBSD内核,也必须修复文件系统表/etc/fstab。因此,比较而言,真正的工作完全是通过boot0cfg来完成的,只需一个命令就可以了。而通常采用的修改Windows下的boot.ini的方法则要麻烦一些。

  最后,两种方法更改的内容也不相同,第一种方法修改的并不是MBR(引导扇区),而是修改的NTLDR(也许可以把它称作Windows的bootloader)的配置文件boot.ini,在硬盘的引导扇区中存在的仍然是Windows的引导程序。作者采用的方法则直接修改了硬盘的MBR。

站长资讯网
. TAG: FREEBSD WINDOWS 方案 引导
推荐内容最近更新人气排行
关于我们 | 友情链接 | 网址推荐 | 常用资讯 | 网站地图 | RSS | 留言