Linux 深入理解文件(Ext2文件系统:上)

磁盘

磁盘虽然不是最早的存储设备,但是现代的存储设备继承了磁盘的逻辑规范,所以了解文件系统,我们可以从磁盘的存储逻辑来入手。

我们并不需要太了解磁盘的结构,但简单说一下吧。如图片中的那个光滑的圆面,就是磁盘本体,其中心的一个原型机械结构叫主轴,可以让磁盘转起来。还有一个尖尖的东西叫磁头,就是通过这个东西来读取磁盘内容的。

磁盘其实是多层的结构,也就是有多个盘片,而且一块盘的两面都可以读取数据。

我们把一个盘面抽象一下:

一圈一圈的叫做磁道 ,对一个磁道进行划分,每一个划分区域就是扇面 ,这是磁盘存储数据的基本单位。而来自不同盘面的同一位置的磁道构成一个柱面

磁盘容量 = 磁头 数量 * 磁道 数量 * 每道扇区 数量 * 每扇区字节数量。

早期磁盘使用CHS寻址,C是柱面(cylinder),H是磁头(head),S是扇区(sector)。

我们想象一下将一个磁道拉直,就成了一个线性结构,类似一维数组。而将一整个盘面的磁道都拉直,不就类似一个二维数组了吗?再进一步,把所有盘片的磁道都拉直,那整个磁盘不就是多张二维的扇区数组表吗。所以,想要找到一个扇区,不就类似找数组下标了。这就是LBA地址。

虽然现在磁盘已经很少成为家用电脑的存储设备,但是现在我们使用的现代存储设备(尤其是 SSD)继承磁盘逻辑,本质上是为了兼容操作系统和文件系统,把物理上完全不同的结构,伪装成传统磁盘的样子。所以了解一下磁盘结构是十分有助于我们理解文件系统的。

硬盘是磁盘的一种,磁盘是一个广泛的概念 ,而我们上面说的磁盘其实属于机械硬盘 (HDD),而接下来提到硬盘基本指代固态硬盘(SSD)。

"块"的概念

操作系统读取硬盘数据时,一个一个的读取扇区数据效率太低,所以选择一次性连续读取多个扇区,就是一次性读取一个 "块" (block)。

硬盘的每个分区都被划分为一个一个"块",一个"块"的大小格式化的时候确定,不可更改。

"块"是文件存取的最小单位。

"分区"的概念

在 Windows 系统中,比如我们的日用电脑(通常只有一块硬盘),可以发现电脑被分为C盘,D盘等,这其实不是真的有多块硬盘,而是是硬盘的 "分区"(partition)。

但在 Linux 系统中,我们说过 "一切皆文件",那在这种情况下,又是怎么实现分区的呢?答案是通过柱面的号码来实现划分。柱面是分区的最小单位,我们只要设置好一个分区的起始柱面和结束柱面的号码,就可以做到分区了。

"inode"的概念

我们在学习 Linux 的最开始,就知道一个文件其实是由属性+数据组成的。我们通过"块"来存储了文件的数据,也需要一个地方来存储文件的属性,这个地方就是 "inode",索引节点。

一个 inode 有一个唯一的标识符,叫做 inode 号。

但有一个值得注意的点是:文件名这个属性并未纳入到 inode 内部,关于文件名如何处置,我们在后面会讲到。

相关推荐
TDengine (老段)几秒前
TDengine vs InfluxDB — 全方位对比
大数据·数据库·物联网·时序数据库·tdengine·涛思数据·iotdb
我的xiaodoujiao5 分钟前
Django 基础知识详细图文教程 4-Django 视图定义与使用
开发语言·数据库·后端·测试工具·django·sqlite
l1t6 分钟前
DeepSeek总结的DuckDB在 CI 中为 release 和 glibc CLI 构建启用 LTO - #24225
开发语言·数据库·ci/cd·duckdb
veminhe15 分钟前
`sqlalchemy` 基本使用
数据库
打团从来人不齐17 分钟前
Linux服务器搭建笔记-008:台式机共享WIFI
linux·服务器·笔记
2601_9620746825 分钟前
大数据-263 实时数仓 - Canal 工作原理 工作流程 MySQL Binglog基本介绍
大数据·数据库·mysql
2601_9621819628 分钟前
数据库之PostgreSQL详解
数据库·postgresql
天天喝旺仔32 分钟前
Docker 镜像瘦身实战:多阶段构建把体积缩小 90%
运维·后端·ci/cd·docker·云原生·容器·性能优化
疯狂打码的少年33 分钟前
【数据库技术】SQL概述与数据定义(DDL:CREATE/DROP/ALTER)
数据库·笔记·sql·oracle
数据库小学妹1 小时前
关系型数据库内置图查询来了:SQL/PGQ标准怎么用
数据库·图数据库·关系型数据库·图查询·数据库新特性