硬盘与文件系统

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结果,物理块号)-> 物理块 

                  优点:存取速度快、节省空间。

                  缺点:只能按关键字存取,不能顺序存取

                    

          

           

 

以上是关于硬盘与文件系统的主要内容,如果未能解决你的问题,请参考以下文章

linux磁盘与文件系统管理/查看硬盘内存空间/文件系统的操作/ 文件的压缩和打包

磁盘管理与文件系统

Linux硬盘分区与文件系统---学习笔记

硬盘分区与挂载

Linux 硬盘与硬件管理

Linux文件系统与硬盘存储(分区格式化挂载inode软链接与硬链接)