[合集]多系统安装和硬盘分区知识
时间:2007-01-04 10:28:50
来源: 作者:whsong 点击:次 出处:技术无忧
关键字:[合集
在机器里安装FreeBSD,LINUX和WindowsXP操作系统 越来越大的硬盘让人们有了更多的选择,一些玩LINUX的人也开始尝试更多的操作系统,使用UNIX的人也开始尝试使用LINUX,而WindowsXP在做某些工作还是比较方便,本文就是基于这样一个想法,让三种系统共存在一个硬盘里,并很好的工作。本文的主要探讨的内容是硬盘的分区和grub配置安装的一些要点和基础知识的讲解,并不太深入细节,希望本文对大家有帮助。
1.在阅读本文之前,我们有几个约定:
引导程序选用GRUB--这个新的引导程序的强大和灵活不用我来说了,知道的的就知道了,不知道它的建议去找找它的资料,然后把LILO给换了。:)它的功能是我选用它的原因。
我们使用一个硬盘作例子,如果你有多个硬盘,你需要更改文中的一些硬盘名参数。
最后一个约定很重要,那就是你用本文作指导时,请先备份你的资料,尽管我已经很小心并试验了全文中的各个部分,但是仅是在我的机上成功实现,我并不担保在你的机上成功实现。
2.我们先来明确几个概念:
一块硬盘最多可以分成四个主分区,原因是在硬盘的起始引导扇区MBR中只能记录四个分区的信息,其中一个比较让从windows下转过来人容易误解的是扩展分区也是属于一个MBR主记录的分区之一。这也就是说,如果你把一个硬盘分四个主分区,那么就不能分扩展分区了;如果你要分一个扩展分区,那你就只能最多分三个主分区了。
因此,我们只能分四个主分区,并且只有一个分区是活动的,它是系统开机读入MBR之后默认访问的分区,从这个分区的引导扇区读入引导该分区操作系统的信息并引导该系统,但是像LINUX的lilo和GRUB进驻MBR后,MBR的引导方式又多了一种,那就是可以直接指定一个分区,并从中加载指定分区的引导扇区并引导这个分区的操作系统。
顺带说一下扩展分区,众所周知,可以在扩展分区里划分多个逻辑分区。扩展分区的信息由MBR记录,而逻辑分区的信息则是由扩展分区的引导扇区记录的。
这一部分很重要,下面的将重点使用这部分知识:
在LINUX中,硬盘的分区是这样命名.
如果你只有一个硬盘,并把它装在IDE1上,那么你的硬盘名在LINUX中称为hda,在硬盘中的分区规则则是:从1开始划分主分区(注意,这里的主分区包括了扩展分区,下面提到的主分区也是如此理解),比如,你在硬盘里划分了三个主分区,第一个称1,第二个称2,第三个称3,以此类推。那逻辑分区呢?因为一块硬盘只能有四个主分区,那命名规则中把1,2,3,4分给了主分区,那么逻辑分区只能从5开始命名,这就是为什么我们看到逻辑分区总是从5开始的原因了。好了,这样,我们就可以唯一的给我们的硬盘命名了,举个例子,你的第一块硬盘的第一个分区称为hda1,第一块硬盘的第二个分区称为hda2........,第二块硬盘的第一个分区称为hdb1,第三块硬盘的第二个分区称hdc3,以此类推。但是如果你的第一块硬盘分二个区,第二个分区(hda2)是扩展分区,并在扩展分区里分了两个逻辑分区,那么你的命名方式将是这样的:
第一分区为:hda1
第二分区(即扩展分区):hda2
第二分区第一逻辑分区:hda5
第二分区第二逻辑分区:hda6
这时你用fdisk -l,查看分区信息时将会有类似如下显示:
Device Boot Start End Blocks Id System
/dev/hda1 * 1 638 5124703+ 83 Linux
/dev/hda2 639 7476 39560062+ 5 Extended
/dev/hda5 7477 2615 514048+ 82 Linux swap
/dev/hda6 2616 3890 10241406 83 Linux
grub的硬盘命名方式和LINUX中稍微有所不同:
对IDE1主盘,IDE1从盘,IDE2主盘,IDE2从盘命名为hd0,hd1,hd2,hd3,也就是用0-3代替了a-d,对每个硬盘里的分区用也是以0开始的数字代替了原本以1开始的LINUX下的命名,而扩展分区的逻辑分区是从4开始命名的,这样,在LINUX下的命名在GRUB可是要减1了,由上举个例子,第三个硬盘的第二个分区将命名为hd2,1上述的例子中的分区对应如下:
/dev/hda1 ------- (hd0,0)
/dev/hda2 ------- (hd0,1)
/dev/hda5 ------- (hd0,4)
/dev/hda6 ------- (hd0,5)
OK,所有的准备知识都已经讲完,要是你对以上内容还有疑问,建议找找其他的相关内容参阅。
3.正式的安装:
3.1 分区考虑:
安装的难点是FreeBSD和WindowsXP都必需要安装在主分区内,这样就需要我们对硬盘的分区有所考虑。
在一块40G的硬盘里作为例子,可以更加的说明问题:
既然FreeBSD和WindowsXP都必须要安装在主分区内,而LINUX可以安装在扩展分区中,也可以安装在主分区中。那么,这意味着我们必须要分至少三个主分区,其中一个为扩展分区,另外两个分区分别给FreeBSD和WindowsXP,扩展分区里的逻辑里安装LINUX。但我不想厚此薄彼,干脆就分四个主分区,其中包括了一个扩展分区,里面分两个逻辑分区,这样,我们的分区方案(以LINUX的命名方式描述)就定下来了:
/dev/hda1 第一主分区
/dev/hda2 第二主分区
/dev/hda3 第三主分区
/dev/hda4 第四主分区(即扩展分区)
/dev/hda5 扩展分区第一逻辑分区
/dev/hda6 扩展分区第二逻辑分区
3.2 对硬盘格式化,使用fdisk进行低级格式化(即常说的分区):
我这里选用Dos下的fdisk,你也可以使用其他的分区工具,比如LINUX下的fdisk,但建议只用一种分区工具对硬盘分区,因为使用多种分区工具的话可能会产生兼容上问题,而使分区表无法使用。你可以根据自己的实际需要划分分区的大小。但有一个比较好的建议是在扩展分区里划分一个小的大约是内存的大小两倍的逻辑分区给LINUX用作SWAP分区,而活动分区随便,不作要求,这全得益于GRUB的引导方式不是只能从活动分区引导操作系统,而是它能定位特定分区并启动该分区的操作系统。这里不打算详细写出分区步骤,这方面的参考资料太多了,用google搜一下,跳出的网页足以让你看上一个星期。(夸张了一点点)
3.3 安装步骤的选择:
可以先安装FreeBSD或是Windows,再安装LINUX,原因是LINUX现在都有自带GRUB的安装,我们要使用GRUB引导三个系统,就可以在最后安装LINUX时把GRUB安装在MBR上,而不会给FreeBSD和Windows的引导程序覆盖掉。在这里我选择先安装FreeBSD.
3.3.1 安装FreeBSD
在FreeBSD下将主分区称为SLICE,命名方式IDE第一块硬盘里的四个主分区称为wd0s1,wd0s 2,wd0s3,wd0s4。
LINUX里的命名方式来述说,把FreeBSD放在/dev/hda1分区里,用光盘安装,插入FreeBSD安装盘,光盘启动之后有一些交互的安装,安装指导请参阅其他相关资料,到了分区界面下时,选择wd0s1安装FreeBSD,然后按T改变这个分区的类型,165是FreeBSD的分区类型FFS的代号,然后按w写入完成,在选择引导程序里,可以选:BOOTMANAGER,最后退出,接下来安装下面的步骤,此处省略。
3.3.2 安装WindowsXP
这个步骤要说明的就是把它安装在第二个主分区,即/dev/hda2中,在分区界面里选择第二个分区,建议使用FAT32格式化该分区,这样可以使LINUX可读可写该分区,用NTFS则在LINUX下不可写入,只能读。下面的安装步骤都不用说了,是地球人都会按NEXT了。
3.3.3 安装LINUX并配置GRUB
这个步骤安装LINUX,安装LINUX的文章更多,有许多非常优秀的文章,如果你还不会安装LINUX,可以先去看这些文章再读本文,我这里只讲一些要点,在分区界面里,把第三个分区,即/dev/hda3用做LINUX的安装分区,同时你在扩展分区里划了准备用作SWAP的分区的话,记得把它一起加上格式化。OK!!,可以了,在下面的步骤里,你要选择把GRUB安装到MBR中,必须要这样做。安装在其他地方是不可以用GRUB来引导的,可能安装这些时GRUB并不能识别你在第一分区的FreeBSD,或者在你硬盘里的其他一些操作系统,不要紧,我们可以对GRUB做一些修改,使它引导这些操作系统。在这里给出在本例中的GRUB配置。
一般来说,Windows是可以被检测到的,但FreeBSD可能会有些问题。
在GRUB的配置中,主要是对/etc/grub.conf作修改:
可能安装好LINUX后的/etc/grub.conf文件和下面的很类似:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,5)
# kernel /boot/vmlinuz-version ro root=/dev/hda6
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,2)/boot/grub/splash.xpm.gz
title Linux (2.4.20-8)
root (hd0,2)
kernel /boot/vmlinuz-2.4.20-8 ro root=LABEL=/1
initrd /boot/initrd-2.4.20-8.img
title Dos
rootnoverify (hd0,1)
chainloader +1
我对主要的行作一些解释,以#打头的是注释行,可以不用理它。
default=0 是指默认选项是第一个title标记的操作系统将引导,这里是LINUX
timeout=10 指十秒之内用户没有作出选择的话,将以默认的选项操作系统引导
title Linux (2.4.20-8) 这行是title标记,后面的内容在GRUB菜单中被显示
root (hd0,2) 这行是指从哪个分区引导操作系统,即GRUB定位分区操作系统
kernel /boot/vmlinuz-2.4.20-8 ro root=LABEL=/1 这行是从指定分区中给出内核的路径,以便引导系统
rootnoverify (hd0,1)和chainloader +1表示从特定分区使用链式的引导方式,本例来说即GRUB定位hd0,1这个分区里,找到该分区的操作系统的引导程序,启用它,让它来引导该分区的操作系统。一般来说,windows系列就是这样引导的。
另外我们这里title Dos标记引导的是WindowsXP了。
现在这个40G的硬盘里的三个操作系统可以引导两个了(如果你的WindowsXP不能引导的话,把/etc/grub.conf改成上面类似的样子,再进行下面的步骤);
接下来要修改/etc/grub.conf以使它可以引导FreeBSD,
加入下面的内容到/etc/grub.conf中:
title FreeBSD
rootnoverify (hdx,y)
chainloader +1
要是你理解了上面以Dos为标记的引导块的语句,就不难理解这个FreeBSD的引导块的语句了。上面的意思是定位到hdx,y分区(本例中为hd0,0,这正是我们安装FreeBSD的分区),然后启用该分区的引导程序,由该引导程序来引导FreeBSD。
还有一种方法也可以实现FreeBSD的引导,你也可以尝试一下,但不一定都成功。
加入以下几行至/etc/grub.conf
titile FreeBSD
root(hd0,x,y)
kernel /boot/loader
其中,x为你的FreeBSD的分区,y为FreeBSD/所在的SLICE.
OK!保存修改。如果一切顺利的话,重新启动机器,将看见有三个可选项,LINUX,FreeBSD和Dos,试着进入每个系统,所有配置正确的话将看见每个系统都可以进入。如果你发现有某个系统不能进入,请找到一些GRUB的资料,它将给你详细的指导。
如果你对本文的任何错误或是改进,请和我联系huangyiddle@21cn.com,本人将非常的感激。
作者:kiron
来自:www.linuxsir.com
关于硬盘分区以及引导 ------by vagrantx
CODE
分区表的结构:
硬盘的主分区信息(这只是分区信息的一部分,如果没有逻辑分区的话)是在硬盘的第一个sector上面,对于绝大多数硬盘,每一个sector有512个字节,从第一个字节到第446个字节,这一部分空间就是正常情况下MBR所在地,从第一项扇区的末字节向前数66个字节,除去最后两个字节,这一部分空间就事所谓的主分区表所在地,以每16个字节为一个表项,可以有四个表项,也就是说,一块硬盘最多只能分出四个主分区,这个时候,你就不可能再有多于四个的分区了。但是按照window的分区规则,我们可以把其中一个表项拿来记录这个分区作为扩展分区,然后在在扩展分区所指示的扩展分区开始扇区处建立逻辑分区信息,该信息也是记录在扇区的末尾处,一共两个表项,同上每个表项16个字节,第一个记录本逻辑分区的信息,第二个记录下一个逻辑分区的信息,然后在下一个逻辑分区的第一个扇区末尾处又有两个表的分区信息
.......
依此类推,直到你的最后一个逻辑分区。
扩展分区这种分区规则,并不是所有的操作系统都支持的。
主分区表由四个分区项构成, 每一项的结构如下:
BYTE State : 分区状态, 0 = 非启动分区, 0x80 = 启动分区(这占用一个字节空间)
BYTE StartHead : 分区起始磁头号
WORD StartSC : 分区起始扇区和柱面号, 底字节的低6位为扇区号,
高2位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
BYTE Type : 分区类型, 如 0x0B = FAT32, 0x83 = Linux 等,
00 表示此项未用
BYTE EndHead : 分区结束磁头号
WORD EndSC : 分区结束扇区和柱面号, 定义同前
DWORD Relative : 在线性寻址方式下的分区相对扇区地址
(对于基本分区即为绝对地址)
DWORD Sectors : 分区大小 (总扇区数)
第一个sector最后的两个标志“55 AA”是分区表的结束标志,如果这两个标志被修改,则系统引导时将报告找不到有效的分区表。
在标准MBR的情况下, 系统启动过程主要由一下几步组成(以硬盘启动为例):
1. 开机 :-)
2. BIOS 加电自检 ( Power On Self Test -- POST )
内存地址为 0ffff:0000
3. 将硬盘第一个扇区 (0头0道1扇区, 也就是Boot Sector)
读入内存地址 0000:7c00 处.
4. 检查 (WORD) 0000:7dfe (也就是第一个扇区的最后两个字节)是否等于 0xaa55, 若不等于
则转去尝试其他启动介质, 如果没有其他启动介质则显示
"No ROM BASIC" 然后死机.
5. 跳转到 0000:7c00 处执行 MBR 中的程序.
6. MBR 首先将自己复制到 0000:0600 处, 然后继续执行.
7. 在主分区表中搜索标志为活动的分区. 如果发现没有活动
分区或有不止一个活动分区, 则停止.
8. 将活动分区的第一个扇区读入内存地址 0000:7c00 处.
9. 检查 (WORD) 0000:7dfe 是否等于 0xaa55, 若不等于则
显示 "Missing Operating System" 然后停止, 或尝试
软盘启动.
10. 跳转到 0000:7c00 处继续执行特定系统的启动程序.
11. 启动系统 ...
以上步骤中 2,3,4,5 步是由 BIOS 的引导程序完成. 6,7,8,9,10
步由MBR中的引导程序完成.
如果还成了其它的引导管理器如lilo,MBR也就是lilo的主体程序了,在上面的第七步的时候lilo就将自己的配置文件读进来,显示一个供给用户的选择菜单,然后根据用户的选择,决定跳转到哪个分区的第一个扇区(1,在这个时候还需不需要再次利用分区表来定位,我认为不是必须的,因为这个东西是灵活的,你可以把它作为你的配置文件中的内容,至于lilo是不是这样实现的我不是很清楚,哪位研究过lilo的朋友可以在这里给大家介绍介绍;2,在这个时候lilo把用户所选择的启动分区相对应的表项的第一个字节改为了80H,以前的激活表项第一个字节改为0,其实我个人认为,如果要实现一个引导管理器而言,这个也不一定是必须的,我认为可以这样的原因就是前面一个理由,但是标准MBR是绝对不允许有两个以上表项的第一个字节都是80H的,我所见过的引导管理器也都没有让两个表项同时显示激活,我想这个或许是遵循标准或者是与操作系统或是杀毒软件兼容的原因吧)
对于这个问题,某个具体的引导管理器如何操作的,可以用磁盘编辑器看一看,最终目的只有一个,就是让操作系统的内核加载到内存中间。然后的事情就归操作系统开发人员决定了。
访问技术无忧网,软硬件通吃保你技术无忧!网址http://www.pc51.net












文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面