#本文欢迎转载,转载请注明出处和作者。
存储是个很大的话题,而且讲起来比较硬核,很多术语与知识点。我们尽量每一部分都标注重点,以及类比理解。
存储是什么
存储的核心是硬盘中的磁片。(一个硬盘有很多块)
磁盘里面由多个铝合金材料做的碟片构成,用于存储数据。每个碟片会有一个读写磁头通过磁化碟片来存储数据。
碟片在格式化被划分成为许多同心圆,这些同心圆的轨迹叫做磁道。磁道从最外圈向最内圈由0开始编号。
碟片上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区。每个扇区512个字节,扇区是磁盘可分的最小单位。
所有盘面上的同一磁道,垂直方向上构成一个圆柱,叫做柱面。
为减少寻道时间,磁头读写数据时先从同一个柱面的磁道0开始操作,然后再去往下一个柱面。
由于每个扇区的长度相等,因此0磁道周长最长,扇区最多,且各磁道角速度相等,因此外层磁道比内层磁道读写速率要高。
(重点:记住“扇区(sector)是磁盘可分的最小单位”即可,其他“柱面”、“磁道”那些后面都用不上)
如何使用磁盘
第一步:对磁盘进行格式化:
未格式化的硬盘称作裸磁盘,不能被操作系统识别或直接使用。
格式化操作将裸磁盘划分为多个磁道,并且将多个扇区组成一个文件块(Block),块是操作系统能够识别与操作的最小单位。(FAT32最小块1KB,最大为4GB,NTFS最小块4KB,最大64GB)。
格式化操作其内涵是为了将磁盘空间按照文件系统能够识别的方法进行编址,以便文件系统进行读写操作。而不同的操作系统能够支持不同的文件系统。
为啥要编址呢,其实磁盘就像住房,如果你只有一套房,并且是自住的,那么爱咋咋滴,反正就你自己住。但是如果你有N套房,你当房东了,那么有租客过来了,一手交钱、一手交房卡,那么租客如何找到他的房间而不要敲错别人房间的门呢?房东你是不是要告诉租客他租的房间就是几零几号房?那么其实这个几零几的编号,就是你对房间进行了编址。
其实磁盘也就一样,裸磁盘相当于超市/图书馆门口那些临时储物柜,每个扇区相当于1个储物柜,而操作系统相当于临时寄存管理员,应用程序相当于带着行李的游客。应用程序(游客)往裸磁盘(存储柜)存入东西的时候,租客不是直接随便找个储物柜硬塞的,而是到寄存处,把行李交给管理员,而管理员看看哪里有空的柜子,然后把行李存进去,然后把带有存物柜编号(编址后,多个扇区组成的文件系统块地址)的钥匙/凭证交给游客。等应用程序调用数据(游客取行李)的时候,管理员根据凭证(编址),从对应的存物柜里面提取行李(数据)提取出来,然后交给游客。
(重点:记住1、“格式化就是对裸磁盘空间进行编地址”,2、“文件块(Block),块是操作系统能够识别与操作的最小单位”)
第二步:对磁盘进行分区
分区其实就是指定每个分区由哪个扇区开始,到那个扇区结束。
分区可以使多个分区之间的数据进行隔离。
分区后各分区可以用于格式化不同的文件系统,并且每个分区的格式化操作不会影响另外一个分区。(如平常C盘重装WINDOWS操作系统,不会影响D、E盘数据,数据不会清空)
第一个扇区主要存储:(1)主要开机区(Master boot record, MBR)及分割表(partition table), 其中 MBR 占有 446 bytes,而 partition table 则占有 64 bytes。
硬盘最多划分4个物理分区(主分区/扩展分区),需要更多的分区就要在扩展分区上面划逻辑分区。
数据如何写入存储
普通文件系统
以FAT32文件系统为例,对硬盘进行格式化后,多个扇区组成了多个块,并且对块进行了编址(下图每个矩形为1个文件块)。
假设每个块为1KB,一份4KB大小的文件,被分为4个文件块,分别存储到块1、4、7、15中去。
如1、4、7、15文件块各位于不同的磁片,那么每个磁片的磁头会参与到读取数据的操作中去。
这种方式读写效率低,如1、4、7文件块都在第一块磁盘,本来磁盘转一圈即可读取完3个文件块,但是由于1后面指向7,所以转第一圈经过4时不会读取,读取7后才知道要读取4,需要转第二圈才能够读取到4文件块。
索引式文件系统
Linux的EXT4为索引式文件系统,磁盘格式化后会生成Inode与Block,其中Block用户存储文件数据,Inode用来存放文件的元数据。每个文件有唯一的Inode编号。当访问文件时,会在Inode查找对应编号,找到元数据后,就一次过知道文件分块所有的存放位置,这个时候磁盘转一圈就可以全部数据读取完毕了。因此读写效率较高。
日志式文件系统
传统的文件系统,如果在写入过程产生中断,会产生写入设备与被写入设备上的数据不一致的问题,将需要启动数据修复,修复时间长,资源消耗大,所以出现了日志式文件系统。
在每次写入数据之前,会先在日志记录缓存区中写下要进行的写入的数据的信息,然后才会着手将数据以及元数据写入到磁盘中,写入数据完成后,又会将日志记录缓存区块中的记录写入到磁盘的日志记录区,这样如果中途出现问题,查看日志记录缓存区/日志记录区,就能找到中断的位置或者错误的原因,重新进行读写,排错时间短,修复时间快。