硬盘与文件系统
Posted caoshouling
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了硬盘与文件系统相关的知识,希望对你有一定的参考价值。
硬盘与文件系统
一、机械硬盘HDD与固态硬盘SSD
1.概念
(1)盘面号(磁头号)
硬盘的每一个盘片都有两个盘面(Side),即上、下盘面,一般每个盘面都会利用,都可以存储数据,成为有效盘片,也有极个别的硬盘盘面数为单数。
每一个这样的有效盘面都有一个盘面号,按顺序从上至下从“0”开始依次编号。在硬盘系统中,盘面号又叫磁头号,因为每一个有效盘面都有一个对应的读写磁头
(2)磁道:磁盘在格式化时被划分成许多同心圆,这些同心圆轨迹叫做磁道(Track)。
(3)柱面:所有盘面上的同一磁道构成一个圆柱,通常称做柱面(Cylinder),每个圆柱上的磁头由上而下从“0”开始编号。
(4)扇区:即磁盘块、物理块。
现代系统中,一般是512K大小
(5)簇
将物理相邻的若干个扇区称为了一个簇。操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是簇(Cluster)。
簇一般有这几类大小 4K,8K,16K,32K,64K等
2.磁盘IO时间 = 寻道时间 + 旋转延迟时间 + 数据传输时间
寻道时间:目前硬盘一般为4到10毫秒,平均约为9毫秒
旋转延迟时间:一个7200(转/每分钟)的硬盘,每旋转一周所需时间为60×1000÷7200=8.33毫秒,
则平均旋转延迟时间为8.33÷2=4.17毫秒
即:随机找到一个数据的时间大约为8ms - 14ms之间。
数据传输时间:读写的字节数/每秒转速*每扇区的字节数
而每秒读取次数IOPS = 1s/14ms 到 1/8ms = 10IOPS~125IOPS之间。即100次左右 ,这个很重要,对于互联网高并发是瓶颈,因为1秒只能执行100次左右。
3.硬盘容量:
磁头数(盘面数)×柱面数×扇区数×每扇区字节数(512字节)
4.常识:
SATA3.0接口的带宽是6Gb/s(注意b是比特) 6Gb/s=6x1024/8MB/s=768MB/s
HDD硬盘用的就是SATA3.0接口,日常使用的HDD硬盘传输顺序读写速率在200MB/s左右。
SDD硬盘使用SATA3.0接口时,速度差不多500MB/s,比HDD硬盘快了一倍以上。
SDD硬盘还可以使用PCI Express接口,读取速度在2GB/s左右,写入速度在1.2GB/s左右。
5.一块普通的HDD硬盘一般是100IOPS,黑科技支持可以提升到300 500也就到头了
一块普通的SSD硬盘可以轻松到1万到2万,如果加上PCI Express接口还能提升更多。
SDD硬盘是互联网公司完成性能提升的有效方法。
CPU的主频为2GHz以上,也意味着20亿次/s,所以SSD硬盘和CPU的差距还是不小的。
6. HDD硬盘擅长顺序读写,不擅长随机读写。
而SSD硬盘顺序读写和随机读写都比机HDD硬盘强。
HDD硬盘相比固态硬盘的优势:耐用性。如果需要频繁写入删除数据,那么HDD硬盘更好。
SDD硬盘的寿命取决于擦除次数。芯片不同,擦除次数也不同。SLC芯片可以擦除10万次,MLC在1万次左右,而TLC和QLC只在几千次。
SSD硬盘适合读多写少的场景,而像MapReduce这种应用就不太适用。
7. 磁盘缓存(操作系统缓存、文件系统缓存)其实是内存中的一块区域,而不是磁盘中的空间。
二、文件系统(这个图是linux系统的)
1、文件的逻辑结构(用户眼中的文件)
(1)无结构的文件(流式文件)
以字符为单位,通过读写指针来操作。大多数现代操作系统如WINDOWS, UNIX, LINUX只提供流式文件
(2)有结构的文件 (记录式文件)
从操作系统看,逻辑记录是最小的项;从程序语言角度看,数据项是最小的项。
记录式文件一般由数据库管理系统或程序语言设计提供。
逻辑结构与物理结构不一定是一对一的关系,可能一对一、一对多或者多对一。
-- 定长记录文件:广泛应用于数据库文件中。
--变长记录文件:处理起来复杂、开销也大
2、文件的物理结构(具体存放方式)
(1)连续空间存放(连续结构):连续的物流块。读取大文件也只需要一次物理寻址时间(寻道时间 + 延迟旋转时间)。
只需要记录第一个物理块号 + 文件长度(物理块个数)
读取效率最高。
只有连续的文件才能存储在连续存储设备中。如磁带。
缺点:
对于随机方式访问效率低。
要事先知道文件大小。如果是预估,预估小于实际文件大小,那么无法处理;预估大于实际文件大小,那么浪费空间。
不利于新增、修改、删除:要挪动后面数据的位置。
- 也可优化下:不立即变动,而是记录下变动,等到累积一定量后定时去处理。
内存碎片
(2)非连续空间存放:不要求物理块相连,利于增、删、改
-- 链表方式存放(链表结构)
DOS、Windows系统采用,当然,采用的是显式链接结构。
--类型一:隐式链接结构:物理块中存放下一个物理块的地址。
缺点:只适合顺序访问,随机访问效率低
指针占用磁盘空间
有一个指针损坏,那么这个文件就无法恢复了。
优化:以相邻的几个物理块组成一个单位 -> 簇
只是优化而已,仍然有问题。
--类型二:显式链接结构:指向物理块的指针单独用表存- 文件分配表(FAT),这个表记录了整个盘的块号,读取文件时要把整张FAT表放到内存中。
相对于隐式链式结构,减少了磁盘访问,在内存中查询FAT表,也提高了效率
模式:文件目录(第一个物理块号) -> FAT表(物理块号和下一项的指针) -> 物理块
缺点:FAT表要读入在内存中,占用比较大的空间。
大文件进行存取时,随机存取效率也不高。
FAT32(32位):每一个簇占用4KB。 可以管理 4KB * 232 = 2TB大小。
缺点:有最小空间管理限制,至少65537个簇,所以不支持容量小于512M的分区
由于文件分配表的扩大,速度不如FAT16
单个文件长度不能大于4GB
不能向下兼容
-- 索引方式存放(索引结构):每个文件建立存放物理块号的索引表,索引表也是读入内存的。
链接方式的FAT表读取文件时要把整张FAT表放到内存中,而索引方式存放,只需要加载本文件相关的索引表。
模式:文件目录(第一个索引表指针的块逻辑块号) -> 索引表(逻辑块号,物理块号) -> 物理块
- 混合索引结构: Linux系统采用混合索引结构。
大文件时,如果索引表的大小超过一个物理块,可以将索引表本身作为一个文件,再建立一个一级索引。依次类推,可以建立多级索引。
将多种索引结构组织在一起就叫混合索引结构。
优点:解决了链式结构的内存占用大的问题。
顺序访问和随机访问都高效
碎片少
缺点:每个文件的磁盘空间浪费比较大,因为每个文件都有一张索引表。而索引表至少是一个物理块,对于中小文件不划算。
-- 散列结构(直接文件、散列文件、Hash文件):记录式文件中的关键字与物理位置建立关系。
是针对记录式文件存储在随机设备上的一种物理结构:记录的关键字同Hash函数建立起对应关系。
模式: 关键字 -> hash(关键字) -> 目录表 (hash结果,物理块号)-> 物理块
优点:存取速度快、节省空间。
缺点:只能按关键字存取,不能顺序存取
以上是关于硬盘与文件系统的主要内容,如果未能解决你的问题,请参考以下文章