0. 从快递系统引入文件系统
理解文件系统:菜鸟驿站的类比
在日常生活中,我们常常会使用到快递服务来寄送和接收包裹。这个过程虽然看似简单,但背后却有着一套复杂而有序的管理系统在支撑。今天,我们将通过一个类比——将文件系统与菜鸟驿站相比较,帮助大家更好地理解计算机中的文件存储原理。
磁盘等文件存储空间:菜鸟驿站
首先,想象一下磁盘就像是一个巨大的仓库——菜鸟驿站。它拥有特定的容量来存放各种大小的包裹(文件)。就像菜鸟驿站负责保管和管理每一个快递包裹一样,磁盘也是我们数据的“家”,无论是文档、照片还是视频,都被安全地保存在这里。
文件:一件件快递
接着,让我们来看看文件。在计算机的世界里,文件就是我们要存储和检索的数据单元,正如每个快递包裹一样,每个文件都有其独特的信息内容和用途。从一封电子邮件到一部电影,每一份文件都承载着不同的信息。
文件的存放目录:唯一货号
为了方便查找和管理这些“快递”(文件),我们需要一种方法来组织它们。这正是目录结构发挥作用的地方。就像菜鸟驿站使用唯一的货号(例如17-3-9018表示第17号柜的第3层的第9018号位置)来快速定位特定的快递,计算机中我们也使用路径名来指示文件的具体位置。比如/home/user/documents/report.docx
就是一个具体的文件路径,清晰地标明了文件在系统中的具体位置。
文件系统:快递系统的角色
最后,文件系统就如同整个快递系统,它不仅负责管理文件的存取,还处理诸如磁盘分区、格式化、错误检测与修复等任务,确保数据能够安全高效地存储和检索。文件系统跟踪文件的状态(如创建时间、修改时间、访问权限等),就像快递系统管理着快递从发货到收货的整个流程,并且监控着包裹的状态(如已发货、运输中、已到达等)
1、理解硬件
1.1 磁盘、服务器、机柜、机房
- 机械磁盘是计算机中唯⼀的⼀个机械设备
- 磁盘—外设
- 慢
- 容量大,价格便宜
(1)关于机房
在选择机房位置时,必须考虑散热效果和电力供应
为什么需要考虑散热效果?
服务器运行起来会产生大量热量,必须要考虑散热
高效的散热管理能够防止设备因过热而性能下降或损坏,同时降低冷却成本。
为什么需要考虑电力供应?
服务器一般运行起来就不会轻易关闭停止,则需要稳定且充足的电力供应,避免因停电导致的服务中断和数据丢失。
(2)磁盘的存储原理
磁铁:引出磁盘是如何保存数据的
磁铁通常由 N / S 南北极两段组成,有且仅有这两种磁极,而我们计算机存储数据是依靠 0/1 二进制存储,刚好也是两种模式,因此我们会通过设置磁体的磁极,用于表示二进制数据的 0/1
而一次性会通过几百亿个小磁铁分别表示二进制数据的 0/1 存储信息,这样使用磁体存储的设备就是磁盘!!
逻辑线:磁铁有且仅有 N / S 南北极 ——> 刚好对于 0/1 二进制 ——> 多个磁铁存储二进制数据 ——> 即为磁盘
(3)如何销毁磁盘
国家规定互联网公司,若需要停用某块磁盘机房,就需要销毁磁盘,因为需要保证用户的信息不被泄漏,而一般不会通过格式化的方式销毁数据,因为数据是可以恢复的,因此需要另寻他法:直接将磁盘消磁!使得该磁盘直接不能使用了,一般消磁方式:高温消磁
1.2 磁盘物理结构
磁头和盘片是不接触的,但是距离比较近:中间有真空
盘片是非常光滑的,当磁盘中进灰了,在盘片高速旋转和磁头摆动时,容易刮花盘片
同时磁盘一般不要剧烈晃动:可能会造成磁头和盘片接触,刮花盘片
导致物理上数据的丢失,因此,有时候磁盘中某些文件打不开了,可能就是磁盘自己该部分被刮花了
1.3 磁盘的存储结构
确实,扇区是磁盘存储数据的基本单位,通常大小为512字节,尽管现在也有一些硬盘使用(4KB)作为其基本的扇区大小。以下是关于扇区以及为什么磁盘被称为块设备的简要介绍:
扇区
- 定义:扇区是磁盘上最小的物理存储单元,最常见的是512字节大小,但也有部分现代硬盘采用4KB大小(4096字节)。
- 操作方式:当我们向磁盘写入数据时,并不是直接对某几个字节进行修改,而是需要将包含目标位置的整个扇区读入内存中。在内存中完成修改后,再将整个扇区的数据写回磁盘。
块设备
- 概念:由于数据的读取和写入都是以一个或多个完整的扇区为单位进行的,因此像硬盘这样的存储设备被称为“块设备”。这意味着数据传输是以固定大小的数据块(即扇区)为单位进行的。
一般一个磁盘会记录自己有多少个扇区,因为扇区是磁盘记录数据的基本单位
命令:fdisk -l /dev/vda
盘片旋转 和 磁头臂摆动
盘片按照一个方向不停高速旋转:定位扇区
(顺时针和逆时针旋转都有,不同磁盘转速不同)
磁头臂不停上下摆动:定位磁道
侧视盘片 与 读写磁头
通过一张侧面的硬盘结构图讲解如下
实际上磁盘是有多个盘片组成的,每个盘片正反面都能存储数据,都是通过传动臂作为笔写入:
如何定位⼀个扇区呢?
CHS地址定位法:定位目标扇区
CHS
地址定位法
1、定位柱面(cylinder C
)
2、定位磁头(header H
)
3、定位扇面(sector S
)
4、最后找到该扇面
盘片旋转,磁头摆动:两两配合,用于读写磁盘数据
CHS定位的过程:先定位在哪个柱面上读写数据(即定位柱面 C ),再定位是该柱面上的哪一层(即哪一个盘面:定位磁头 H),最后依靠该盘面旋转到磁头的位置上(定位扇面 S )
定位扇区本质就是读写数据:文件由 内容+属性,本质都是数据,一个文件可能会占据多个扇区,既然能够定位一个扇区,就能定位多个扇区,就能用于读写一整个文件数据
扇区的大小
学到这里肯定有一个疑问:圆的半径不同,扇区的弧度大小也不同,那每个扇区都是 512 字节大小吗?
我们本文讲解暂时将扇区都统一理解成大小相同:外圈大扇区存储密度小,内圈密度大,保证存储大小一致
实际上现代技术已经可以做到扇区密度相等,即外圈大扇区的存储大小可以很大,内圈的可以很小
磁盘容量的计算
磁盘容量 = 磁头数 × 磁道数 × 每道扇区数 × 每扇区字节数
- 磁头数:即为 盘面数
- 磁道数:即为 柱面数
1.4 磁盘的逻辑结构
磁头是同进退的:理解柱面
磁头有多个,磁头臂也有多个,但是传动臂只有一个,因此所有磁头实际上就是一起运动的
既然所有磁头都是共进退的,则每次运动到一个位置,所有磁头能访问的位置,逻辑上可以构成一个圆柱
柱面是一个逻辑上的概念,其实就是每一面上,相同半径的磁道逻辑上构成柱面。
所以,磁盘物理上分了很多面,但是在我们看来,逻辑上,磁盘整体是由“柱面”卷起来的,就跟山楂一样。
LBA 逻辑块寻址:线性结构的磁盘
抛开磁盘的整体结构,只看一个盘片,先研究一个盘片,再拓展到全部,从小到大理解
磁盘作为线性结构
当你把磁盘像磁带一样拉直成为长条的线性结构后,这样的线性结构,想不想一个数组结构!!!
数组结构:在这个线性结构中,每个扇区就像是数组中的一个元素。通过给每个扇区分配一个唯一的数组下标,我们可以快速定位到特定的扇区。
数组下标的0和1:为什么扇区数组下标从 1 开始,不是零?这是一种标准或协议的规定,并不是技术上的必然选择,而是为了遵循某些历史惯例和兼容性考虑。
逻辑块寻址(LBA)
- 定义:逻辑块寻址是一种为存储设备上的数据块(通常是扇区)提供唯一地址的方法。它允许操作系统以一种简单且直接的方式访问磁盘上的任何位置,而不必关心底层硬件的具体细节。
- 英文名:Logical Block Addressing, LBA
- 线性地址:在LBA模式下,每个扇区都被赋予了一个独一无二的线性地址。这个地址就是该扇区在整个磁盘(视为线性结构)中的位置标识符。例如,在一个具有2048个512字节扇区的磁盘上,第一个扇区的LBA可能是1,最后一个则是2048。
在逻辑上,即从逻辑块寻址(LBA)的角度来看待磁盘结构,可以将磁盘视为一个巨大的一维数组。每个扇区相当于这个数组中的一个元素,每个元素都有一个独一无二的索引号,即LBA值。这种理解方式极大地简化了对磁盘上数据的访问和管理过程。
在物理上,磁盘是一种一维二维三维的结构,如下:
一维二维三维的结构
磁道展开:某一盘面的某一个磁道展开
即一维数组
柱面展开:整个磁盘所有盘面的同一个磁道
-
柱面上的每个磁道,扇区个数是一样的
-
这不就是二维数组吗
整个磁盘展开:就是多个柱面展开的合体,即为三维数组!
因此,我们的磁盘的物理结构可以抽象理解成 逻辑上的 三维数组结构!
定位扇区,也就是定位三维数组中的某元素 !
一维二维三维的作用
定位一二三维的过程和机制就是前面讲解过的 CHS
!!
C
为柱面 :即定位三维体中的二维面
H
为磁头,即盘片 :即定位二维面中的一维线
S
为扇区:即定位一维线中的具体一个位置点
为什么名为顺序 CHS
,因为他的寻址顺序就是如此!先柱面,再磁头,再扇区
有了 LBA 地址,是否还需要CHS定址法?
问题:既然有 LBA 逻辑上将磁盘抽象成一维数组结构 的这样 “极简化结构”,是否还需要CHS定址法这样 三维 的 “复杂结构”?
- 毕竟 LBA 逻辑下的磁盘是一个巨大的一维数组,定位扇区只需要给出扇区的一维数组下标,直接一步定位即可
- 而 CHS 定址法却需要 C、H、S 三步!
答: 必须要!因此磁盘本身的结构决定,就是 CHS 模式,也必须通过 CHS 的模式来寻找定位扇区
而 LBA 定址法是方便操作系统通过数组下标的形式,便利定位与操作磁盘扇区。
(1)操作系统和 LBA
对于操作系统来说,使用 LBA(逻辑块寻址)是最常见的做法。LBA 提供了一个线性的、连续的地址空间,使得操作系统可以更方便地管理和访问硬盘上的数据。操作系统通过 LBA 地址来请求读取或写入特定的扇区。
(2)硬盘内部的 CHS 转换
虽然现代硬盘和操作系统主要使用 LBA 进行寻址,但硬盘控制器内部仍然需要将 LBA 地址转换为 CHS(圆柱号、磁头号、扇区号)来实际定位和访问物理扇区。这是因为在物理层面上,硬盘的结构仍然是基于圆柱、磁头和扇区的。(每个 圆柱(柱面) 包含多个磁道,每个磁道对应一个磁头,每个磁道上有多个扇区。)
(3)总结
操作系统通过 LBA 方式定位磁盘扇区位置,而磁盘本身还需要将操作系统给的 LBA地址转换成 CHS 地址,来定位某个扇区物理位置
对于磁盘来说,会将 CHS 地址转换成 LBA 地址,返回给操作系统用于操作
因此,因为在物理层面上硬盘的结构仍然是基于圆柱、磁头和扇区,因此硬盘寻址底层上还是需要使用 CHS 方式寻址,只不过在表层操作系统操作磁盘时,是通过 LBA 的方式寻址,为了便于操作(这个根源就是硬盘的物理结构决定的)
LBA 地址 和 CHS 地址的相互转换
上面讲解了 磁盘的 LBA 地址 和 CHS 地址会进行相互转换,这个操作主要是由 磁盘自己来做:相关固件(硬件电路,伺服系统)
总柱面,磁道个数,扇区总数等信息,在磁盘内部会自动维护,上层开机的时候,会获取到这些参数。
LBA 地址 和 CHS 地址的相互转换本质是:三维地址和一维地址的相互转换
前置知识
柱面和磁道都是从 0 开始编号的
扇区号通常是从 1 开始的,而在 LBA
中,地址是从 0 开始的
柱面号是指该三维数组中哪一个二维平面
磁道号是指该二维数组中哪一排一维数组
扇区号是指该一维数组中哪一个元素位置
CHS 转成 LBA:三维地址转换为一维地址
- 磁头数 * 每磁道扇区数 = 单个柱面的扇区总数
- LBA = 柱面号C * 单个柱面的扇区总数 + 磁头号H * 每磁道扇区数 + 扇区号 S -1
- LBA = 前面有多少组二维数组 + 本二维数组的前面有多少组一维数组 + 本一维数组中的位置 - 1
理解了 CHS 转成 LBA,就能够反过来理解:
LBA转成CHS:一维地址转换为三维地址
柱面号C = LBA / (磁头数 * 每磁道扇区数) // 就是单个柱面的扇区总数
磁头号H = (LBA % (单个柱面的扇区总数)) / 每磁道扇区数
扇区号S = (LBA % 包磁道扇区数)+1
"/":表示除取整
简单来说:
柱面号C = 总数LBA中有多少个 完整柱面
磁头号H = 最后一个不完整柱面中,有多少个完整的一维数组
扇区号S = 最后一个不完整一维数组中,剩余的数字+1 就是扇区号
因此,从此往后,在磁盘使用者看来,根本就不关心 CHS
地址,而是直接使用 LBA
地址,只需磁盘内部自己转换
从现在开始,磁盘就是一个 元素为扇区 的一维数组,数组的下标就是每一个扇区的 LBA
地址。OS
使用磁盘,就可以用一个数字访问磁盘扇区了。