注记 |
|
|
本附录对于非 x86 体系不一定适用。然而,在这里提及的一般原理可能适用。 |
磁盘分区长期以来一直是个人计算机领域中的一项基本必备知识。然而,由于越来越多的人开始购买带有预安装的操作系统的计算机,相对来说,只有极少人理解分区的原理。本章试图解释分区的原因以及用法,从而使你能够尽可能简便轻松地安装红帽企业 Linux。
如果你对磁盘分区已有足够的了解,你可以直接跳到第 C.1.4 节来阅读关于如何腾出磁盘空间来准备红帽企业 Linux 安装的信息。本节还将讨论 Linux 系统使用的分区命名方案,与其它操作系统共用磁盘,以及其它相关课题。
硬盘功能极为简单 — 它们被用来可靠地储存及检索数据。
在讨论磁盘分区之类的问题时,了解一些基础硬件知识至关重要。不幸的是,这又极容易使人陷入小节,忽略全局。因此,本附录使用了一种简化的磁盘驱动器图表来解释磁盘分区后的情形。图 C-1显示了一个崭新的、未曾使用的磁盘驱动器。
图 C-1. 未使用过的磁盘驱动器
没什么可看的,是不是?不过,若我们仅在一个最基本的层次上讨论磁盘驱动器,此图表已足够。假设我们要在这个磁盘驱动器上面储存一些数据,就目前而言,这还不行。我们首先要做一些准备工作…
有经验的计算机用户可能对此心中有数。我们需要格式化(format)这个驱动器。格式化又称“制作文件系统(file system)”,它是一个将信息写入驱动器,在未经格式化的驱动器内的空白空间中建立秩序的过程。
图 C-2. 有文件系统的磁盘驱动器
如图 C-2所暗示,文件系统所建立的秩序牵涉到一些利弊得失:
· 驱动器上极小的一部分可用空间被用来储存与文件系统有关的数据,这可以被视作管理费用。
· 文件系统将剩余空间分割成小块的,大小统一的段。在 Linux 中,这些段被称为块(block)。 [1]
由于文件系统带来创建目录和文件的可能性,以上牺牲可以被看作所需付出的一个很小的代价。
还有一点值得注意的是,统一通用的文件系统并不存在。如图 C-3所示,一个磁盘驱动器上可以有许多不同类型的文件系统。你可能也猜得到,不同类型的文件系统通常是不兼容的。这意味着,支持某种文件系统(或几种相关的文件系统类型)的操作系统可能不支持其它类型的文件系统。不过,最后那句话并非是一个不折不扣的定理。例如,红帽企业 Linux 支持的文件系统类型比较广泛(包括许多其它操作系统常用的文件系统),从而使不同文件系统之间的数据交换变得容易多了。
图 C-3. 含有不同文件系统的磁盘驱动器
当然,将文件系统写入磁盘仅仅是一个开端。这个过程的目标实际上是储存并且检索数据。写入一些文件后,让我们再来看一看磁盘。
图 C-4. 已写入数据的磁盘驱动器
如图 C-4所示,某些先前空白的块现在已被写入数据。然而,单看以上图示,我们无法判定在这个驱动器上究竟有多少个文件。可能少到只有一个文件,也可能有很多文件,因为所有的文件至少要使用一个块,有些需要几个块。还有一个要注意的要点是,所使用的块不必构成一处连续的区域;使用的和未使用的块可以交错散布。这就是通称的碎段(fragmentation)。碎段会对试图改变已存分区大小有一定的影响。
如同许多与计算机相关的科技,磁盘驱动器自问世后一直在不断地变化。特别是,它们越来越大。不是实际尺寸越来越大,而是它们储存信息的能力越来越大。这种新增的容量导致了磁盘驱动器使用方法的根本改变。
由于磁盘驱动器容量的不断增大,一些人开始质问将所有格式化的空间并为一大块是否明智。这一类想法的动机有哲学上的,也有技术上的。从哲学角度上讲,一个较大的磁盘驱动器所提供的额外空间若超过了一定的大小似乎只会造成更多的杂乱无章。从技术角度上讲,某些文件系统不是为支持大于一定容量的磁盘驱动器而设计的。或者,某些文件系统可能会支持拥有巨大容量的较大的驱动器,但是由文件系统跟踪文件所强加于上的管理费用也随之变得过高过大。
解决这个问题的办法是将磁盘划分为分区 (partition)。每一分区都可以像一个独立的磁盘一样被访问。这是通过添加分区表(partition table)来做到的。
注记 |
|
|
虽然本章图表中所显示的分区表和实际磁盘驱动器是分开的,这并不完全正确。事实上,分区表被保存在磁盘的最起首,在任何文件系统或用户数据之前。但是为了清楚起见,我们在图表中将之分开。 |
图 C-5. 带有分区表的磁盘驱动器
如图 C-5所示,分区表被分为四个部分或四个“主分区”。主分区是在硬盘驱动器上只能包含一个逻辑驱动器(或部分)的分区。每个部分都装有定义单个分区所必需的信息,这意味着分区表定义的分区不能超过四个。
每个分区表项目都包含着该分区的几项重要的特征:
· 在磁盘上分区开始和结束的地点(起止点)
· 分区是否“活跃”
· 分区的类型
让我们来仔细查看一下每一个特征。起止点实际上定义了分区的大小及在磁盘上的位置。“活跃”标志是被某些操作系统的引导装载程序所用。换一句话说,标为“活跃”的分区上的操作系统将会被引导。
分区类型可能有些不易分辨。 类型是标识分区将会被如何使用的数字。如果这句话听起来有些笼统,那是因为分区类型术语本身也有些笼统。某些操作系统用分区类型来代表一种指定的系统类型,或将分区标为与某个操作系统相关联的分区,或用来指明该分区包含着可引导的操作系统,或是以上三者的结合。
到了这一步,你可能会在猜想这些附加的复杂性通常是怎样被使用的。实例请见图 C-6。
图 C-6. 只有一个分区的磁盘驱动器
在许多情况下,整个磁盘上只有一个分区,基本上是重复分区以前所使用的方法。分区表内只有一个项目,它指向分区的起点。
我们把此分区标为“DOS”类。虽然它只是列在表 C-1之中的几种可能的分区之一,但也足以达到本附录的讨论目的。
表 C-1中包括了一些常用的(和罕见的)分区类型,以及它们的十六进制数值。
分区类型 |
值 |
分区类型 |
值 |
Empty |
00 |
Novell Netware 386 |
65 |
DOS 12-bit FAT |
01 |
PIC/IX |
75 |
XENIX root |
02 |
Old MINIX |
80 |
XENIX usr |
03 |
Linux/MINUX |
81 |
DOS 16-bit <=32M |
04 |
Linux swap |
82 |
Extended |
05 |
Linux Native |
83 |
DOS 16-bit >=32 |
06 |
Linux extended |
85 |
OS/2 HPFS |
07 |
Amoeba |
93 |
AIX |
08 |
Amoeba BBT |
94 |
AIX bootable |
09 |
BSD/386 |
a5 |
OS/2 Boot Manager |
0a |
OpenBSD |
a6 |
Win95 FAT32 |
0b |
NEXTSTEP |
a7 |
Win95 FAT32 (LBA) |
0c |
BSDI fs |
b7 |
Win95 FAT16 (LBA) |
0e |
BSDI swap |
b8 |
Win95 Extended (LBA) |
0f |
Syrinx |
c7 |
Venix 80286 |
40 |
CP/M |
db |
Novell |
51 |
DOS access |
e1 |
PPC PReP Boot |
41 |
DOS R/O |
e3 |
GNU HURD |
63 |
DOS secondary |
f2 |
Novell Netware 286 |
64 |
BBT |
ff |
表 C-1. 分区类型
经过一段时间后,四个分区很明显将不够用。随着磁盘驱动器的不断增大,配置了四个相当大的分区后仍有剩余空间的可能性会越来越大。我们需要有一些创建更多分区的方法。
请进入扩展分区的世界。在表 C-1中你可能已注意到一种分区类型是“扩展”(Extended)。它就是位于扩展分区核心的分区类型。
当一个分区被建立,其类型被设为“扩展”时,扩展分区表也被创建。简而言之,扩展分区就像一个独立的磁盘驱动器 — 它有自己的分区表,该表指向一个或多个分区——它们现在被称为逻辑分区(logical partitions),与四个主分区(primary partitions) 相对,扩展分区的分区表完全包含在扩展分区之内。图 C-7显示了一个磁盘驱动器,其中有一个主分区和一个包含两个逻辑分区的扩展分区(以及一些未分区的空闲空间)。
图 C-7. 带有扩展分区的磁盘驱动器
如图表中所暗示,主分区与逻辑分区之间有一个区别 — 主分区只能有四个,但是可以存在的逻辑分区数量却无固定限制。不过,鉴于 Linux 进入分区的方式,你应该避免在一个磁盘驱动器上定义 12 个以上逻辑分区。
现在,我们已经大致讨论了分区概念,让我们来看一看如何将这些知识应用到安装红帽企业 Linux 上。
当你试图为你的硬盘重新分区时,有三种可能的情况:
· 有可用的未分区的空闲空间
· 有可用的未使用过的分区
让我们依次来看一看每一种情况。
注记 |
|
|
请记住,以下图解是为清晰起见而经简化的,它们并不反映当你实际安装红帽企业 Linux 时所会遇到的确切分区布局。 |
在这种情况下,已定义的分区没有扩展到整个硬盘,它没有包括那些不属于任何定义分区的未分配的空间。图 C-8显示了可能出现的情境。
图 C-8. 带有未分区的空闲空间的磁盘驱动器
在图 C-8中,1 代表带有未被拨发的空间的未定义分区,2 代表带有已被拨发的空间的已定义分区。
如果细想一下,你就会认识到一个未经使用的硬盘也属这种类型。唯一的区别是后者的全部空间都不属于任何定义的分区。
接下来,我们将讨论一种更普遍的情况。
在这种情况下,可能有一个或多个分区你已不再使用。可能你过去用过其它的操作系统,而你拨给它的分区似乎已不再被使用。图 C-9显示了这种情况。
图 C-9. 带有未使用分区的磁盘驱动器
在图 C-9中,1 代表未使用的分区,2 代表为 Linux 重新拨发未使用过的分区。
如果你发现自己处于这种情况,你可以使用那些拨给未使用分区的空间。首先,你应该删除该分区,然后在其上创建相应的 Linux 分区。你可以在安装过程中删除未用分区,然后再手工创建新分区。
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 硬盘上的第二个逻辑分区。
注记 |
|
|
该命名方案中没有表明分区类型的地方;与 DOS/Windows 不同,所有分区都可在红帽企业 Linux 下被识别。当然,这并不是说红帽企业 Linux 能够访问每一类分区上的数据,但是在许多情况下,访问专用于另一操作系统的分区上的数据是可能的。 |
请切记以上信息;它会帮助你在设置红帽企业 Linux 所需分区时更容易地理解许多步骤。
如果你的红帽企业 Linux 分区将会与其它操作系统所用的分区共享一个硬盘,多数情况下,应该没什么问题。不过,某类 Liunx 和其它操作系统的组合需要特别加以注意。
令许多 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 上。
到了红帽企业 Linux 安装筹备工作的这一步,你应该开始考虑一下你的新操作系统所要使用的分区数量及大小。“多少个分区”一直是 Linux 社区中的一个具有争议性的问题,在没有定论之前,可以说可用的分区布局与争论这一问题的人一样多。
鉴于上述情况,除非另有原因,我们推荐你至少应该创建以下几个分区:swap、/boot/(/boot/ 文件只对其它系统必要,对 iSeries 系统没有必要),PPC PReP Boot、和 /(根)分区。注意,新的虚拟磁盘可以在 OS/400 V5R2 和更新的版本上被动态添加。
详情请参阅第 2.14.4 节。
href="#AEN2676" [1] |
与图解所示不同,块实际上是大小统一的。此外还请留意,一个普通的磁盘驱动器上含有数以千计的块。不过,在本次讨论中,我们可以忽略这些细微出入。 |
2008.09.13
=====================================================================
扩展分区和逻辑分区:
DOS和FAT文件系统最初都被设计成可以支持在一块硬盘上最多建立24个分区,分别使用从C到Z 24个驱动器盘符。但是主引导记录中的分区表最多只能包含4个分区记录,为了有效地解决这个问题,DOS的分区命令FDISK允许用户创建一个扩展分区,并且在扩展分区内在建立最多23个逻辑分区,其中的每个分区都单独分配一个盘符,可以被计算机作为独立的物理设备使用。关于逻辑分区的信息都被保存在扩展分区内,而主分区和扩展分区的信息被保存在硬盘的MBR内。这也就是说无论硬盘有多少个分区,其主启动记录中只包含主分区(也就是启动分区)和扩展分区两个分区的信息。
硬盘分区之后,会形成3种形式的分区状态;即主分区、扩展分区和非DOS分区。
在硬盘中非DOS分区(Non-DOS Partition)是一种特殊的分区形式,它是将硬盘中的一块区域单独划分出来供另一个操作系统使用,对主分区的操作系统来讲,是一块被划分出去的存储空间。只有非DOS分区内的操作系统才能管理和使用这块存储区域,非DOS分区之外的系统一般不能对该分区内的数据进行访问。
主分区则是一个比较单纯的分区,通常位于硬盘的最前面一块区域中,构成逻辑C磁盘。其中的主引导程序是它的一部分,此段程序主要用于检测硬盘分区的正确性,并确定活动分区,负责把引导权移交给活动分区的DOS或其他操作系统。此段程序损坏将无法从硬盘引导,但从软区或光区之后可对硬盘进行读写。
而扩展分区的概念是比较复杂的,极容易造成硬盘分区与逻辑磁盘混淆;分区表的第四个字节为分区类型值,正常的可引导的大于32mb的基本DOS分区值为06,扩展的DOS分区值是05。如果把基本DOS分区类型改为05则无法启动系统 ,并且不能读写其中的数据。
如果把06改为DOS不识别的类型如efh,则DOS认为改分区不是DOS分区,当然无法读写。很多人利用此类型值实现单个分区的加密技术,恢复原来的正确类型值即可使该分区恢复正常。
fat16
对电脑老"鸟"而言,对这种硬盘分区格式是最熟悉不过了,我们大都是通过这种分区格式认识和踏入电脑门槛的。它采用16位的文件分配表,能支持的最大分区为2gb,是目前应用最为广泛和获得操作系统支持最多的一种磁盘分区格式,几乎所有的操作系统都支持这一种格式,从dos、win 3.x、win 95、win 97到win 98、windows nt、win 2000/XP,甚至火爆一时的linux都支持这种分区格式。
但是fat16分区格式有一个最大的缺点,那就是硬盘的实际利用效率低。因为在dos和windows系统中,磁盘文件的分配是以簇为单位的,一个簇只分配给一个文件使用,不管这个文件占用整个簇容量的多少。而且每簇的大小由硬盘分区的大小来决定,分区越大,簇就越大。例如1gb的硬盘若只分一个区,那么簇的大小是32kb,也就是说,即使一个文件只有1字节长,存储时也要占32kb的硬盘空间,剩余的空间便全部闲置在那里,这样就导致了磁盘空间的极大浪费。fat16支持的分区越大,磁盘上每个簇的容量也越大,造成的浪费也越大。所以随着当前主流硬盘的容量越来越大,这种缺点变得越来越突出。为了克服fat16的这个弱点,微软公司在win 97操作系统中推出了一种全新的磁盘分区格式fat32。
fat32
这种格式采用32位的文件分配表,使其对磁盘的管理能力大大增强,突破了fat16对每一个分区的容量只有2gb的限制,运用fat32的分区格式后,用户可以将一个大硬盘定义成一个分区,而不必分为几个分区使用,大大方便了对硬盘的管理工作。而且,fat32还具有一个最大的优点是:在一个不超过8gb的分区中,fat32分区格式的每个簇容量都固定为4kb,与fat16相比,可以大大地减少硬盘空间的浪费,提高了硬盘利用效率。
目前,支持这一磁盘分区格式的操作系统有win 97、win 98和win 2000/XP。但是,这种分区格式也有它的缺点,首先是采用fat32格式分区的磁盘,由于文件分配表的扩大,运行速度比采用fat16格式分区的硬盘要慢;另外,由于dos系统和某些早期的应用软件不支持这种分区格式,所以采用这种分区格式后,就无法再使用老的dos操作系统和某些旧的应用软件了。
ntfs
ntfs分区格式是一般电脑用户感到陌生的,它是网络操作系统windows nt的硬盘分区格式,使用windows nt的用户必须同这种分区格式打交道。其显著的优点是安全性和稳定性极其出色,在使用中不易产生文件碎片,对硬盘的空间利用及软件的运行速度都有好处。它能对用户的操作进行记录,通过对用户权限进行非常严格的限制,使每个用户只能按照系统赋予的权限进行操作,充分保护了网络系统与数据的安全。但是,目前支持这种分区格式的操作系统不多,除了windows nt外,刚刚上市的win 2000也支持这种硬盘分区格式。
不过与windows nt不同的是,win 2000使用的是ntfs 5.0分区格式。ntfs 5.0 的新特性有"磁盘限额"--管理员可以限制磁盘使用者能使用的硬盘空间;"加密"--在从磁盘读取和写入文件时,可以自动加密和解密文件数据等。随着 win 2000的普及,广大电脑用户会逐渐熟悉这种分区格式的。
linux
linux操作系统是去年it媒体炒得最为火爆的操作系统。由于该系统为自由软件,几乎不用花钱就能装入电脑,所以赢得了许多用户。它的磁盘分区格式与其他操作系统完全不同,共有两种格式:一种是linux native主分区,一种是linux swap交换分区。这两种分区格式的安全性与稳定性极佳,结合linux操作系统后,死机的机会大大减少,能让我们摆脱windows常常崩溃的噩梦。但是,目前支持这一分区格式的操作系统只有linux,对linux系统不感兴趣的用户也只能望洋兴叹了。
通过以上的介绍,我想你一定对常见的硬盘的分区格式有所了解了。那么,赶快根据你所需要安装的操作系统,给你的硬盘确定分区格式吧。
硬盘必须先经过分区才能使用,磁盘经过分区之后,下一个步骤就是要对硬盘进行格式化(FORMAT)的工作,硬盘都必须格式化才能使用。
格式化是在磁盘中建立磁道和扇区,磁道和扇区建立好之后,电脑才可以使用磁盘来储存数据。
在Windows和DOS操作系统下,都有格式化Format的程序,不过,一旦进行格式化硬盘的工作,硬盘中的数据可是会全部不见喔!所以进行这个动作前,先确定磁盘中的数据是否还有需要,如果是的话先另行备份吧。
exFAT
exFAT(全称Extended File Allocation Table File System,扩展FAT,即扩展文件分配表)是Microsoft在Windows Embeded 6.0(包括Windows CE 6.0、Windows Mobile)中引入的一种适合于闪存的文件系统。对于闪存,NTFS文件系统过于复杂,exFAT更为适用。
相对FAT文件系统,exFAT有如下好处:
•增强了台式电脑与移动设备的互操作能力
•单文件大小最大可达16EB(2 305 843 009 213 693 952字节,就是16M个TB,1TB=1024G)
•簇大小可高达32MB
•采用了剩余空间分配表,剩余空间分配性能改进
•同一目录下最大文件数可达65 536个
•支持访问控制
•支持TFAT
采用该文件系统的闪存盘不支持Windows Vista ReadyBoost。Windows Vista SP1支持该文件系统。
请注意:exFAT只是一个折中的方案,只为U盘而生。
需要严格注意的是,这种分区只有vista支持,其他系统不能使用,xp可以通过替换驱动文件的方式支持此格式,但是只能读写,不能格式化
当硬盘刚分好区之后,每个分区会有60多M的已用空间(我是在自己的WDC WD6401AALS-00L3B2上发现的,我不知道别的品牌别的型号的硬盘是否也是这个规律,所以若有不符还请大家批评),这到底有什么规律呢?
经本人研究归纳如下:
n GB硬盘已用空间 为 (67571712 + 32768 * n) 字节 ± 1024字节
【其中67571712 = 2^26 + 2^18 + 2^17 + 2^16 + 2^12】
即 (64.44140625 + 0.03125 * n) MB ± 0.00009765625 MB(误差很小,几乎忽略不计)
以下数据均为过剩值
(也就是说当n<17G时 65M)
( 18G
硬盘一般有255磁头,63扇区(此处待考证,一般没那么多的磁头,但后面的结果还是正确的),故每柱面大小为:
512byte x 255 x 63=8225280bytes =7.84423828125 M
如果要分4G,那么要4×1024M=4096M
需要柱面数为4096÷7.84423828125=522.166
取整数既为523个柱面
应分M数为523×7.84423828125=4102.53662109375M
不管小数点后面几位都进1,也就是4103M,windows就认为是4.00G了。(此处有疑问,为何4103M但windows却识别为整G)
这个方法NTFS和FAT32通用。
从1g到200g最精确的整数分区
1G : 1028M
2G : 2056M
3G : 3075M
4G : 4103M
5G : 5123M
6G : 6150M
7G : 7170M
8G : 8198M
9G : 9217M
10G : 10245M
15G : 15367M
20G : 20482M
25G : 25604M
30G : 30726M
35G : 35841M
40G : 40963M
45G : 46085M
50G : 51208M
55G : 56322M
60G : 61444M
65G : 66567M
70G : 71681M
75G : 76803M
80G : 81926M
85G : 87048M
90G : 92162M
95G : 97285M
100G : 102407M
110G : 112644M
120G : 122888M
130G : 133125M
140G : 143362M
150G : 153606M
160G : 163843M
170G : 174088M
180G : 184324M
190G : 194561M
200G : 204806M
虽然转了文章,但我还是不明白~究竟硬盘分区的原理是什么?[如一个分区是否要取整柱面数(磁盘分区是按扇、按柱逐道推进的,因为磁盘实际读写工作就是这样的),一个柱面的存储大小=扇区数*磁头数*扇区大小;举个例子:如C盘要分整G,根据柱面的存储量计算出需要非整数个柱面,如100.5个,那执行分区后,C盘实际占多少个柱面数呢,101个吗?还是占100.5个,那101柱面的后面多余存储空间留给下个盘用?如果是取整柱数,那实际的C盘大小就会超过原定的整G,那windows又怎么识别为整G呢?]
分区时输入的的大小和windows下识别的大小原理一样吗?答案应该是否定,那是什么原理呢?硬盘分区时是按柱进行,还是整道进行,还是整扇区进行?如分好的C盘无论是否整G,那它是整柱还是整磁道还是整扇区~~~
http://www.360doc.com/content/10/1001/21/1317564_57824803.shtml
英文:http://en.wikipedia.org/wiki/Master_Boot_Record#Disk_partitioning
2008.10.12
======================================================================
前言:因为前面贴子说到的做硬盘数据恢复一事,特地恶补了一个有关硬盘分区的知识,下面的内容可以说是我作的笔记(大部分记载在我的google notebook)的整理稿,其中有很多是直接从别人的文章中抄袭过来的(嘿嘿,其实就是拷贝过来的,各位应该理解,不能告我侵权哦^~^)。但其中有很多却是我自己的心得(大家要认真体会)。因此,我不能算是作者,只能算是编译者,特此说明。
本文探讨硬盘分区中的数据结构。
先回顾一下数据结构的定义:
数据结构是据数据之间的关系,包括数据之间的逻辑关系,数据在计算机中的存储方式(存储结构)和数据的运算三个方面。
大家在学习计算机知识时一定不要思想僵化,比如学数据结构,就认为只有教科书上定义的什么树啊、链表啊、队列啊等等才是数据结构,其实从根本上说,凡是符合以上定义的东西都是数据结构,而这种东西在计算机里随处可见,比如这里说到的硬盘分区方式,以及FAT表、NTFS表,目录存储方式等等都是数据结构,而且有些是非标准的,比如今天讲到的硬盘分区方式就是树和链表的结合,而FAT实际上应该类似于位图的方式(?有待进一步研究),这些都不是标准的方式,其实也用不着研究那么多,在这里引用数据结构的概念是要大家注意硬盘分区所用到的逻辑关系(树和单链表),存储结构(分区表)和运算(硬盘分区的识别过程以及计算机硬盘方式启动的过程)。
闲话少说,书归正传。
一、硬盘的物理结构
硬盘存储数据是根据电、磁转换原理实现的。硬盘由一个或几个表面镀有磁性物质的金属或玻璃等物质盘片以及盘片两面所安装的磁头和相应的控制电路组成 ,其中盘片和磁头密封在无尘的金属壳中。
硬盘工作时,盘片以设计转速高速旋转,设置在盘片表面的磁头则在电路控制下径向移动到指定位置然后将数据存储或读取出来。当系统向硬盘写入数据时,磁头中 “ 写数据 ” 电流产生磁场使盘片表面磁性物质状态发生改变,并在写电流磁场消失后仍能保持,这样数据就存储下来了;当系统从硬盘中读数据时,磁头经过盘片指定区域,盘片表面磁场使磁头产生感应电流或线圈阻抗产生变化,经相关电路处理后还原成数据。因此只要能将盘片表面处理得更平滑、磁头设计得更精密以及尽量提高盘片旋转速度,就能造出容量更大、读写数据速度更快的硬盘。这是因为盘片表面处理越平、转速越快就能越使磁头离盘片表面越近,提高读、写灵敏度和速度;磁头设计越小越精密就能使磁头在盘片上占用空间越小,使磁头在一张盘片上建立更多的磁道以存储更多的数据。
硬盘由很多盘片 (platter) 组成,每个盘片的每个面都有一个读写磁头。如果有 N 个盘片。就有 2N 个面,对应 2N 个磁头 (Heads) ,从 0 、 1 、 2 开始编号。每个盘片被划分成若干个同心圆磁道 ( 逻辑上的,是不可见的。 ) 每个盘片的划分规则通常是一样的。这样每个盘片的半径均为固定值 R 的同心圆再逻辑上形成了一个以电机主轴为轴的柱面 (Cylinders) ,从外至里编号为 0 、 1 、 2…… 每个盘片上的每个磁道又被划分为几十个扇区 (Sector) ,通常的容量是 512byte ,并按照一定规则编号为 1 、 2 、 3…… 形成 Cylinders×Heads×Sector 个扇区。这三个参数即是硬盘的物理参数。我们下面的很多实践需要深刻理解这三个参数的意义。
二、硬盘分区的逻辑结构:
前面已经说过,硬盘分区的逻辑结构是树结构和链表结构的混合产物。其中主分区表和各主分区及扩展分区之间构成树结构,以主分区表为树根,各分区为子结点构成一棵二层的树。而扩展分区中各逻辑分区之间以链表结构存储,从第一逻辑分区到最后一个逻辑分区依次构成单链表。
从数据的逻辑结构上我们可以看出,其实硬盘的数据存储应该是很脆尽善弱的。在这种结构中一旦作为树根的主引导扇区被破坏,则整个硬盘分区信息都将被破坏,另一方面,如果逻辑分区表中中间的任一结点被破坏则后面结点(分区)的信息都将丢失,如果不幸恰好是第一个逻辑分区的分区表被破坏,则其后的所有逻辑分区信息都将丢失。
三、硬盘分区的存储结构:
简单的说:硬盘分区的存储结构有如下特点:
1、因为历史的原因,硬盘分区表总是和主引导代码(或分区引导代码)混合构成一个扇区(512bytes)进行存储,主引导扇区(存储主引导代码和主分区表)和各分区的引导扇区(存储分区引导代码和分区表)的结构完全相同。
2、分区表(主分区表和各分区中的分区表)的信息以记录方式(每个记录16bytes)顺序存领储(顺序表)。每个记录中以特定的指针指向下一个结点。
下面进行详细的解释:
(一)、分区表的结构:
引导扇区,包括主引导扇区和各分区的引导扇区均由三部分构成,即引导代码、分区表
和结束标志。
在主引导扇区MBS(master boot sector)——即硬盘的0柱0面1扇中,这三部分被称为MBR——Main/Mastr Boot Record主引导记录、DPT——Disk PArtition Table主分区表和MagicNumber结束标志
其中MBR占据整个512字节中的446个字节,DPT占据其中的64个字节,而结束标志只占2个字节。
(二)、主引导记录:偏移0--偏移1BDH
主引导记录中包含了硬盘的一系列参数和一段引导程序。引导程序主要是用来在系统硬件自检完后引导具有激活标志的分区上的操作系统。它执行到最后的是一条JMP指令跳到操作系统的引导程序去。
这一部分可以用fdisk /mbr(dos/win 95/win 98/win me)或fixmbr(win 2k/win xp)或 dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1(linux)进行恢复。
注释1:
“Fdisk /mbr”命令只是恢复主分区表,并不会对它重新构建,因此只适用于主引导区记录被引导区型病毒破坏或主引导记录代码丢失,但主分区表并未损坏的情况使用。而且这个命令并不适用于清除所有引导型病毒,因此使用的时候需要注意。 ( 微软的FDISK程序中本身包含这段代码)
微软的这段程序的功能是查找引导分区(活动分区)信息,如果没有或为两个以上,则显示:Invalid partition table, Error loading operating system,Missing operationg system.,否则再按引导分区项读取对应引导扇区,判断结尾是否为55AA,是的话把CPU控制权交给引导扇区的引导程序(JMP到相应程序),否则引导失败。
注释2:
在Windows 2000/XP中,我们一般会用到故障恢复控制台集成的一些增强命令,比如Fixmbr用于修复和替换指定驱动器的主引导记录、Fixboot用于修复知道驱动器的引导扇区、Diskpart能够增加或者删除硬盘中的分区、Expand可以从指定的CAB源文件中提取出丢失的文件、Listsvc可以创建一个服务列表并显示出服务当前的启动状态、Disable和Enable分别用于禁止和允许一项服务或者硬件设备等等,而且输入“help”命令可以查看到所有的控制命令以及命令的详细解释。
比如输入“fixmbr”命令可以让控制台对当前系统的主引导记录进行检查,然后在“确定要写入一个新的主启动记录吗?”后面输入“Y”进行确认,这样就完成了主引导记录的修复。
注释3:
dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1
上面的命令是为了修复可能被病毒修改了的主引导记录MBR,或者想把LILO卸载掉,而不是恢复整个主引导扇区。所以我们只把主引导扇区的备份文件boot.NNNN的前446个字节重写入主引导扇区。
boot.NNNN是我们在安装Linux之前整个主引导分区的备份。如果我们把512个字节全部写入主引导扇区就可能会把安装了Linux后改变了的硬盘DPT表也破坏掉。那就坏事了。 :-)
注释3:
对于这个MBR,MS非常霸道,如果你安装了LINUX的GRUB,你就别想在硬盘中安装WINDOWS,这个问题的最好解决办法是: fdisk /mbr,如果你硬盘中的什么东西都不要的话,也可以往MagicNumber中写入乱码,让WINDOWS安装程序认为MBS信息非法,然后用安装程序重新分区即可。
注释4:
许多操作系统都有自己的MBR,当然你也可以写出自己的MBR程序来做多重引导。
(三)、DPT——硬盘分区表:偏移1BEH--偏移1FDH
由4个16字节的分区信息记录组成,共64个字节。
每个分区信息记录格式如下:
偏移 长度 所表达的意义
0 字节 分区状态: 如0-->非活动分区 80--> 活动分区
1 字节 该分区起始头(HEAD)
2 字 该分区起始扇区和起始柱面
4 字节 该分区类型: 如82--> Linux Native分区 83--> Linux Swap 分区
5 字节 该分区终止头(HEAD)
6 字 该分区终止扇区和终止柱面
8 双字 该分区起始绝对分区
C 双字 该分区扇区数
注释1:
注意分区的起始地址(面/扇区/磁道)和结束地址(面/扇/道)中字节分配:
00000000 01000001 00010101
~~~~~~~~ ==^^^^^^ ========
~ 面(磁头) 8 位
^ 扇区 6 位
= 磁道 10 位
注释2:
分区的操作系统类型(文件格式标志码)
00H--未知类型或不用
01H--12位FAT
04H---DOS FAT16<32M
05H---EXTEND扩展FAT分区(DOS)
06H---DOS FAT16>32M
0BH--FAT32容量最大2G
0CH--FAT32,采用LBA模式,调用int 13h扩展中断
0FH--扩展FAT32分区,采用LBA模式,调用int 13h扩展中断
07H---NTFS(OS/2)
82H--linux
83H---LINUX swap>64M
注释3:
DPT 总共64字节(01BE--01FD), 如上所示每个分区占16个字节, 所以可以表示四个分区, 这也就是为什么一个磁盘的主分区和扩展分区(注意,不是逻辑分区)之和总共只能有四个的原因.
注释4:
硬盘分区规范规定:一个硬盘可以有多个主分区(Primary partition),但最多只能有一个扩展分区。因此,你可以有四个主分区,三个主分区,二个主分区,一个主分区,一个主分区加一个扩展分区,二个主分区加一个扩展分区,三个主分区加一个扩展分区几种情形,但MS非常懒,规定只能有一个主分区,一个扩展分区,其他操作系统没有这个规定。MS的办法是在扩展分区中再设置逻辑分区。
扩展分区的信息位于以上所示的硬盘分区表(DPT)中, 而逻辑驱动器的信息则位于扩展分区的起始扇区, 即该分区的起始地址(面/扇区/磁道)所对应的扇区, 该扇区中的信息与硬盘主引导扇区的区别是不包含MBR, 而16字节的分区信息则表示的是逻辑驱动器的起始和结束地址等.
所以, 在磁盘仅含有一个主分区, 一个扩展分区(包含多个逻辑驱动器)的情况下, 即使由于病毒或其他原因导致硬盘主引导扇区的数据丢失(包括DPT), 也可以通过逻辑驱动器的数据来恢复整个硬盘.
(四)、MagicNumber结束标记(有的称为BRI——boot record ID引导记录标志):偏移1FEH偏移1FFH
最后的两个标志“55 AA”是分区表的结束标志,如果这两个标志被修改(有些病毒就会修改这两个标志),则系统引导时将报告找不到有效的分区表。
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。可能其实际空间容量不一定正好为整数个柱面的容量。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sallay/archive/2008/12/31/3668614.aspx