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

相关推荐
SelectDB12 小时前
Apache Doris Variant 动态 JSON 实战教程:从建表到跑通 100M Agent 日志查询
数据库
AOwhisky12 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发
重生的黑客12 小时前
Linux 进程优先级、切换与调度:从孤儿进程到 O(1) 调度模型
linux·运维·服务器·进程优先级·nice
sg_knight12 小时前
MySQL 存储过程详解:从入门到实战
android·数据库·mysql·database·dba·关系型数据库·db
Urbano12 小时前
夹克与商务单西口袋工序自动化技改研究报告
运维·自动化
星空露珠13 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
骑上单车去旅行13 小时前
MD5校验对比脚本
linux·服务器·windows
平生幻13 小时前
Linux 常用命令
linux
期待着201314 小时前
docker 安装 ,在centos7.9
运维·docker·容器
踏月的造梦星球14 小时前
DM8 DSC 单机双实例部署
运维·开发语言·数据库