磁盘基础相关

对于我们计算机核心部件来讲,其实并不包含磁盘设备,我们知道计算机的核心部件只有五大部件,是什么啊,磁盘最多只能归类到I/O设备上面去,他不算是核心部件,只能算我们的计算机跟外部存储设备或者外部其它设备交互的一种外设而已,虽然他通常都封装在你的机箱里边,但事实上各位应该明白,他也是外部设备,不是计算机的核心器件,而且从磁盘诞生之日起到今天为止,磁盘的传输速度并没有发生太大的变化,或者说他的发展变化比起内存来比起CPU来那绝对不是一个量级上的,所以磁盘速度是非常慢的,这取决于磁盘的结构,目前来讲主流的磁盘任然是机械式硬盘,这个是比较郁闷的。我们为什么要用到硬盘,首先,RAM是一时性的存储器对不对,所以我们要永久保留数据必须要借助于外部的存储设备,我们常见的外部存储设备有很多,比方说我们用到的U盘是不是就是啊,还有呢,光盘,软盘,硬盘,磁带,这实际上都是一些外部的存储设备,当然硬盘以他的造价低速度快而且支持随机存取,使得他非常流行,U盘是国人为计算机发展真正做出的一种设备是不是,闪存设备是国人研发出来的,好像是深圳的一家公司对吗,闪存存储设备就是我们现在常用的U盘,或者SD卡之类的盘,是国人研发的,朗科。好这些都是外部存储设备,各位应该都知道他们都能够实现永久存储数据的,就算是没电的前提下,很多是使用磁性设备或光等来实现持久保存数据的,其中我们的硬盘我们说过,目前为止主流的任然是机械式硬盘,但是固态磁盘已经兴起了是吧,我们称为solid磁盘,他跟我们U盘不完全一样回头再说他,现在先不说,,那接下来我们任然说我们的机械式硬盘,他之所以发展的速度或者他增进的速度比较慢就是因为,你看我们的CPU也好内存也好都属于电气设备,或者叫电子设备,而磁盘却是一个机械式设备,他的组成结构比较独特

他是这样子的,在我们硬盘盘盒内部是一堆的钢性盘片,他可能是个钢片钢板,圆的,上面涂有磁性的材料这些磁性材料可能排列得很紧密而后这些磁性材料被划分成,在这个盘面(Platters)上被划分成一个一个的同心圆,这些盘片中间使用一根轴(Spindle)来固定,可能有多个盘片,这些盘片固定在一根轴上,所以他们是同步运动的,在盘片上面悬浮有一个机械臂或者叫磁臂,在这个磁臂上面这个头这里有一个读写的磁头(R/W Head),这个磁头可以发出一些信号,使得我们这个盘面上的磁性材料发生变化从而能够存储0或者1这样的数据位,他实际上不是存储0或者1,磁性材料发生变化,有变化我们叫1没变化我们叫0,就这样简单的存储的所以他只有两种状态的格式的转换,当这个材料排列得紧密也决定了上面能存多少数据的,在我们硬盘内部可能有多个盘片啊,每一张片基本上都是双面可读写的,所以每一面读写都需要一个磁头,所以每一个盘面上都有,我们有四张盘片就有八个盘面,这个头我们称为叫读写头,这个磁头是悬浮在你的盘面的上方的,而且距离非常近甚至与只有几个微米,所以我们磁盘在运行过程中发生震动的话就极易造成损坏就是这种原因,可能导致数据丢失,所以你的电脑在运行的时候尽量不要乱换,尤其是里边使用机械式硬盘的时候,但是一下两下三下五下可能没事,他可能还可能抗震,当然你从五楼扔下去又是另外一码事了。甚至你从一米的高度掉下来那甚至都是一回事了,偶尔在我们机箱内部简单的震动没问题,但是你一不小心踢一下机箱,这问题可能就比较严重,不信你可以拿你自己的电脑试试。

这就是我们的硬盘他里边的简单的工作机制

那刚才我们说过在磁盘内部每一个盘片上他有很多的磁道,为什么要划分磁道啊?因为我们的读写头在读写数据的时候这整个盘片上他又排列得很多非常紧密得磁性材料,而我们读写数据是靠这个盘片不停得旋转完成的,因此他们读数据的时候,就是靠盘片不停旋转以后这个磁头分别划过不同的位置来获取数据的,所以这整个盘面都划分成了同心圆,而后我们存数据的时候也是按照同心圆来存储的,而不是说我们横扫过去来进行存储的,这个需要各位注意,这就是他们为什么要划分同心圆的原因,这些同心圆我们把他称作磁道(Track),注意我们磁道从内向外或者从外向内他整个周长是不一样的,是不是,ok,那因此外面的磁道比里面的磁道能存储更多的数据对吗,那所以我们不能假设说我们存一个数据的时候就按照磁道来划分,那因此为了能够便于实现数据的管理,磁道上的存储空间是划分成扇区的,一个一个的扇区叫(Sector),扇区用于存储用户的数据,并且包括扇区自己的编号,就是扇区自己的位置,包括他的扇区号,磁头号,碟片号,磁道号等等这些每个扇区上都有存储,所以这个扇区我们在存数据的时候,本来可能是512个字节那很可能你只有500个字节来存数据后面的12个字节都是额外开销,因为他要存这些额外数据的,当然他没有这么大,占不了这么大而已,一般而言,每一个扇区的大小是512个字节。好这是我们的磁盘

磁盘的体积越来越小但容量越来越大,尤其是费尔核格林贝格尔发现"巨磁电阻"效应以后,我们现在的磁盘基本上上T的硬盘都很常见了对吧,2T甚至3T的硬盘都很常见了,而我们刚刚开始用电脑的时候,大硬盘64G都算是巨大无比的硬盘了,所以短短的十年时间我们的硬盘容量发生了变化,可他的速度没有太大变化,大家要注意这点,好这是我们的硬盘组成结构,但是我们又说过,整个硬盘是按照一个轴,在一个轴的固定下是同步旋转的对吧,所以我们存数据,是往一个盘面上存呢,还是说我们分散存在多个盘面上,比如说我要存一个文件叫a.txt,文件很大有100K吧,他怎么存数据的,是只存一个盘面上还是怎么存的,怎么能让他速度快,ok,所有盘片的所有盘面都同时工作这速度是不是就快得多了,所以事实上我们存数据的时候,他可能把他划分成了很多个不同的组成部分,分别在每个盘面上都存储了平均的一部分,这样来进行存储的,而且存储的时候,刚才说过他也不是横划过去的,而是按照整个磁道,圆,来实现数据存储的,好这是我们整个硬盘的组成,那么位于不同盘面上的相同编号的磁道,相同编号的磁道,这个就称为Cylinder叫做柱面,为什么叫柱面这个很容易理解,像一个柱子一样是不是这样子啊,,好 磁道可以划分为扇区,不同盘面上相同编号的磁道组成柱面,我们又知道,现在我们在使用硬盘的时候。

通常要划分分区对吧,各位应该知道的,我们为什么要划分分区,如果不划分分区的话意味着整个磁盘只能存储一个文件系统,先记住这个概念"文件系统",如果我们划分了分区每一个分区都可以是一个独立的文件系统,所以分区其实是我们整个磁盘的逻辑边界,实在磁盘上建立起来的逻辑边界,那我们的磁盘就是一个钢性盘片而已,他里边能存数据,到底我这块硬盘上有多少个分区,这些分区信息保存在哪?好 磁盘刚出厂的时候,在磁盘的厂商手里边会做一次所谓的格式化,只不过这个格式化叫做低级格式化, 低级格式化是用来干什么的呢?就是用来划分磁道的,整个磁盘,按照他旋转的速度还有整个磁盘的物理属性等划分好磁道扇区等,但他里边并没有任何分区,大家知道我们拿到磁盘是自己分区来完成的对不对,分区我们把他称作partition,所谓分区刚才提到过就是把整个磁盘划分成多个不同的逻辑组成结构,这每一个组成结构里边可以创建一个文件系统,所以分区是用来实现创建独立的文件系统的,一个磁盘上可以创建多个文件系统,那怎么划分分区,还有分区的信息保存在什么位置,我相信各位都听说过我们磁盘上有一个所谓叫MBR的东西是吧,MBR叫什么?我们称作主引导记录(Master Boot Record)或者叫(Main Boot Record)都行,这在各位刚学计算机的时候都应该了解过的,那MBR也称为叫主引导记录,主引导记录是什么,在哪个位置,注意我们整个磁盘的第0磁道的第0扇区,整个盘上0盘面0磁道0扇区一共是512个字节,早期的古老的划分方法,被称为叫做主引导记录,这512个字节不属于任何操作系统,也就是说你就算在里边装上windows,你的磁盘的某个分区上,你的windows也无法正常直接去访问这个MBR的,MBR是属于磁盘的,他是全局的,不是被操作系统直接使用的,而独立在操作系统之外的,这么一个存储空间,这个存储空间一共是512个字节,而且在这512个字节里边划分成三段,划分成三个片段,第一个片段是446个字节这个字节里边放的是,放的是叫Bootloader.这么理解吧叫引导加载器,这是一端程序,说白了这里边是一个程序,是一段代码,这段代码能够完成去引导你的某个分区上的操作系统让他启动起来的,所以没这段代码,你硬盘上就算有操作系统他也启动不起来,这个叫做主引导记录。当中的程序叫Bootloader,我们称为引导加载器,好 接下来的64个字节其中每16个字节可以标识一个分区,那一共能标识多少个啊,一共只能标识四个分区,所以你的硬盘上只能划分4个主分区,好 446+64是510,最后两位叫Magic Number就是我们说的魔数,这个数字通常是独特的,是特定的,而且他的主要目的就是标记我们的MBR是否有效的,标记MBR是否有效,这是最后两个字节。那因此各位应该了解了MBR如果损坏的话不管你这个硬盘上有没有装操作系统,装的是哪一个操作系统,他都无法启动的,因为MBR当中的Bootloader是启动操作系统的重中之重。简单来讲当我们的电脑开机的时候我们中的内存中的数据时空的,而我们知道我们CPU所读的数据都是来的内存的是不,所以当我们电脑刚开机的时候我们BIOS中的数据,BIOS,其实BIOS时存储在ROM中的一端程序代码,这段程序代码能够完成电脑自身健康状况的检查,BIOS中设定了如何检查自身的健康状况的,所以这里边BIOS指的是一段程序,这段程序在开机以后会直接把RAM中的内容映射到内存中的最开始那处空间里边来,所以我们一开机,CPU就试图去加载内存最低端这里边的代码,这个代码刚好是我们的BIOS,那接下来就是执行的BIOS指令对吗,BIOS指令执行完成以后BIOS发现没问题了,那接下来他就干什么呢,去根据BIOS当中设定的启动次序挨个的去找那个启动设备的MBR,挨个的去找,第一个你放的是光盘,他就去找有没有光盘设备,如果有光盘设备就去找光盘的MBR,如果光盘没有MBR那怎么办,就找第二个设备的,如果光盘有MBR但是MBR坏了,系统就开始报错了,启动不了,告诉你启动不了,一定要注意这一点,他并不是说第一个出现错误了就去找第二个,不是这样子的,而只有第一个没有的时候才去找第二个,所以如果第一个光盘没有,那就去找第二个,第二个恰好是我们的硬盘,那于是,读取硬盘的MBR,我们说过硬盘的MBR前446个字节叫Bootloader对不对,实际上又是一段代码,于是BIOS这段程序就把Bootloader装入内存,把Bootloader给他加载到内存里边来了,这段程序又相应的读取分区表,而后这段程序根据我们的配置去加载对于分区上的操作系统。那因此这段程序必须要能读取我们的分区表的,那如果没有分区表呢,找不到那个操作系统。懂吧,好,Bootloader被加载进来以后BIOS就退出了,BIOS把控制把执行的次序或者执行的指令高告诉CPU,接下来你就可以执行这段Bootloader了,于是Boosloader一运行,根据我们自己所选的操作系统,于是他会找到那个特定分区,加入我们有三个分区,在其中一个分区上有操作系统,那于是我们的Bootloader就会到对应的分区上去找那个操作系统的内核,找到内核了Bootloader就会把这个操作系统的内核读进内存来,好,操作系统内核又来了,当内核读进来,并解压缩完成以后,而后,Bootloader即将控制权交给内核了,于是,内核开始启动自身,接着,根据我们的配置能够找到你的文件系统在什么地方,找到所需要运行的每一个程序,操作系统启动完成,所以你可以想象一下MBR有多重要。MBR当中无论是Bootloader坏了还是分区表坏了,所有信息都会丢失的,那就意味这你的整个操作系统是启动不了的,不但如此,如果连分区表丢失的话不但启动不了,把这个硬盘挂载到其它主机上去,里边的数据也照样读不出来的,没有分区表就无法读数据。所以我们说MBR至关重要,而有些可恶的病毒就专门感染你的MBR,把MBR给你搞坏,或者你一不小心装其它操作系统的时候把MBR装坏了你会发现系统好好的可就是启动不了修复MBR可能就能登陆了。

刚才说过MBR里边只有64个字节存储分区表的,所以最多创建4个主分区,虽然我们只有四个主分区,但是我可以拿一个分区出来,不真正创建分区,他干什么,他指向磁盘上的另外一个位置,我拿出来16个字节,这个字节里边没有存分区信息,而存放的是什么啊,存放的是一个指针,他指向磁盘上一个另外的更大的空间高速你这里边还有分区信息,这更大的空间里边我就能存储更多的信息了,而这个分区,就是创建的是指针的这个分区,我们把它叫做扩展分区,他不叫主分区,所以我们通过这种方式,就可以在磁盘上创建多个分区了。我们再解释一遍,假如说我们这个磁盘里边这就是MBR的分区表,他就这么大一点,在里边呢我们只能创建四个条目,因为每16个字节一个,本来只能分四个主分区,所以你的硬盘有200G,你划了四个主分区,第一个主分区20G,第二个主分区20G,第三个还是20G,第四个还是20G,那还有剩下120G对吧,那这120G还能不能使用了?用不成了。只能创建四个主分区,所以我们为了使用更多的分区,第一个可以使用主的,第二个可以第三个可以,第四个只能使用到扩展分区,他里边是一个指针,已经提了很多次了,指向我们整个磁盘上的另外一个更大的空间,告诉你这里边还有额外的其他的分区信息,那于是,剩下的磁盘都可以使用这个额外的分区表当中所存储的分区信息来存储,所以在这里边你放多少个分区都可以,这要取决于你的扩展分区有多大,有多大呢,一般来讲创建个几十个分区是没问题的,数百个分区也问题不大,虽然没有人这么玩,但是没有问题的,所以我们的硬盘一般来讲只能是四个主的或者三主一扩展,那有人说我用一主一扩展行不行啊,那也没什么问题,反正你只要别超过四个就行,主的加扩展加起来不能超出四个,当然这是对此前的限定,现在也有额外的分区格式了,回头再说。而扩展在一个硬盘上只能有一个,

主+扩展<=4

接下来说一个问题,因为我们磁盘非常大,买一块磁盘,他有200G,用来存储一个文件系统的话他可能变得过于庞大,而且里边存的文件过多,变得难以管理,于是我们就希望分区了,大家想一下我们对磁盘怎么分区,一个圆盘,像切饼一样两刀下去就是四个分区,显然不是这样。那应该怎么分区刚才我们说过,按柱面进行的,磁盘分区是按照柱面进行的,为什么呢,因为我们刚才说过存储一个文件的时候要加速文件存储,他也是按照柱面存储的,我存一个数据的时候他会在每一个盘面上都存,而由于我们的运转速度都是一致的读写头也是固定到一个机械臂上的,所以他们都是同步运动的,因此我们在实现数据存储的时候,他们这个磁头一定是固定在每一个盘面上的相同位置的,每一个盘面上的那个对应的相同位置,所以他们存数据都是按照这么来存储的,叫做按柱面存储的,所以划分分区也是按柱面进行的,柱面编号一般来讲从最外往里头,磁道的编号,第0柱面1柱面2柱面依次向心上去划分,我们此前说过。我们磁盘是按照同心旋转的速度来实现数据读取的,那因此假如说,想一个问题,我们的数据,在最外边,而当前你的磁头在里边,那我们要读到这个数据怎么办,很显然我们当前磁头所在的磁道跟数据所在的磁道不是一个磁道啊,那怎么办,磁头得向外挪到那个磁道上来,明白这个意思吧,他才能读到那个磁道上的数据,转过来以后你可能发现,盘片他会在不停的旋转,如果不旋转我们这个磁头挪过去之后只是固定在一个点上了是不是这个意思,盘片始终在进行不停得旋转,那因此我们的磁道挪过来了,那这个数据已经转过去了怎么办?没关系,反正他是圆周,转过去了再转一圈是不是又回来了啊,而这整个中间肯定是有延迟的,首先磁头要挪过去是不是就有时间延迟啊,其次等待这个磁道对应的数据开始处转过来是不是也需要一段时间啊,而这就是磁盘的读写延迟,好 所以我们衡量一个磁盘性能的重要指标,就是他的平均寻道时间,磁头挪过去,数据转过来。好 那大家想象一下这个磁盘转得越快那就意味着我们的寻道时间平均就越短啊。所以你的盘片转速越快,一般来讲,性能越好,笔记本的磁盘一般都是5400转的。而我们台式机硬盘一般都是7200转的,还有工业级的硬盘像SCSI的有10K的转速,还有15K的转速,当然15000转的磁盘转速比7200快了一倍,所以一般来讲他的平均寻到时间长度也要短了一倍IOps,每秒钟所能够完成的数据读取数也多了一倍,那因此转速越快意味着性能越好,当然了发热量越大,一分钟,注意了这里是按分钟来做的,可不是一秒钟,一秒钟转几千转不得了了,磁盘绝对冒烟了,我们知道分离铀的那个离心机,铀浓缩那个离心机的那个转速他也只是30000转而已,每分钟三万转。其实每分钟7000多转他速度也够快了,在我们的空气中旋转,看上去空气中什么都没有,但这种颗粒杂质是非常大的,所以如果说直接在空气中旋转的话,那磁盘也绝对会烧起来的,因此我们的硬盘的盘心里边是真空的,而且不能有一点点杂质,哪怕一个灰尘很小很小的颗粒,放在里边放到这个磁盘上,我们刚才说过那个磁头离盘片的距离只有几个微米,所以一个灰尘放上去就是一个庞然大物,那是一座山,所以你可以拆开你的硬盘试试再合上,然后让他转起来是什么效果,绝对一股白烟就没了。当然了把他做成真空的主要目的是避灰尘的,所以有人喜欢做DIY的,不是没有人拆开过,有人拆开过,但是为了拆开一个硬盘而且能合起来,你必须要找一个房间,这个房间必须要密闭,在里边充满水蒸气,让他把空气中所有的颗粒都带走,自己洗上十遍,然后干干净净的进去之后,在里边拆开那个硬盘再合上,而且瞬间拆开瞬间合上,一会发现,他最终能工作一个月就不错了,他最重要的是避免灰尘的。

好这就是我们的硬盘,他里边是高速旋转的,每分钟可能是7200可能是10K或者15K的速度进行旋转,RPM,就是多少转每分钟(Revolutions Perminute)简写为RPM,那各位想一下同样是一个扇区512字节的,如果我位于外面的磁道上或位于里边的磁道上有什么区别?大家都已经知道了磁盘旋转是同轴的,那因此最外头这个扇区在每秒钟走过的距离和里边这个扇区每秒钟走过的距离一样不一样,磁盘是固定角速度的。这就导致最里边的磁道和最外边的磁道在同样时间内所划过的长度是不是不一样,那因此最外面的磁道性能,磁道越靠外其读写速率越高,那因此我们应该把那些经常平凡访问到的数据放在最外边的磁道上,比方说我们装操作系统的时候操作系统装在C盘对不对,C盘我们划分的是,通常是最外柱面组成的比较靠外的柱面,然后接着是D盘,D盘速度可能要好,不知道你可能试过没有把一个数据存在D盘上和存在F盘上速度不一样,或者你观察过没有,事实上差别还是巨大的,尤其是你使用磁盘的性能评估工具看他的曲线波动是非常明显的,抬杠的是你存的数据小,不够大你存一个数据假如说要20分钟才能存完你就知道效果了,好 这就是我们的硬盘,但不管怎么讲当我们的硬盘划分好分区之后,那接下来就可以在分区上存文件了对吗,就可以在我们的分区上存储文件了,好假如说这是我们的一个分区,分区上可以存很多的数据,她其实就是磁盘的存储空间,那于是我们的01代码你可以一行一行的使劲存都没问题,但你想象过没有,要想在这磁盘的分区上存三个文件a,b,c。那我怎么知道a文件存到哪个位置了,b文件存到哪个位置了,c文件存到哪个位置了,将来我要访问b文件的时候去哪儿找访问c文件的时候去哪儿找,考虑过这个问题没有,我直接在上面存数据,挨着存,挨个的存,存完了是不是后面还有空余空间啊,继续存储b文件,然后继续存储c文件,下次我们再找数据的时候你会发现这个磁盘上的数据无非就是010101一串代码而已,怎么知道这是a文件结束了这是b文件开始啊,如何得知,你无从得知。是这意思不因为对于整个磁盘来讲他无非就是存01代码的而已,他怎么知道你这是a文件那是b文件又是c文件呢,况且这文件有没有到底有没有名,名跟文件数据我们说过有关系吗?你的人跟你的名字有关系吗,能增加你的体重吗,没有关系,是不是一个道理啊。ok 那怎么办,我们必须要对这里边所存的数据给他一些逻辑的边界,从哪个地方起始到哪个地方结束,我们必须要有一个寻址定位的方法,那于是,我们的磁盘分区就应该被划分为两个阶段,或者我举个更具体的例子。我们是一个图书馆,进了一万本书,你把这一万本书咣当一下都堆到这个图书馆里头,将来有人要找其中某一本书的时候到哪儿找,怎么去找,你要去翻遍这一万本书去找其中某一本书是不是这样子,这个太困难了,那我们这里也是你把abc三个文件存上去要找其中某一个文件,你得一位一位检查,每一次访问都是这样子,得遍历整个所有文件,太困难了。那于是为了加速图书检索怎么办呢,先分类再编号再建立一个查找索引,是不是这样子。比方说先分个类,我们的书架,首先建立多排书架,然后讷给书架编号,每一个书架上放多少本书,给书编上号,然后我们说过比方说找某一本书建立一个索引,我们在这又建立一个索引,想找某一本书得时候先看这个索引,这个书在第几排书架的第几个位置的第几个编号上,那因此我们必须要有一个,第一:我们有一个这书的名字是什么。第二这个对应的书要存在什么位置,是不是得有一个对应得路径啊,然后先找这个编目,再找这个对应得路径,根据这个路径再来实际的去找书那这快得多了,那ok。那你有没有想象过你的图书馆非常非常大,里边存了有一百万本书,那你从这一百万本书里边找一个书名是不也很困难啊,那怎么办呢,再划分成不同的分区,这是图书馆藏书室1这是图书馆藏书室2藏书室3里边写上在第几号藏书室,每个藏书室你就可以理解成什么,理解成一个分区,可以这么理解,藏书室里边是不是还有一个排架讷,所以他的具体地址看来要随着你的规模的不断变化地址索引的方式也要发生变化,编址的方式也要发生变化,但你有没有想象过,我们这个编目跟书有关系没有,编目是用来干什么的,编目里边放得有书没有,有书的内容没有,跟书有关系没有,有关系,是书的一个快速检索位置,所以把他称为索引,那这些数据更书本身没关系,我们把他称为书的元数据,叫元数据,只是为了能检索书,标识书这样的一种数据,叫做Metadata,ok我们只有对整个图书馆里所有书建立起一个这样编目,而且把他们按照位置存放以后继而才便于快速找到某一本书的,定位其中某一本书并对其中进行访问的,所以我们的分区也是如此啊。未完。。。

转载于:https://blog.51cto.com/14224061/2360660

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值