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

相关推荐
GIOTTO情1 小时前
Infoseek舆情处置技术解析:基于AI大模型的全链路自动化处置方案
运维·人工智能·自动化
kidwjb1 小时前
Linux共享内存
linux·服务器·进程间通信
情绪总是阴雨天~1 小时前
大模型 Function Call(函数调用)详解:原理、实践与数据库智能查询 Agent
前端·数据库·人工智能
红茶要加冰1 小时前
七、正则表达式
linux·运维·正则表达式·shell
ALINX技术博客1 小时前
【黑金云课堂】FPGA技术教程Linux开发:串行通信接口与实时时钟模块
linux·fpga开发
华万通信king2 小时前
企业微信机器人Webhook开发实战:从配置到生产级调用
运维·自动化·企业微信
m0_702036532 小时前
如何从Oracle Java调用外部API_HTTP请求在数据库Java Source中的实现
jvm·数据库·python
六月雨滴2 小时前
数据库权限管理(Privilege Management)
数据库·oracle·dba
sulikey2 小时前
ext2 GDT 块组描述符表 详细技术拆解
linux·操作系统·文件系统·ext2·gdt·ext·块组描述符