有关多重引导
有关多重引导
应该是大四的时候吧,因为课题的需要,要学习GNU
radio这个软件,一看名字就知道GNU
xxx,八成是在Linux环境下的软件,不错确实是这样。当时还对Linux不了解,幸好寝室的好哥们也是因为某个软件(NS2),提前学习了Linux。然后就在其熏陶下装了Ubuntu系统,当时装的是双系统,没用虚拟机。
然而,装双系统还是有一定隐患的,有一次我的笔记本的xp系统的磁盘分区表和主引导记录(MBR)就被搞坏了(罪魁祸首就是xp自带的磁盘管理工具),所有文件都丢失了,而我又没有备份,当时真是心如刀绞啊。。。还好在某位牛人的指导下用DiskGenius将整个系统拯救回来。这说明只要你的系统没有低级格式化,任何损坏都有可能恢复。
一般来讲,如果你先装的windows操作系统,再装Ubuntu的话,默认使用Grub作为引导程序,他能让两个系统在开机后有选择的进入。但是一旦重新安装windows系统在当前电脑上的话,Grub就会被清除,windows只兼容自己的系统,并对Linux深恶痛绝。所以这时,就无法进入Ubuntu系统中,虽然它还在磁盘当中。
刚开始的时候在Ubuntu的liveCD环境下(可以用UltraISO之类的软件,将Ubuntu系统安装镜像做到优盘里,然后更改BIOS用优盘启动)用Grub来修复,但是Grub全是命令行的操作,再加上对它不很了解,所以没有成功。然后又在网上找到了另外一个神器Grub4dos!
那么看一看网上是怎么说的:
GRUB 是一个遵从Multiboot(多重启动)规范的启动管理程序。GRUB for DOS(GRUB4DOS)是一个以 GNU GRUB 为基础的功能强大的引导器。它可以在 DOS 和 LINUX下运行,也可以通过其他引导器来运行,还可以作为MBR运行。GRUB4DOS内置了功能完善的 BIOS 级磁盘仿真。
具体使用方法:
1. 下载Grub4dos后,解压缩。
2. 将grldr文件复制到c:\,去掉boot.ini的只读属性(该文件是隐藏文件),然后修改c:\boot.ini文件,在boot.ini的最后面加一行:c:\grldr="Start GRUB4DOS"
3. 并将boot.ini中的timeout值设置为大于0的数字,如:timeout=5,然后保存boot.ini,改回只读属性。(timeout就是开机选择系统时等待的秒数,通过修改这个文件可以改变开机启动时的默认启动系统及系统显示的名称和顺序)
这样,编辑完重新启动计算机,在启动菜单就会出现“Start
GRUB4DOS”这一项,选择该项即可进入grub4dos的环境。但是光进入Grub还不够,它需要一个menu.lst文件(要求在C:\下,也可放到其它分区根目录或其它指定目录)来告诉它都有哪些可选的系统以及这些系统在磁盘的什么位置。如果装了Ubuntu
9.10以下的版本的话,在Ubuntu系统分区(/boot/grub/menu.lst)是有这个文件的,所以这时就可以大功告成了。但是9.10以上版本grub升级为grub2,它的记录文件变成/boot/grub/grub.cfg。(虽然它们的内容大同小异,但是能不能通用我也不太清楚…这时应该怎么做我还没研究过…有待验证)。通过修改menu.lst或者grub.cfg文件可以改变系统启动项的显示顺序和默认系统(注意这两个文件也是只读的,修改之前该改变他们的权限)。
有一些稍复杂的情况,比如就像我实验室的电脑,一共有两块硬盘,一块硬盘有3个系统,xp,ubuntu9.04,和ubuntu10.10,另外一块硬盘是xp系统。而且第二块硬盘是新加的,这样硬盘的信息改变了,记录文件menu.lst里内容必须作相应的修改,否则还是不能正常进入系统。
再看看网上是怎么说的:
首先GRUB要求设备名被括在一个( )中。fd表示软盘,hd表示硬盘(不区分IDE还是SCSI)。其次设备是从0开始编号,分区也是如此,分区和设备之间用一个‘,’分开。
下面给出几个例子 :
(fd0):表示整个软盘
(hd0,1):表示BIOS中的第一个硬盘的第2个分区
所以要弄清楚你的各个系统都装在哪些磁盘的哪些分区:
启动Ubuntu光盘,选择LiveCD模式,进入之后选择进入终端,先在终端输入如下命令:
sudo fdisk -l (注意是小写的L,不是数字的1)
比如我的终端显示的是这样的:
Disk /dev/sda: 122.9 GB, 122942324736
bytes
255 heads, 63 sectors/track, 14946
cylinders
Units = cylinders of 16065 * 512 =
8225280 bytes
Disk identifier: 0xf0b1ebb0
Device Boot Start End Blocks
Id System
/dev/sda1 *
1 3533 28378791
7 HPFS/NTFS
/dev/sda2 3534 14946
91674922+ f W95 Ext'd (LBA)
/dev/sda5 3534 4963
11486443+ b W95 FAT32
/dev/sda6 4964 8880
31463271 7
HPFS/NTFS
/dev/sda7 8881 12797
31463271 7 HPFS/NTFS
/dev/sda8 12798 14946
17261811 b W95 FAT32
Disk /dev/sdb: 160.0 GB, 160041885696
bytes
255 heads, 63 sectors/track, 19457
cylinders
Units = cylinders of 16065 * 512 =
8225280 bytes
Disk identifier: 0x624aa2e0
Device Boot Start End Blocks
Id System
/dev/sdb1 *
1 2049 16458561
7 HPFS/NTFS
/dev/sdb2 2050 19458
139831424+ f W95 Ext'd (LBA)
/dev/sdb5 2050 7093
40515898+ 7 HPFS/NTFS
/dev/sdb6 7094 8384
10369926 83 Linux
/dev/sdb7 8385 8448 514048+
82 Linux swap / Solaris
/dev/sdb8 8449 13381
39618326 7 HPFS/NTFS
/dev/sdb9 13381 19203
46770176 83 Linux
/dev/sdb10 19204 19458
2041856 82 Linux swap / Solaris
Disk /dev/sdc: 2076 MB, 2076180480 bytes
255 heads, 63 sectors/track, 252
cylinders
Units = cylinders of 16065 * 512 =
8225280 bytes
Disk identifier: 0xcad4ebea
是的,第一块硬盘是sda,第二块硬盘是sdb,第三块sdc,以此类推…第一块硬盘的第一块分区是sda1,第二个分区是sda2,等等…ID为83的是ubuntu的主分区,根据这个原则修改menu.lst文件即可.
但是,实际上原来的menu.lst文件或者grub.cfg文件都是由grub自动生成的(只是我是在弄不明白grub的命令不得已才自己来改文件的)。Grub博大精深,而我只能不求甚解啊。。。虽然网上这方面的资料很多,但是也很乱,而且很多方法不是普适的,我的方法同样也不是普适的,还要具体分析才行。
其实给我的电脑做多重引导,是很久以前的事了,之所以写这篇日志,一是今天又小改了一下引导;二是怕以再后忘了怎么改,所以记录下来。我的水平还是很菜的那种,但是不能因为菜就不总结,我清楚的记得我的导师曾跟我说过,他带的最好的学生都是最会总结的学生。