zoukankan      html  css  js  c++  java
  • 硬盘与文件系统

               硬盘与文件系统

     

    一、机械硬盘HDD与固态硬盘SSD

      

      1.概念

        (1)盘面号(磁头号)
            硬盘的每一个盘片都有两个盘面(Side),即上、下盘面,一般每个盘面都会利用,都可以存储数据,成为有效盘片,也有极个别的硬盘盘面数为单数。
            每一个这样的有效盘面都有一个盘面号,按顺序从上至下从“0”开始依次编号。在硬盘系统中,盘面号又叫磁头号,因为每一个有效盘面都有一个对应的读写磁头
       (2)磁道:磁盘在格式化时被划分成许多同心圆,这些同心圆轨迹叫做磁道(Track)。

       (3)柱面:所有盘面上的同一磁道构成一个圆柱,通常称做柱面(Cylinder),每个圆柱上的磁头由上而下从“0”开始编号。
       (4)扇区:即磁盘块、物理块。

           现代系统中,一般是512B大小,即512字节。

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

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

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

                        

              

               

  • 相关阅读:
    C 指针运算 指针访问数组
    C 字符串操作函数
    C putchar getchar
    C语言 指向函数的指针变量基础
    Openstack L2GW Plugin installation
    nova + ironic node
    cgroup
    ironic pxe tftp(二)Permission denied
    ironic bind port neutron port
    Failed to start OpenBSD Secure Shell server
  • 原文地址:https://www.cnblogs.com/caoshouling/p/13339262.html
Copyright © 2011-2022 走看看