hello~ 很高兴见到大家! 这次带来的是Linux系统中关于Ext系列文件系统这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢?
个 人 主 页: 默|笙

在这里插入图片描述



一、理解硬件—磁盘

我们可以讲文件分为两类,一类是已经打开的文件,它们被OS加载到了内存里面,而另一类文件就是没有打开的文件,文件在没有被打开时都是老老实实地呆在磁盘/硬盘里面的。

1.1 磁盘、服务器、机柜、机房

在这里插入图片描述

  1. 以上两个图片就是机械磁盘HDD,它与现在笔记本经常用到的SSD(固态硬盘)不同。机械磁盘的造价要更低,而SSD它的速度要更快,毕竟完完全全是电子结构。对于需要大容量存储的企业,机械磁盘是上选。图片1是封存好的一个机械磁盘,机械磁盘造完之后必须密封,里面不能有一丝灰尘,而图二是掀开金属板之后它里面的一个构造。
  2. 机械磁盘是计算机里面唯一的一个机械机构。它的读写靠盘片告诉旋转(5400/7200转/分),磁头用来读写。

在这里插入图片描述

  1. 这是一台服务器的照片,服务器是一个24小时不关机、负责存东西、跑程序、让别人能随时访问的超级可靠电脑。可以看到图中服务器共有24个如红圈圈出来的小格子,这些小格子都是能够像抽屉一样能被拉出来的,里面要存放的就是我们刚才所说的机械磁盘。

在这里插入图片描述

4.左边这个照片就是机柜,它里面放着的是上面所讲到的服务器。所谓企业级数据中心机房就放满了这种装满了服务器的机柜。机房能够提供海量数据存储和强大的算力,但它的维护成本也十分高昂,散热和电费等等都是问题。

1.2 磁盘物理结构

在这里插入图片描述

  1. 磁盘磁盘,为什么要叫做磁盘?有没有想过磁盘是如何存储数据的?对于计算机来说,要存储的数据只有0和1,而磁盘上面分布着无数的小磁铁,它的物理形态又是一个圆盘,合起来就是一个涂满了磁性材料的圆形盘片。改变这些小磁铁的南北指向就能够修改存储的数据,修改这方面的工作由磁头担任,至于如何修改?由于电磁不分家,就是用电改的,注意磁头是没有挨着磁盘的,而是有着一点点的距离,靠磁头隔空读写。

不能挨着也是有原因的,因为不能有摩擦,磁盘转的太快了,磁头如果挨着就很容易产生高温。而像磁铁这种有磁性的东西都是很怕高温的,因为会被消磁,磁盘要是被消磁数据就会丢失了。所以磁盘是不适合搬来搬去的,震荡可能会导致磁头碰到磁盘,这也是磁盘不适合用于笔记本的一个原因。

  1. 介绍一下其他器件的作用:
  • 主轴(马达):位于盘片中心,负责带动盘片高速旋转(常见转速有 5400 转 / 分、7200 转 / 分),让磁头能在不同位置读写数据。
  • 磁头臂:像一个机械手臂,带动磁头在盘片上方移动,精准定位到需要读写的位置。
  • 永磁铁:为磁头臂的运动提供稳定的磁场,帮助磁头精准定位。

1.3 磁盘的存储结构

磁道、柱面、扇区

在这里插入图片描述

  1. 当盘片高速旋转时,磁头会在盘片上面划出一圈圈同心圆,这些同心圆就是磁道。一个标准的 3.5 英寸磁盘,盘片上通常有数千到数万个这样的磁道。磁道是从盘片外圈往内圈进行编号0磁道、1磁道…靠近主轴的同心圆用于停靠磁头,不存储数据。
  2. 每一圈磁道又会被分为多个等长的弧段,这些弧段就是所谓扇区。它们是磁盘的最小物理存储单位,一个扇区的存储大小通常是512字节,这意味着所有IO操作都是要以512字节为单位进行存储。虽然离圆心越近,这个扇区就会越小,但我们认为,所有扇区的存储大小都一样且每圈磁道上面的扇区个数是一样的
  3. 一个盘片是有两面的,它不像光盘那样只有一面存储数据,而是正反两面都会存储数据。而且一般的磁盘不只有一个盘片,如上图,这个磁盘就有3个盘片,6个盘面用来存储数据。对于这六个盘面,它们所有半径相同的磁道在空间上就构成了一个柱面
  4. 磁盘容量 = 磁头数 * 磁道数 * 每道扇区数 * 每扇区存储大小。

在这里插入图片描述

  1. 一个盘面对应一个磁头,有多少个盘面就有多少个磁头。所以多个盘面的样子应该如图b那样。6个面就会有6个磁头。
  2. 所有盘面共旋转,所有磁头共进退。因为所有盘片都固定在同一根主轴上,由同一个马达驱动。而所有磁头都安装在同一组磁头臂上。
CHS寻址方式

如果我想向一个扇区写入大小为512字节的数据,应该怎么写进去?
想要往某个扇区写入数据,那么一定要找到目标扇区,如果我们能够定位一个扇区,也就意味着能够定位任意多个扇区,毕竟文件=内容+属性,而内容和属性无非都是数据。所以我们应该如何找到目标扇区?

  1. 通过对磁盘结构的了解,找某个扇区我们可以先定位磁头(磁头编号),知道要往哪个盘面上写,再定位这个盘面上的几号磁道,最后找到这个磁道上面的目标扇区。但是实际中应用的不是这种方法。因为所有盘面共旋转,所有磁头共进退。磁头臂一动,所有磁头就一起移到同一半径上,也就是我们说的同一个柱面,先确定柱面,然后再确定磁头,最后确定扇区,效率比较高。这种寻址方法叫做CHS寻址方式。

1.4 磁盘的逻辑结构

1. 理解过程

在这里插入图片描述

  1. 磁带盘有两个圆盘,上面缠着磁带,放音频的时候就把磁带从一个圆上的磁带缠到另一个磁带上面。这个缠有磁带的圆盘是不是就很像磁盘?如果我们将磁带都拉出来,就会形成一条长长的带子。那么我们是不是可以将磁盘想象成一个缠着磁带的圆盘,每一圈就是一圈磁道,同时也可以将这些磁道拉出来,形成一条长长的“磁带”。

在这里插入图片描述

  1. 对于其他的盘面也是一样,想象成一卷磁带然后把它们拉出来形成线性结构,如图,是不是就很像一个数组?这个数组的元素就是扇区,这样我们就能通过数组下标去标记每一个扇区了。这样我们就拥有了一个线性地址,我们把它称为LBA。
  2. 但这个抽象过程是有瑕疵的,只是方便理解。

2. 真实过程

在这里插入图片描述

  1. 我们之前提到过CHS寻址方式是先定位到目标柱面,现在,我们要将有多个盘片的磁盘看作一个整体,不以盘面作为分割单位,而是以柱面作为分割单位。这个磁盘就是以成千上万的柱面组成的。
  2. 所以我们的抽象过程也要做出一些改变,不是以盘面为单位拉出磁带,而是以柱面为单位。

在这里插入图片描述

  1. 一个柱面有多个半径相同的磁道,对柱面上的每一个磁道进行展开,然后把它们放在一起,由于每一个磁道上面的扇区数量都是一样的。所以这不就是一个二维数组吗?!

二维数组长方形的样子只是我们逻辑构思出来的,其实存储的时候是连在一起的长条。就是一个一维数组。

  1. 而由于一个磁盘有成千上万的柱面,而每一个柱面都可以抽象成一个二维数组,把这些二维数组组合在一起不就是一个三维数组了吗?所以柱面其实就是一个二维数组,而磁盘就是一个三维数组。这个三维数组对应的一组数字就是CHS地址。

在这里插入图片描述

  1. 上面也讲过,无论是二维数组还是三维数组,在存储的时候都是一个一维数组,所以每一个扇区都有一个数组下标,我们将这个地址叫做LBA地址,也就是线性地址

  2. 对于OS来说,它只用使用LBA地址就好,根本不用关心磁盘里面长什么样,CHS地址与LBA地址之间的转换由磁盘来做,磁盘根据CHS地址寻找扇区,OS利用LBA地址对目标文件进行IO操作。这样一来,无论磁盘结构怎么变,操作系统都能够统一使用,非常方便

1.5 LBA地址 && CHS地址

在这里插入图片描述

1. CHS转成LBA

  1. 单个柱面的扇区总数 = 磁头数 × 每磁道扇区数。
  2. LBA = 柱面号 C × 单个柱面的扇区总数 + 磁头号 H × 每磁道扇区数 + 扇区号 S - 1。
    即 LBA = 柱面号 C × (磁头数 × 每磁道扇区数) + 磁头号 H × 每磁道扇区数 + 扇区号 S - 1。
  3. 扇区号通常从 1 开始,LBA 地址从 0 开始。这是为什么以上公式-1的原因。
  4. 柱面和磁道都从 0 开始编号。
  5. 总柱面、磁道个数、扇区总数等信息由磁盘内部自动维护,上层开机时会获取这些参数。

2. LBA转成CHS

  1. 单个柱面扇区总数 = 磁头数 × 每磁道扇区数。

  2. 柱面号 C = LBA / 单个柱面扇区总数。

  3. 磁头号 H = (LBA % 单个柱面扇区总数) / 每磁道扇区数。

  4. 扇区号 S = (LBA % 每磁道扇区数) + 1。

  5. 其实它们之间的转换就是一维数组和三维数组的转换,就是要注意扇区号不是从0开始,所以有+1和-1。

向指定位置写入数据还离不开伺服系统控制器的帮助。
在这里插入图片描述
OS将写模式、LBA 地址和待写入数据交给硬盘控制器;控制器先把 LBA 转换成 CHS 地址,再交由伺服系统完成磁头的精准定位。最后,磁头将数据写入 CHS 地址标注的目标扇区中。


今天的分享就到此结束啦,如果对读者朋友们有所帮助的话,可否留下宝贵的三连呢~~
让我们共同努力, 一起走下去!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐