附录 C. 磁盘分区简介
磁盘分区长期以来一直是个人计算机领域中的一项基本必备知识。然而,由于越来越多的人开始购买带有预安装的操作系统的计算机,相对来说,只有极少人理解分区的原理。本章试图解释分区的原因以及用法,从而使你能够尽可能简便轻松地安装红帽企业 Linux。 如果你对磁盘分区已有足够的了解,你可以直接跳到第 C.1.4 节来阅读关于如何腾出磁盘空间来准备红帽企业 Linux 安装的信息。本节还将讨论 Linux 系统使用的分区命名方案,与其它操作系统共用磁盘,以及其它相关课题。 C.1. 硬盘基本概念硬盘功能极为简单 — 它们被用来可靠地储存及检索数据。 在讨论磁盘分区之类的问题时,了解一些基础硬件知识至关重要。不幸的是,这又极容易使人陷入小节,忽略全局。因此,本附录使用了一种简化的磁盘驱动器图表来解释磁盘分区后的情形。图 C-1显示了一个崭新的、未曾使用的磁盘驱动器。 图 C-1. 未使用过的磁盘驱动器 没什么可看的,是不是?不过,若我们仅在一个最基本的层次上讨论磁盘驱动器,此图表已足够。假设我们要在这个磁盘驱动器上面储存一些数据,就目前而言,这还不行。我们首先要做一些准备工作… C.1.1. 不是你写入什么,而是你怎么写入有经验的计算机用户可能对此心中有数。我们需要格式化(format)这个驱动器。格式化又称“制作文件系统(file system)”,它是一个将信息写入驱动器,在未经格式化的驱动器内的空白空间中建立秩序的过程。 图 C-2. 有文件系统的磁盘驱动器 如图 C-2所暗示,文件系统所建立的秩序牵涉到一些利弊得失: · 驱动器上极小的一部分可用空间被用来储存与文件系统有关的数据,这可以被视作管理费用。 · 文件系统将剩余空间分割成小块的,大小统一的段。在 Linux 中,这些段被称为块(block)。 [1] 由于文件系统带来创建目录和文件的可能性,以上牺牲可以被看作所需付出的一个很小的代价。 还有一点值得注意的是,统一通用的文件系统并不存在。如图 C-3所示,一个磁盘驱动器上可以有许多不同类型的文件系统。你可能也猜得到,不同类型的文件系统通常是不兼容的。这意味着,支持某种文件系统(或几种相关的文件系统类型)的操作系统可能不支持其它类型的文件系统。不过,最后那句话并非是一个不折不扣的定理。例如,红帽企业 Linux 支持的文件系统类型比较广泛(包括许多其它操作系统常用的文件系统),从而使不同文件系统之间的数据交换变得容易多了。 图 C-3. 含有不同文件系统的磁盘驱动器 当然,将文件系统写入磁盘仅仅是一个开端。这个过程的目标实际上是储存并且检索数据。写入一些文件后,让我们再来看一看磁盘。 图 C-4. 已写入数据的磁盘驱动器 如图 C-4所示,某些先前空白的块现在已被写入数据。然而,单看以上图示,我们无法判定在这个驱动器上究竟有多少个文件。可能少到只有一个文件,也可能有很多文件,因为所有的文件至少要使用一个块,有些需要几个块。还有一个要注意的要点是,所使用的块不必构成一处连续的区域;使用的和未使用的块可以交错散布。这就是通称的碎段(fragmentation)。碎段会对试图改变已存分区大小有一定的影响。 如同许多与计算机相关的科技,磁盘驱动器自问世后一直在不断地变化。特别是,它们越来越大。不是实际尺寸越来越大,而是它们储存信息的能力越来越大。这种新增的容量导致了磁盘驱动器使用方法的根本改变。 C.1.2. 分区:将一个驱动器变成多个驱动器由于磁盘驱动器容量的不断增大,一些人开始质问将所有格式化的空间并为一大块是否明智。这一类想法的动机有哲学上的,也有技术上的。从哲学角度上讲,一个较大的磁盘驱动器所提供的额外空间若超过了一定的大小似乎只会造成更多的杂乱无章。从技术角度上讲,某些文件系统不是为支持大于一定容量的磁盘驱动器而设计的。或者,某些文件系统可能会支持拥有巨大容量的较大的驱动器,但是由文件系统跟踪文件所强加于上的管理费用也随之变得过高过大。 解决这个问题的办法是将磁盘划分为分区 (partition)。每一分区都可以像一个独立的磁盘一样被访问。这是通过添加分区表(partition table)来做到的。
图 C-5. 带有分区表的磁盘驱动器 如图 C-5所示,分区表被分为四个部分或四个“主分区”。主分区是在硬盘驱动器上只能包含一个逻辑驱动器(或部分)的分区。每个部分都装有定义单个分区所必需的信息,这意味着分区表定义的分区不能超过四个。 每个分区表项目都包含着该分区的几项重要的特征: · 在磁盘上分区开始和结束的地点(起止点) · 分区是否“活跃” · 分区的类型 让我们来仔细查看一下每一个特征。起止点实际上定义了分区的大小及在磁盘上的位置。“活跃”标志是被某些操作系统的引导装载程序所用。换一句话说,标为“活跃”的分区上的操作系统将会被引导。 分区类型可能有些不易分辨。 类型是标识分区将会被如何使用的数字。如果这句话听起来有些笼统,那是因为分区类型术语本身也有些笼统。某些操作系统用分区类型来代表一种指定的系统类型,或将分区标为与某个操作系统相关联的分区,或用来指明该分区包含着可引导的操作系统,或是以上三者的结合。 到了这一步,你可能会在猜想这些附加的复杂性通常是怎样被使用的。实例请见图 C-6。 图 C-6. 只有一个分区的磁盘驱动器 在许多情况下,整个磁盘上只有一个分区,基本上是重复分区以前所使用的方法。分区表内只有一个项目,它指向分区的起点。 我们把此分区标为“DOS”类。虽然它只是列在表 C-1之中的几种可能的分区之一,但也足以达到本附录的讨论目的。 表 C-1中包括了一些常用的(和罕见的)分区类型,以及它们的十六进制数值。
表 C-1. 分区类型 C.1.3. 分区内的分区 — 扩展分区概述经过一段时间后,四个分区很明显将不够用。随着磁盘驱动器的不断增大,配置了四个相当大的分区后仍有剩余空间的可能性会越来越大。我们需要有一些创建更多分区的方法。 请进入扩展分区的世界。在表 C-1中你可能已注意到一种分区类型是“扩展”(Extended)。它就是位于扩展分区核心的分区类型。 当一个分区被建立,其类型被设为“扩展”时,扩展分区表也被创建。简而言之,扩展分区就像一个独立的磁盘驱动器 — 它有自己的分区表,该表指向一个或多个分区——它们现在被称为逻辑分区(logical partitions),与四个主分区(primary partitions) 相对,扩展分区的分区表完全包含在扩展分区之内。图 C-7显示了一个磁盘驱动器,其中有一个主分区和一个包含两个逻辑分区的扩展分区(以及一些未分区的空闲空间)。 图 C-7. 带有扩展分区的磁盘驱动器 如图表中所暗示,主分区与逻辑分区之间有一个区别 — 主分区只能有四个,但是可以存在的逻辑分区数量却无固定限制。不过,鉴于 Linux 进入分区的方式,你应该避免在一个磁盘驱动器上定义 12 个以上逻辑分区。 现在,我们已经大致讨论了分区概念,让我们来看一看如何将这些知识应用到安装红帽企业 Linux 上。 C.1.4. 为红帽企业 Linux 腾挪空间当你试图为你的硬盘重新分区时,有三种可能的情况: · 有可用的未分区的空闲空间 · 有可用的未使用过的分区 让我们依次来看一看每一种情况。
C.1.4.1. 使用未经分区的空闲空间在这种情况下,已定义的分区没有扩展到整个硬盘,它没有包括那些不属于任何定义分区的未分配的空间。图 C-8显示了可能出现的情境。 图 C-8. 带有未分区的空闲空间的磁盘驱动器 在图 C-8中,1 代表带有未被拨发的空间的未定义分区,2 代表带有已被拨发的空间的已定义分区。 如果细想一下,你就会认识到一个未经使用的硬盘也属这种类型。唯一的区别是后者的全部空间都不属于任何定义的分区。 接下来,我们将讨论一种更普遍的情况。 C.1.4.2. 使用一个未使用过的分区中的空间在这种情况下,可能有一个或多个分区你已不再使用。可能你过去用过其它的操作系统,而你拨给它的分区似乎已不再被使用。图 C-9显示了这种情况。 图 C-9. 带有未使用分区的磁盘驱动器 在图 C-9中,1 代表未使用的分区,2 代表为 Linux 重新拨发未使用过的分区。 如果你发现自己处于这种情况,你可以使用那些拨给未使用分区的空间。首先,你应该删除该分区,然后在其上创建相应的 Linux 分区。你可以在安装过程中删除未用分区,然后再手工创建新分区。 C.1.5. 分区命名方案Linux 使用字母和数字的组合来指代磁盘分区。这可能有些使人迷惑不解,特别是如果你以前使用“C 驱动器”这种方法来指代硬盘及它们的分区。在 DOS/Windows 的世界里,分区是用下列方法命名的: · 每个分区都被检查过以便判定它是否可被 DOS/Windows 读取。 · 如果分区类型是兼容的,它会被指派给一个“驱动器字母”。驱动器字母从“C”开始,然后依据要标签的分区数量而按字母顺序推移。 · 驱动器字母可以用来指代那个分区,也可以用来指带分区所含的文件系统。 红帽企业 Linux 使用一种更灵活的命名方案。它所传达的信息比其它操作系统采用的命名方案更多。该命名方案是基于文件的,文件名的格式类似 /dev/xxyN。 下面说明了解析分区命名方案的方法: /dev/ 这个字串是所有设备文件所在的目录名。因为分区位于硬盘上,而硬盘是设备,所以这些文件代表了在/dev/上所有可能的分区。 xx 分区名的前两个字母标明分区所在设备的类型。通常是 hd (IDE 磁盘)或 sd(SCSI 磁盘)。 y 这个字母标明分区所在的设备。例如,/dev/hda(第一个 IDE 磁盘)或 /dev/sdb(第二个 SCSI 磁盘) N 最后的数字代表分区。前四个分区(主分区或扩展分区)是用数字从 1 排列到 4。逻辑分区从 5 开始。例如,/dev/hda3 是在第一个 IDE 硬盘上的第三个主分区或扩展分区;/dev/sdb6 是在第二个 SCSI 硬盘上的第二个逻辑分区。
请切记以上信息;它会帮助你在设置红帽企业 Linux 所需分区时更容易地理解许多步骤。 C.1.6. 磁盘分区以及其它操作系统如果你的红帽企业 Linux 分区将会与其它操作系统所用的分区共享一个硬盘,多数情况下,应该没什么问题。不过,某类 Liunx 和其它操作系统的组合需要特别加以注意。 C.1.7. 磁盘分区和挂载点令许多 Linux 的新用户感到困惑的一个地方是各分区是如何被 Linux 操作系统使用及访问的。它在 DOS/Windows 中相对来说较为简单。每一分区有一个“驱动器字母”,你用恰当的驱动器字母来指代相应分区上的文件和目录。 这与 Linux 处理分区及磁盘贮存问题的方法截然不同。其主要的区别在于,Linux 中的每一个分区都是构成支持一组文件和目录所必需的贮存区的一部分。它是通过挂载(mounting)来实现的,挂载是将分区关联到某一目录的过程。挂载分区使起始于这个指定目录(通称为挂载点,mount point)的贮存区能够被使用。 例如,如果分区 /dev/hda5/ 被挂载在 /usr/ 上,这意味着所有在 /usr/ 之下的文件和目录在物理意义上位于 /dev/hda5/ 上。因此文件 /usr/share/doc/FAQ/txt/Linux-FAQ 被保存在 /dev/hda5/上,而文件 /etc/X11/gdm/Sessions/Gnome 却不是。 继续以上的例子,/usr/ 之下的一个或多个目录还有可能是其它分区的挂载点。例如,某个分区(假设为,/dev/hda7/)可以被挂载到 /usr/local/ 下,这意味着 /usr/local/man/whatis 将位于 /dev/hda7 上而不是 /dev/hda5 上。 C.1.8. 多少个分区?到了红帽企业 Linux 安装筹备工作的这一步,你应该开始考虑一下你的新操作系统所要使用的分区数量及大小。“多少个分区”一直是 Linux 社区中的一个具有争议性的问题,在没有定论之前,可以说可用的分区布局与争论这一问题的人一样多。 鉴于上述情况,除非另有原因,我们推荐你至少应该创建以下几个分区:swap、/boot/(/boot/ 文件只对其它系统必要,对 iSeries 系统没有必要),PPC PReP Boot、和 /(根)分区。注意,新的虚拟磁盘可以在 OS/400 V5R2 和更新的版本上被动态添加。 详情请参阅第 2.14.4 节。 注
2008.09.13 =====================================================================
扩展分区和逻辑分区:
但是fat16分区格式有一个最大的缺点,那就是硬盘的实际利用效率低。因为在dos和windows系统中,磁盘文件的分配是以簇为单位的,一个簇只分配给一个文件使用,不管这个文件占用整个簇容量的多少。而且每簇的大小由硬盘分区的大小来决定,分区越大,簇就越大。例如1gb的硬盘若只分一个区,那么簇的大小是32kb,也就是说,即使一个文件只有1字节长,存储时也要占32kb的硬盘空间,剩余的空间便全部闲置在那里,这样就导致了磁盘空间的极大浪费。fat16支持的分区越大,磁盘上每个簇的容量也越大,造成的浪费也越大。所以随着当前主流硬盘的容量越来越大,这种缺点变得越来越突出。为了克服fat16的这个弱点,微软公司在win 97操作系统中推出了一种全新的磁盘分区格式fat32。
格式化是在磁盘中建立磁道和扇区,磁道和扇区建立好之后,电脑才可以使用磁盘来储存数据。
http://www.360doc.com/content/10/1001/21/1317564_57824803.shtml
英文:http://en./wiki/Master_Boot_Record#Disk_partitioning
2008.10.12 ====================================================================== 前言:因为前面贴子说到的做硬盘数据恢复一事,特地恶补了一个有关硬盘分区的知识,下面的内容可以说是我作的笔记(大部分记载在我的google notebook)的整理稿,其中有很多是直接从别人的文章中抄袭过来的(嘿嘿,其实就是拷贝过来的,各位应该理解,不能告我侵权哦^~^)。但其中有很多却是我自己的心得(大家要认真体会)。因此,我不能算是作者,只能算是编译者,特此说明。
2008.10.26 ====================================================================== 硬盘是现在计算机上最常用的存储器之一。我们都知道,计算机之所以神奇,是因为它具有高速分析处理数据的能力。而这些数据都以文件的形式存储在硬盘里。不过,计算机可不像人那么聪明。在读取相应的文件时,你必须要给出相应的规则。这就是分区概念。
分区从实质上说就是对硬盘的一种格式化。当我们创建分区时,就已经设置好了硬盘的各项物理参数,指定了硬盘主引导记录(即Master Boot Record,一般简称为MBR)和引导记录备份的存放位置。而对于文件系统以及其他操作系统管理硬盘所需要的信息则是通过以后的高级格式化,即Format命令来实现。面、磁道和扇区硬盘分区后,将会被划分为面(Side)、磁道(Track)和扇区(Sector)。需要注意的是,这些只是个虚拟的概念,并不是真正在硬盘上划轨道。
先从面说起,硬盘一般是由一片或几片圆形薄膜叠加而成。我们所说,每个圆形薄膜都有两个“面”,这两个面都是用来存储数据的。按照面的多少,依次称为0面、1面、2面……由于每个面都专有一个读写磁头,也常用0头(head)、1头……称之。按照硬盘容量和规格的不同,硬盘面数(或头数)也不一定相同,少的只有2面,多的可达数十面。各面上磁道号相同的磁道合起来,称为一个柱面(Cylinder)。
上面我们提到了磁道的概念。那么究竟何为磁道呢?由于磁盘是旋转的,则连续写入的数据是排列在一个圆周上的。我们称这样的圆周为一个磁道。如果读写磁头沿着圆形薄膜的半径方向移动一段距离,以后写入的数据又排列在另外一个磁道上。根据硬盘规格的不同,磁道数可以从几百到数千不等;一个磁道上可以容纳数KB的数据,而主机读写时往往并不需要一次读写那么多,于是,磁道又被划分成若干段,每段称为一个扇区。一个扇区一般存放512字节的数据。扇区也需要编号,同一磁道中的扇区,分别称为1扇区,2扇区……
计算机对硬盘的读写,处于效率的考虑,是以扇区为基本单位的。即使计算机只需要硬盘上存储的某个字节,也必须一次把这个字节所在的扇区中的512字节全部读入内存,再使用所需的那个字节。不过,在上文中我们也提到,硬盘上面、磁道、扇区的划分表面上是看不到任何痕迹的,虽然磁头可以根据某个磁道的应有半径来对准这个磁道,但怎样才能在首尾相连的一圈扇区中找出所需要的某一扇区呢?原来,每个扇区并不仅仅由512个字节组成的,在这些由计算机存取的数据的前、后两端,都另有一些特定的数据,这些数据构成了扇区的界限标志,标志中含有扇区的编号和其他信息。计算机就凭借着这些标志来识别扇区。硬盘的数据结构 在上文中,我们谈了数据在硬盘中的存储的一般原理。为了能更深入地了解硬盘,我们还必须对硬盘的数据结构有个简单的了解。硬盘上的数据按照其不同的特点和作用大致可分为5部分:MBR区、DBR区、FAT区、DIR区和DATA区。
我们来分别介绍一下:
1、MBR区
MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁道0柱面1扇区。不过,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节交给了DPT(Disk Partition Table硬盘分区表),最后两个字节“55,AA”是分区的结束标志。这个整体构成了硬盘的主引导扇区。
主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。MBR是由分区程序(如Fdisk.exe)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存。
下面,我们以一个实例让大家更直观地来了解主引导记录:
例:80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00 在这里我们可以看到,最前面的“80”是一个分区的激活标志,表示系统可引导;“01 01 00”表示分区开始的磁头号为01,开始的扇区号为01,开始的柱面号为00;“0B”表示分区的系统类型是FAT32,其他比较常用的有04(FAT16)、07(NTFS);“FE BF FC”表示分区结束的磁头号为254,分区结束的扇区号为63、分区结束的柱面号为764;“3F 00 00 00”表示首扇区的相对扇区号为63;“7E 86 BB 00”表示总扇区数为12289622。
2、DBR区
DBR(Dos Boot Record)是操作系统引导记录区的意思。它通常位于硬盘的0磁道1柱面1扇区,是操作系统可以直接访问的第一个扇区,它包括一个引导程序和一个被称为BPB(Bios Parameter Block)的本分区参数记录表。引导程序的主要任务是当MBR将系统控制权交给它时,判断本分区跟目录前两个文件是不是操作系统的引导文件(以DOS为例,即是Io.sys和Msdos.sys)。如果确定存在,就把它读入内存,并把控制权 交给该文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数,分配单元的大小等重要参数。DBR是由高级格式化程序(即Format.com等程序)所产生的。
3、FAT区
在DBR之后的是我们比较熟悉的FAT(File Allocation Table文件分配表)区。在解释文件分配表的概念之前,我们先来谈谈簇(Cluster)的概念。文件占用磁盘空间时,基本单位不是字节而是簇。一般情况下,软盘每簇是1个扇区,硬盘每簇的扇区数与硬盘的总容量大小有关,可能是4、8、16、32、64…… 同一个文件的数据并不一定完整地存放在磁盘的一个连续的区域内,而往往会分成若干段,像一条链子一样存放。这种存储方式称为文件的链式存储。由于硬盘上保存着段与段之间的连接信息(即FAT),操作系统在读取文件时,总是能够准确地找到各段的位置并正确读出。 为了实现文件的链式存储,硬盘上必须准确地记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继内容的下一个簇的簇号。对一个文件的最后一簇,则要指明本簇无后继簇。这些都是由FAT表来保存的,表中有很多表项,每项记录一个簇的信息。由于FAT对于文件管理的重要性,所以FAT有一个备份,即在原FAT的后面再建一个同样的FAT。初形成的FAT中所有项都标明为“未占用”,但如果磁盘有局部损坏,那么格式化程序会检测出损坏的簇,在相应的项中标为“坏簇”,以后存文件时就不会再使用这个簇了。FAT的项数与硬盘上的总簇数相当,每一项占用的字节数也要与总簇数相适应,因为其中需要存放簇号。FAT的格式有多种,最为常见的是FAT16和FAT32。
4、DIR区
DIR(Directory)是根目录区,紧接着第二FAT表(即备份的FAT表)之后,记录着根目录下每个文件(目录)的起始单元,文件的属性等。定位文件位置时,操作系统根据DIR中的起始单元,结合FAT表就可以知道文件在硬盘中的具体位置和大小了。
5、数据(DATA)区
数据区是真正意义上的数据存储的地方,位于DIR区之后,占据硬盘上的大部分数据空间。
一、硬盘的物理结构:
硬盘存储数据是根据电、磁转换原理实现的。硬盘由一个或几个表面镀有磁性物质的金属或玻璃等物质盘片以及盘片两面所安装的磁头和相应的控制电路组成(图1),其中盘片和磁头密封在无尘的金属壳中。
硬盘工作时,盘片以设计转速高速旋转,设置在盘片表面的磁头则在电路控制下径向移动到指定位置然后将数据存储或读取出来。当系统向硬盘写入数据时,磁头中“写数据”电流产生磁场使盘片表面磁性物质状态发生改变,并在写电流磁场消失后仍能保持,这样数据就存储下来了;当系统从硬盘中读数据时,磁头经过盘片指定区域,盘片表面磁场使磁头产生感应电流或线圈阻抗产生变化,经相关电路处理后还原成数据。因此只要能将盘片表面处理得更平滑、磁头设计得更精密以及尽量提高盘片旋转速度,就能造出容量更大、读写数据速度更快的硬盘。这是因为盘片表面处理越平、转速越快就能越使磁头离盘片表面越近,提高读、写灵敏度和速度;磁头设计越小越精密就能使磁头在盘片上占用空间越小,使磁头在一张盘片上建立更多的磁道以存储更多的数据。
二、硬盘的逻辑结构:
硬盘由很多盘片(platter)组成,每个盘片的每个面都有一个读写磁头。如果有N个盘片。就有2N个面,对应2N个磁头(Heads),从0、1、2开始编号。每个盘片被划分成若干个同心圆磁道(逻辑上的,是不可见的。)每个盘片的划分规则通常是一样的。这样每个盘片的半径均为固定值R的同心圆再逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0、1、2……每个盘片上的每个磁道又被划分为几十个扇区(Sector),通常的容量是512byte,并按照一定规则编号为1、2、3……形成Cylinders×Heads×Sector个扇区。这三个参数即是硬盘的物理参数。我们下面的很多实践需要深刻理解这三个参数的意义。 硬盘存储数据是根据电、磁转换原理实现的。硬盘由一个或几个表面镀有磁性物质的金属或玻璃等物质盘片以及盘片两面所安装的磁头和相应的控制电路组成(图1),其中盘片和磁头密封在无尘的金属壳中。
三、磁盘引导原理:
3.1 MBR(master boot record)扇区:
计算机在按下power键以后,开始执行主板bios程序。进行完一系列检测和配置以后。开始按bios中设定的系统引导顺序引导系统。假定现在是硬盘。Bios执行完自己的程序后如何把执行权交给硬盘呢。交给硬盘后又执行存储在哪里的程序呢。其实,称为mbr的一段代码起着举足轻重的作用。MBR(master boot record),即主引导记录,有时也称主引导扇区。位于整个硬盘的0柱面0磁头1扇区(可以看作是硬盘的第一个扇区),bios在执行自己固有的程序以后就会jump到mbr中的第一条指令。将系统的控制权交由mbr来执行。在总共512byte的主引导记录中,MBR的引导程序占了其中的前446个字节(偏移0H~偏移1BDH),随后的64个字节(偏移1BEH~偏移1FDH)为DPT(Disk PartitionTable,硬盘分区表),最后的两个字节“55 AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。
MBR不随操作系统的不同而不同,意即不同的操作系统可能会存在相同的MBR,即使不同,MBR也不会夹带操作系统的性质。具有公共引导的特性。
我们来分析一段mbr。下面是用winhex查看的一块希捷120GB硬盘的mbr。
MBR扇区代码
你的硬盘的MBR引导代码可能并非这样。不过即使不同,所执行的功能大体是一样的。这里找wowocock关于磁盘mbr的反编译,已加了详细的注释,感兴趣可以细细研究一下。
我们看DPT部分。操作系统为了便于用户对磁盘的管理。加入了磁盘分区的概念。即将一块磁盘逻辑划分为几块。磁盘分区数目的多少只受限于C~Z的英文字母的数目,在上图DPT共64个字节中如何表示多个分区的属性呢?microsoft通过链接的方法解决了这个问题。在DPT共64个字节中,以16个字节为分区表项单位描述一个分区的属性。也就是说,第一个分区表项描述一个分区的属性,一般为基本分区。第二个分区表项描述除基本分区外的其余空间,一般而言,就是我们所说的扩展分区。这部分的大体说明见表1。
DPT代码分析
注:上表中的超过1字节的数据都以实际数据显示,就是按高位到地位的方式显示。存储时是按低位到高位存储的。两者表现不同,请仔细看清楚。以后出现的表,图均同。
也可以在winhex中看到这些参数的意义:
说明: 每个分区表项占用16个字节,假定偏移地址从0开始。如图3的分区表项3。分区表项4同分区表项3。
1、0H偏移为活动分区是否标志,只能选00H和80H。80H为活动,00H为非活动。其余值对microsoft而言为非法值。
2、重新说明一下(这个非常重要):大于1个字节的数被以低字节在前的存储格式格式(little endian format)或称反字节顺序保存下来。低字节在前的格式是一种保存数的方法,这样,最低位的字节最先出现在十六进制数符号中。例如,相对扇区数字段的值0x3F000000的低字节在前表示为0x0000003F。这个低字节在前的格式数的十进制数为63。
3、系统在分区时,各分区都不允许跨柱面,即均以柱面为单位,这就是通常所说的分区粒度。有时候我们分区是输入分区的大小为7000M,分出来却是6997M,就是这个原因。 偏移2H和偏移6H的扇区和柱面参数中,扇区占6位(bit),柱面占10位(bit),以偏移6H为例,其低6位用作扇区数的二进制表示。其高两位做柱面数10位中的高两位,偏移7H组成的8位做柱面数10位中的低8位。由此可知,实际上用这种方式表示的分区容量是有限的,柱面和磁头从0开始编号,扇区从1开始编号,所以最多只能表示1024个柱面×63个扇区×256个磁头×512byte=8455716864byte。即通常的8.4GB(实际上应该是7.8GB左右)限制。实际上磁头数通常只用到255个(由汇编语言的寻址寄存器决定),即使把这3个字节按线性寻址,依然力不从心。 在后来的操作系统中,超过8.4GB的分区其实已经不通过C/H/S的方式寻址了。而是通过偏移CH~偏移FH共4个字节32位线性扇区地址来表示分区所占用的扇区总数。可知通过4个字节可以表示2^32个扇区,即2TB=2048GB,目前对于大多数计算机而言,这已经是个天文数字了。在未超过8.4GB的分区上,C/H/S的表示方法和线性扇区的表示方法所表示的分区大小是一致的。也就是说,两种表示方法是协调的。即使不协调,也以线性寻址为准。(可能在某些系统中会提示出错)。超过8.4GB的分区结束C/H/S一般填充为FEH FFH FFH。即C/H/S所能表示的最大值。有时候也会用柱面对1024的模来填充。不过这几个字节是什么其实都无关紧要了。
虽然现在的系统均采用线性寻址的方式来处理分区的大小。但不可跨柱面的原则依然没变。本分区的扇区总数加上与前一分区之间的保留扇区数目依然必须是柱面容量的整数倍。(保留扇区中的第一个扇区就是存放分区表的MBR或虚拟MBR的扇区,分区的扇区总数在线性表示方式上是不计入保留扇区的。如果是第一个分区,保留扇区是本分区前的所有扇区。
附:分区表类型标志如图4
3.2 扩展分区
扩展分区中的每个逻辑驱动器都存在一个类似于MBR的扩展引导记录( Extended Boot Record, EBR),也有人称之为虚拟mbr或扩展mbr,意思是一样的。扩展引导记录包括一个扩展分区表和该扇区的标签。扩展引导记录将记录只包含扩展分区中每个逻辑驱动器的第一个柱面的第一面的信息。一个逻辑驱动器中的引导扇区一般位于相对扇区32或63。但是,如果磁盘上没有扩展分区,那么就不会有扩展引导记录和逻辑驱动器。第一个逻辑驱动器的扩展分区表中的第一项指向它自身的引导扇区。第二项指向下一个逻辑驱动器的EBR。如果不存在进一步的逻辑驱动器,第二项就不会使用,而且被记录成一系列零。如果有附加的逻辑驱动器,那么第二个逻辑驱动器的扩展分区表的第一项会指向它本身的引导扇区。第二个逻辑驱动器的扩展分区表的第二项指向下一个逻辑驱动器的EBR。扩展分区表的第三项和第四项永远都不会被使用。
通过一幅4分区的磁盘结构图可以看到磁盘的大致组织形式。如图5
关于扩展分区,如图6所示,扩展分区中逻辑驱动器的扩展引导记录是一个连接表。该图显示了一个扩展分区上的三个逻辑驱动器,说明了前面的逻辑驱动器和最后一个逻辑驱动器之间在扩展分区表中的差异。
除了扩展分区上最后一个逻辑驱动器外,表2中所描述的扩展分区表的格式在每个逻辑驱动器中都是重复的:第一个项标识了逻辑驱动器本身的引导扇区,第二个项标识了下一个逻辑驱动器的EBR。最后一个逻辑驱动器的扩展分区表只会列出它本身的分区项。最后一个扩展分区表的第二个项到第四个项被使用。
扩展分区表项中的相对扇区数字段所显示的是从扩展分区开始到逻辑驱动器中第一个扇区的位移的字节数。总扇区数字段中的数是指组成该逻辑驱动器的扇区数目。总扇区数字段的值等于从扩展分区表项所定义的引导扇区到逻辑驱动器末尾的扇区数。
有时候在磁盘的末尾会有剩余空间,剩余空间是什么呢?我们前面说到,分区是以1柱面的容量为分区粒度的,那么如果磁盘总空间不是整数个柱面的话,不够一个柱面的剩下的空间就是剩余空间了,这部分空间并不参与分区,所以一般无法利用。照道理说,磁盘的物理模式决定了磁盘的总容量就应该是整数个柱面的容量,为什么会有不够一个柱面的空间呢。在我的理解看来,本来现在的磁盘为了更大的利用空间,一般在物理上并不是按照外围的扇区大于里圈的扇区这种管理方式,只是为了与操作系统兼容而抽象出来CHS。可能其实际空间容量不一定正好为整数个柱面的容量。
|
|
来自: wangprince2017 > 《操作系统OS》