本文旨在复习磁盘基础知识、分区基本概念

知识储备


  • 按照磁盘接口类型,常有ATA、SATA、SCSI、SAS、FC等;

  • 按照磁盘芯片组分,常有HDD机械式、SSD闪存式等;

  • 同一芯片组可能有多种类型的接口,比如SSD有PCI接口、mSATA、STAT3等接口;


HDD物理结构


wKiom1X2JR2AbQzVAANmlpEcOAk200.jpg


硬盘是一张张盘面叠放在一起组成的,绕着中心转轴spindle,每张盘2个面都可以读写,由磁头来读写

arm机械臂有众多磁头控制着存取操作,其实在每个盘面的2面各有1个磁头

Track:不同盘面上的同心圆环,每一个圆环就是一个磁道,显然外磁盘"面积">内磁道,从外至内编号,从0开始

Cylinder:不同盘面上的同心圆环在立体上形成了一个柱面,从外至内编号,从0开始

Sector:同心圆环上通常按照512bytes划分为一个扇区,请注意虽然外磁道"面积"大,理论上外磁道上面的扇区数目更多,实际上由于历史原因以及现代操作系统的管理方便,内外磁道上扇区数目是一致的,这样外磁道扇区稀,磁头存取错误发生概率越小,所以外磁道反而更加不易出错,更加稳定


MBR


  硬盘的0柱面,0磁道,1扇区这512Bytes是MBR主引导记录

wKioL1X2LO7yBZjdAAGE8hjTgPM512.jpg


常见性能指标


    影响磁盘的关键因素是磁盘服务时间,即一个I/O请求花费的时间Tio,由寻道时间、旋转延迟和数据传输时间三部分构成

磁盘的访问时:磁头找到访问数据的时间,是指寻道时间 (seek time) 和旋转延迟(Rotationallatency)之和。

寻道时间Ta:seek time是指移动到数据(扇区)所在的磁道上的时间,磁盘的平均寻道时间是3~15ms,

旋转延迟Tl:盘片旋转,是数据所在的扇区移动到磁道下面所需的时间

磁盘的传输时间Tt:磁盘数据传输到主机接口的时间,和主机连接磁盘的接口和类型有关,和磁盘的传输率有关


衡量磁盘的性能主要是下面三个指标


IOPS每秒能够完成的IO数据,对于OLTP型系统,IOPS是衡量IO性能的主要指标。

吞吐量:一般用MBPS,每秒传输的MB字节数来衡量,常用于衡量OLAP型数据块的IO性能。

响应时间:完成一个IO请求所需的时间,也叫做latency延迟时间,一般响应时间应该小于20ms


Linux对磁盘的识别


无论是硬盘、磁盘还是光盘在Linux中,还是遵循一切皆文件的原则,这些设备文件在/dev/目录下

硬盘设备/dev/sd[a-z][1-#]

    [a-z]用来标记和区分不同的硬盘,比如第一块硬盘是sda, 那么第二块就是sdb

   [1-#]用来标记同一块硬盘上的不同分区,1-4为主分区, 5-?为逻辑分区, 如sda5表示硬盘a上第一个逻辑分区

   由于MBR格式下,最多只有4个主分区,所以当存在逻辑分区时,sda4是不存在的~

wKiom1X2OQLwCHAoAAYJjAcbls0460.bmp


设备文件

    这是一种特殊的文件,没有大小,只有设备号的概念,由2部分组成 Major+Minor

    Major:标识设备类型,让内核Kernel识别配套的设备驱动

    Minor:同一类型下的不同设备,同一种驱动程序映射到同一类型下的不同设备

    块设备:非线性设备,数据存取以block为单位,随机访问的,现在主流磁盘都是这样

    字符设备:线性设备,顺序的一个接一个接受,如键盘


分区及文件系统


分割一大块存储空间为多个小的存储空间,每个存储空间叫做1个分区,每个分区可以有独立的文件系统

文件系统就是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。用户空间是不能直接在硬件设备上存取文件等操作的,靠的就是文件系统这个桥梁


常见的文件系统有

Linux
ext2, ext3, ext4, reiserfs, xfs, btrfs, swap
Windows
fat32(vfat), ntfs
Unix
ffs, ufs, jfs, jfs2
光盘
iso9660
网络文件系统
nfs, cifs
集群文件系统
ocfs2, gfs2
分布式文件系统
ceph,moosefs, mogilefs, hdfs, gfs, glusterfs

   操作系统支持的文件系统各不相同,通常来说Linux支持的文件系统是非常多的,毕竟开源!文件系统也有分类,比如日志型文件系统[ext3、4等,现在主流都是]和非日志型文件系统[ext2],在下文阐述。


文件系统、逻辑块、物理块、扇区的关系以及日志型文件系统


   我们知道一个文件可能由一个或多个分散在不同位置的[未必连续]的物理块Block组成,而操作系统如何知道这些物理块到底在哪儿呢?这和之前所说的文件由自身数据+元数据组成,元数据就是记录了这些具体的相关的信息!

    ● 1个或若干个扇区Sector ---> 组成了物理块Block

    ● 一个或多个物理块Block ---> 组成了逻辑块Logical Block 通常物理块和逻辑块大小是一样的

    ● 用户文件操作时将请求提交给文件系统,文件系统通过逻辑块和物理块的映射找到物理块,通过物理设备进行存取

                                            wKioL1X2PYaRiTJ9AADKqex-8tY938.jpg

 

日志型文件系统


    指的是在存储空间上,找出一个额外的空间做日志区域,用来临时存取元数据。当创建文件时,先将文件元数据存放在这儿,将userdata写到存储空间,当彻底完成后转移日志区域的元数据到存储空间的元数据空间。

    这样做的优点很明显:当正在写入文件时,很不幸出现了意外当机,那么重启后要想恢复数据只需要对日志区域进行遍历即可,通常这个时间是很短的[如果是非日志型文件系统那么需要对整个磁盘分区进行遍历,耗时场,资源消耗大]

                    wKiom1X2PivCpRtmAAE2RDyS3co381.jpg


VFS虚拟文件系统


    各种文件系统有各自的文件组织形式和数据结构,在介绍了多种文件系统后,不得不面对的现实是编程人员需要依据各种不同的文件系统来写程序吗?显然会有解决方案,VFS就是这种解决方案。

    VFS是一种中间层,能够屏蔽底层各种文件系统的差异性,统一整合兼容地通过标准接口提供给需要者使用。

            wKiom1X2QbXgwTOIAABYo0Ru6fo956.jpg

Swap分区


    在存储空间上,划分出一块分区做swap分区,这个分区很特殊不用来永久存储数据而是作为内存的拓展与补充。

    当Mem不足时,可以将Mem中不常用的页面调度到Swap分区中,用以支撑大内存程序的运行,好处显而易见。