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 内部,关于文件名如何处置,我们在后面会讲到。

相关推荐
xiaoye-duck22 分钟前
《Linux 网络编程》深入理解 IP 协议(二):网段划分、私有 IP 与 NAT 地址转换
linux·网络·ip
IvorySQL1 小时前
IvorySQL 5.6 发布:PG 18.6 内核升级,沙盒即开即用
数据库·人工智能·postgresql
zx_741484811 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS1 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
金士顿2 小时前
System.Text.Json Source Generator 深度解析:为什么 Native AOT 不喜欢反射
linux·asp.net core·arm64·net·native aot
CNSSIRD数据库2 小时前
中国企业环境信用数据库2003-2026
大数据·数据库·数据分析·论文笔记
wdfk_prog2 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
做运维的阿瑞3 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
fd32003 小时前
达梦数据库更新统计信息后仍走旧执行计划解决方案
数据库
百万蹄蹄向前冲3 小时前
密码都对Node.js却连不上Linux数据库
linux·mysql