Linux-【文件系统上】

一、理解硬件

我们把文件存在磁盘上,OS是如何帮助我们精准的找到我们需要的文件?

在系统中,文件是一种目录结构,是树状的;我们可以通过**路径【绝对或者相对】**来定位文件;所以就需要文件在磁盘上的保存是合理、合法、合规

从磁盘的物理存储到逻辑寻址,从文件系统的组织管理到文件的软硬链接,每一个环节都决定了 Linux 对文件的高效操作。

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

  • 机械磁盘是计算机中唯一的一个机械设备
  • 磁盘在我们的体系结构中:属于外设
  • 速度比较慢:离CPU比较远
  • 容量大,价格便宜

例如:其实我们生活中的一些数据,很少查看。比如5、6年前的朋友圈,所以公司会把冷门数据分离,存在一些便宜且容量大的磁盘上。

磁盘盖上之后 , 很密封的 ~

  • 我们可以把一个盘片想象成由若干个小磁铁组成的 , 被打磨光滑的;因为磁铁它有N/S两级,正好可以表示我们计算机世界的二进制 0/1 ;
  • 计算机硬件的物理结构不同,但是最终都会做成两态的(网络的有无 ;波形的高低)
  • 在高温环境下,磁盘会退磁; 所以机房一定是禁止高温 / 禁止火种的 , 防止磁盘退磁 , 数据丢失

1.2 磁盘物理结构

磁盘的核心物理组件包括盘片、磁头、磁头臂、主轴,其存储的核心单位是扇区 (512 字节),这是磁盘读写数据的最小物理单位,磁盘也因此被称为块设备

  • 磁道 :盘片表面的同心圆轨迹 ,从外圈到内圈编号靠近主轴的磁道仅用于停靠磁头,不存储数据;
  • 柱面 :所有盘片上相对位置相同的磁道 构成柱面,磁头臂上的所有磁头是 "共进退" 的,这是磁盘寻址的关键特性;(记住:共进退 != 共写入)
  • 磁头 :每个盘片有上下两个盘面 ,每个盘面对应一个磁头,负责读写对应盘面的磁道数据。

1.3 磁盘的存储结构

扇区:是磁盘存储数据的基本单位512字节,块设备

磁头在传动臂的带动下,共进退

b)图:有3片磁片,6面磁面

磁盘在写入数据的时候 , 是向 柱面 进行批量写入的!!!

问:512字节,写入一个扇区中 , 磁盘应该如何运动 ???

1. 寻道阶段:移动磁头到目标柱面(Cylind)

磁臂带着所有磁头一起径向移动 (共进退),直到目标磁道所在的柱面位置

2. 旋转等待阶段:等待目标扇区转到磁头(Head)下

  • 盘片以恒定转速(如 7200 转 / 分钟)持续旋转
  • 磁头已经停在目标柱面后,等待目标扇区旋转到磁头正下方
  • 这段等待时间称为旋转延迟,平均为半圈旋转时间。

3. 数据写入阶段:磁头写入数据

  • 目标扇区(Sector) 完全对准磁头时,磁头在盘片旋转过程中连续写入 512 字节。
  • 写入时磁头不径向移动,仅随盘片旋转完成扇区数据的磁化记录。
  • 整个扇区写入完成后,磁头保持当前柱面或准备下一次寻道。

CHS地址定位:

文件 = 内容 + 属性 ; 内容是数据 , 属性(权限、创建时间、名字....)也是数据 ;对文件的存储,无非就是存储在一个又一个的扇区里 ,能定位一个扇区 , 也能定位多个扇区。

1.4 磁盘的逻辑结构

1.4.1 理解过程


磁带上面可以存储数据,我们可以把磁带"拉直",形成线性结构

那么磁盘本质上虽然是硬质的 ,**但是逻辑上 ,我们可以把磁盘想象成为卷在一起的磁带,**那么磁盘的逻辑存储结构我们可以类似于 :

定位一个扇区 , 我们就可以只用一个数字【数组下标】来表示 ;

1.4.2 真实过程

一个细节 : 传动臂上的磁头是共进退

概念 编号起点 编号方向 / 规则 备注
磁道 0 盘片外圈 → 内圈递增 单盘面内的环形轨迹
柱面 0 与磁道号一致,外圈 → 内圈递增 多盘面同半径磁道的集合
物理扇区 1 单磁道内圆周方向递增 CHS 寻址中使用
逻辑扇区 0 全磁盘线性递增(柱面→磁头→扇区) LBA 寻址中使用,与 CHS 可转换

柱面是一个逻辑上的概念 , 其实就是每一个面上 , 相同半径的磁道逻辑上构成柱面。
所以 , 磁盘物理上分了很多面 , 但是 , 在我们看来 , 逻辑上 , 磁盘整体是由 " 柱面 "卷起来的~

磁道 :
柱面 :
  • 柱面上的每个磁道 , 扇区个数都是一样的
  • 这不就是二维数组
整盘:
  • 整个磁盘不就是多张二维的扇形数组表
  • 所有寻址一个扇区 : 先找到哪一个柱面 , 再确定柱面内哪一个磁道(其实就是磁头位置),再确定扇区 , 所以就有了CHS
  • 之前学过C/C++的数组,在我们看来,其实全部都是一维数组


所以,每⼀个扇区都有一个下标,我们叫做LBA(Logical Block Address)地址,其实就是线性地址。所以 怎么计算得到这个LBA地址呢?

LBA把磁盘上的所有扇区从0开始顺序编号,形成一个一维的大数组。操作系统只需告诉磁盘"我要读LBA地址为1000的扇区",磁盘内部的固件会自动将其转换为实际的CHS位置。
所以 , OS只需要使用LBA就可以了 !

  • LBA地址转成CHS地址 , CHS地址 转换为LBA地址 , 谁做 ?

  • 磁盘自己来做 (硬件电路 , 伺候系统)

  • 操作系统不再需要关心磁盘有多少个磁头、多少个柱面,只需要把磁盘当作一个巨大的字节数组即可。

1.5 CHS&&LBA地址

CHS转成LBA:

LBA转成CHS:

二、引入文件系统

2.1 引入"块"概念

1. 硬盘是典型的 "块" 设备 , 支持随机读取

2. OS文件系统访问磁盘 , 不以扇区为单位 , 而是以 "块"为单位 , 一般是4KB(可以调整)

  • 虽然扇区是磁盘的最小物理读写单位 ,但操作系统不会逐个扇区读取数据 ------ 效率过低。因此,文件系统引入了块(Block) 的概念,将连续的多个扇区划分为一个块 ,作为文件存取的最小逻辑单位
  • 最常见的块大小为 4KB(即 8 个 512 字节的扇区),块的大小在磁盘格式化时确定 ,且不可修改。块与 LBA 的转换关系也非常简单:
    • 块号 = LBA ÷ 8
    • LBA = 块号 × 8 + 块内扇区编号(n=0~7)

2.2 引入"分区"概念

柱面是分区的最小单位 , 我们可以利用参考柱面号码 的方式来进行分区 , 其本质就是设置每个区的起始柱面 和 结束柱面号码。把硬件上的柱面(分区)进行平铺,如下 :

相关推荐
寂柒5 小时前
信号量——基于环形队列的生产消费模型
linux·ubuntu
小陳参上5 小时前
用Python创建一个Discord聊天机器人
jvm·数据库·python
一袋米扛几楼986 小时前
【密码学】CrypTool2 工具是什么?
服务器·网络·密码学
changhong19866 小时前
如何在 Spring Boot 中配置数据库?
数据库·spring boot·后端
林姜泽樾9 小时前
Linux入门第十二章,创建用户、用户组、主组附加组等相关知识详解
linux·运维·服务器·centos
执笔画情ora9 小时前
Postgresql数据库管理-pg_xact
数据库·postgresql·oracle
xiaokangzhe9 小时前
Linux系统安全
linux·运维·系统安全
feng一样的男子9 小时前
NFS 扩展属性 (xattr) 提示操作不支持解决方案
linux·go
南棱笑笑生9 小时前
20260310在瑞芯微原厂RK3576的Android14查看系统休眠时间
服务器·网络·数据库·rockchip