天天看点

再来理解一下硬盘

一、我的磁盘参数

  我们知道硬盘里面重要的几个概念:磁头(Head)、柱面(Cylinder)、扇区(Sector),下图是我电脑的这几项的数据,用DiskGenius查看的:

  共有60801个柱面,255个磁头,每道扇区数63个,总扇区数:976773168,这里说明两点:

(1)磁头数为奇数:我们知道磁盘里面一个盘面有两面可以存储数据,但是有的盘面只使用了一面,因此磁头数可能出现奇数,这里可以知道磁头编号是从0~255。(没有采用多磁头技术)

(2)每道扇区数:我们知道对于一个盘面,越往外磁道周长越长,对于以前老式的磁盘,每个磁道的扇区数目是相同的,这样就导致外面的磁道存储数据密度太低,因此现代的磁盘都是外面磁道扇区数目多,里面的扇区数目少,这里的每道扇区数其实是经过折算后的,也就是用总扇区数除以磁头数再除以柱面数得到的。

(3)柱面数:共有60801,所以可以知道柱面和磁道编号为0~60800

(4)总扇区数:976773168,这个就是我的硬盘总共的扇区数,这些扇区可以存储数据,其中每个扇区512Bytes,所以我的磁盘容量大概也就是:465GB

二、低级格式化  

  上面我们列举了我的磁盘里面柱面、扇区数目,这些数目是怎么来的呢?一个空白的硬盘可以想象成一个“铁砖头”,并没有这些所谓的磁道、柱面、扇区等参数,出厂前,硬盘厂家往往会进行格式化,确定硬盘的柱面、扇区等等物理参数,这就是所谓的“低级格式化”,这种格式化和操作系统是没有关系的。

三、磁盘寻址

  磁盘经过低级格式化后,就有了扇区,我们就可以往里面写数据了,但是如何来确定我们的数据写到哪个扇区呢?如果我们不告诉计算机,它是不知道的。因此我们应该找到我们需要写入或读出数据的扇区,也就用到了“磁盘寻址”。

  (1)找到一个具体的扇区,可以通过提供柱面号(Cylinder),磁头号(Header)、扇区号(Sector),就能唯一确定那个扇区了,这种寻址方式称为CHS寻址方式。例如CHS为0/0/1表示0号柱面、0号磁头、1号扇区,也就是整块磁盘的第一个扇区;60800/254/63,表示60800号柱面,255号磁头,63号扇区,表示我的磁盘的最后一个扇区。

  (2)找到一个具体的扇区,还可以使用另外一种方式,那就是仅仅提供扇区号来确定,叫做LBA,逻辑寻址,或者线性寻址,例如0号柱面0号磁头扇区数为100个(这里不是68个了,因为外圈比内圈扇区数多),其对应的物理编号为1~100,但是对应的LBA逻辑编号为0~99(逻辑编号从0开始);0号柱面1号磁头对应扇区物理编号为1~100,但是对应的LBA逻辑标号为100~199,以此类推,因此所有的扇区编号为:0~976773167,相当于把一个一个的柱面展开,然后连接起来了。

四、磁盘分区

  看完了前面,一个物理参数已经确定的磁盘,如果我们要安装操作系统,例如windows,那么需要对磁盘进行分区,也就是说C盘占用哪些扇区,D盘占用哪些扇区等等,占用的扇区由我们给他们分配的大小决定。下图是我的分区所占用的扇区:

  可以看到系统保留分区占用的扇区,这里CHS和LBA两种寻址方式都可以看到:

(1)对于CHS寻址:系统保留分区从0柱面32磁头的33号扇区开始,到12柱面,223磁头的19扇区截止。

(2)对于LBA寻址:系统保留分区的起始扇区编号为:32*63+33-1=2048,注意这里的CHS中扇区编号从1开始,而LBA寻址里面扇区编号从0开始。

  到这儿,也可以回答@金色海洋(jyk)阳光男孩 的第一个疑问,C盘到底在硬盘的哪里:开始于12柱面223磁头20号扇区,结束于7649号柱面13号磁头44号扇区。而且操作系统一般存储于磁盘靠外面的磁道,据说外道访问速度比内道快,而操作系统文件又需要经常访问到。

  再来看上面的图,我们会发现几个问题:

(1)系统保留分区从2048扇区开始,那么前面的0~2047个扇区,相当于1MB大小为什么没有显示出来,它们是干什么的用的?

(2)里面看到了扩展分区下面挂载了E盘和F盘,当然前面系统保留分区、C盘、D盘就是主分区了,他们有什么区别?

(3)扩展分区结束于60801柱面,47磁头46扇区,那么后面的扇区干什么用了?(备注:这里60801应该为60800,因为柱面是从0开始编号的,因此可能是软件的错误,这里不就深究了)

  下面简单说一说:

(1)对于问题(1),前面有2048个扇区,其中第一个扇区,也就是0号柱面0号磁头1号扇区(CHS寻址)或者0号扇区(LBA寻址),也称为MBR区,共有512个字节,其中主引导记录MBR占用446个字节,用来引导操作系统启动的,不详细写了,有机会再介绍;磁盘分区表(DPT)占用64个字节,用来记录各个分区的情况,例如C盘占哪些扇区、D盘占哪些扇区等等,我们发现它只有64个字节,可以分成4条记录,一条记录占16个字节,用来记录一个分区的情况,因此只能有4个分区了,也就是4个主分区,如果想分更多的区,可以把其中一个主分区当做扩展分区,再扩充出去几个逻辑分区,几个逻辑分区挂载在扩展分区上面,因此扩展分区也是主分区的一种,且只能有一个;最后两个字节以55AA结尾;其他的2047个扇区一些空着,一些另做他用。(该部分内容不详细写了,要不文章又要太长了)

(2)对于问题(2)在上面文字中简单说明了一下主分区和扩展分区的区别。

(3)对于问题(3)我也好奇怪,那些空间都去哪儿了?

备注:可以把磁盘按照扇区展开,依次编号为0,1,2,……,然后分成几部分:Part1,Part2,Part3,Part4,Part5,Part6,Part7其中Part2、Part3、Part4、Part5,Part6分别给了系统保留分区、C、D、E、F盘,Part1和Part7空出的空间另作他用,其中每一个Part里面各个扇区又是有些什么,里面存储了哪些信息,也是值得思考的。

五、写入文件

  分区讲完了,我们来看看写入文件。往磁盘里面写入文件,是按照柱面、磁头、扇区的顺序来写的,例如先写第1个柱面、第1个磁头、第1个扇区,然后写第1个柱面、第1个磁头、第2个扇区,写完63个扇区后,再移动到下面一个磁头来写;当写完一个柱面,再用后面的柱面。接下来假如往c盘写两个文件a.txt,b.txt,他们一个占用了一个柱面,那么它们的扇区地址是紧紧挨着的且a.txt在前,b.txt再后,但是接下来就要发生一些事情:

(1)如果a.txt里面删除内容,那么占用空间减少,但是占用的空间还是1个柱面。

(2)如果a.txt里面增加内容,那么一个柱面占不下了,而紧挨着它的柱面又被b.txt给占了,那么它会从其他柱面去找地方去放,然后在a.txt创建对新增内容所在扇区的引用。

从(1)(2)可知,随着系统的运行,磁盘里面的碎片会越来越多,因此操作系统提供了碎片整理工具就是把这些空间整合的(当然,对于SSD硬盘,因为内部结构不同,不建议碎片整理,这里就不解释了。),可以看看我的D盘里面空间利用,并不是连续的,如下图:

继续阅读