【Linux学习】文件系统 - 揭秘磁盘存储结构与存储原理

news2024/11/16 12:40:03
🍑个人主页:Jupiter.
🚀 所属专栏:Linux从入门到进阶
欢迎大家点赞收藏评论😊

在这里插入图片描述

目录

  • `🍑磁盘文件管理`
    • `🚀磁盘的机械构成`
    • `🌌磁盘的物理存储`
    • `🍑存储原理`
    • `📕磁盘的逻辑存储`
    • `🦅文件名`


🍑磁盘文件管理

前面几篇都是说的被打开的文件,那系统中没有打开的文件呢?

  • 系统中没有被打开文件存储在磁盘/SSD中。其中,没有被打开的文件也需要被OS管理,我们随时随地都需要打开磁盘中的文件,那么怎么才能将磁盘中的文件快速找到呢?所以,OS需要将磁盘中的文件进行管理。 如何让OS快速找到文件。

🚀磁盘的机械构成

磁盘的机械构成主要包括以下几个部分:

磁盘盘片(Platters)

  • 作用:硬盘存储数据的核心部件。
  • 特点:盘片的数量可以从一片到多片不等,通常盘片越多,硬盘的存储容量越大。每个盘片都有两个盘面,即正反两面都可以存储数据。

主轴马达(Spindle Motor)

  • 位置:位于盘片的中心。
  • 作用:负责驱动盘片以恒定的速度旋转,转速越高,硬盘的数据访问速度越快。

读写头(Read/Write Heads)

  • 作用:每个盘片表面都有一个读写头,用于读取和写入数据。
  • 特点:读写头悬浮在盘片表面上非常微小的距离内(通常是几十纳米),这样可以避免与盘片接触并造成损害。

机械臂杆(Actuator Arm)

  • 作用:读写头被安装在臂架上,臂架的运动使读写头能够在盘片的半径方向上移动,从而访问盘片上不同轨道的数据。

🌌磁盘的物理存储

磁盘存储的详细结构

  • 磁道(Tracks):每个盘面被划分为一个个磁道,这些磁道是同心圆环,从外围开始编号,从0开始。
  • 扇区(Sectors):每个磁道又被划分为若干个扇区,扇区是磁盘的最小组成单元,通常是512字节或4KB(高级格式化)。扇区是硬盘的最小存储单元
  • 柱面(Cylinders):柱面是所有盘面中相同磁道的柱面,形成的是一个立体的柱体形状。磁盘的柱面数和磁道数是相等的,盘面数等于总的磁头数。

存储容量计算

  • 存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区的字节数

其中,磁头沿着半径方向左右摇摆,定位在哪一个磁道,马达带动盘片旋转,定位在磁盘的哪一个扇区

怎么定位一个扇区?

CHS定位法

  • 定位在哪一个磁道(cylinder)
  • 定位使用哪一个磁头(head)
  • 定位在哪一个扇区(Sector)

🍑存储原理

任何文件的数据都是存储在多个扇区中的,只需要将文件使用过的扇区记录下来,就能找到文件的数据。

写入数据

  • 当计算机需要将数据写入磁盘时,首先将待存储的数据传输给磁盘控制器。
  • 磁盘控制器再将数据传输给磁头。
  • 磁头通过在磁盘表面上产生磁场来磁化磁盘表面上的磁性材料,从而存储数据。这些磁区可以通过改变磁盘表面上的磁极方向,表示不同的数据位。
  • 磁头通过移动磁盘上的臂部将磁头定位到特定的扇区上,然后通过改变磁头的电流来磁化磁盘表面,写入数据。

读取数据

  • 当计算机需要读取磁盘上的数据时,磁盘控制器会指示磁头移动到包含所需数据的磁道上。
  • 磁头会定位到具体的扇区上,并检测该扇区中的磁场变化。
  • 通过将磁场变化转换为数字信号,磁头将读取的数据传输给磁盘控制器,进而传输给计算机进行处理。

📕磁盘的逻辑存储

我们将一个磁盘抽象成一个磁带,将磁带拉出来,扯平了就是一个线性的结构,类似于将每一个盘面的磁道打开,拼接成一个长的线性空间。如下图:假设磁盘总存储大小为:800G
在这里插入图片描述

但是OS认为,一次和磁盘IO一个扇区单位太小了,OS系统文件认为,IO的基本单位是4KB(8个连续的扇区),不同的OS有不同的区别,基本单位是可以更改的。如下图:

在这里插入图片描述

一个磁盘往往会进行分区,比如电脑上的D,E,F盘,OS在管理每一个区的时候,还会进行分组,每一组由很多个4KB数据块组成。其中分区与分组中有特有的数据段。如下图:


Linux文件特性:文件 = 内容+属性,并且内容与属性分开存储的
其中,内容是可变的,大小不确定,属性是确定的,只是属性的内容不一样。
注意:文件名不属于文件属性;

存放文件属性的struct inode结构体大小固定的,为128字节。

inode编号整个分区唯一的,其中ls -i 选项可以查看文件的inode编号;
系统中,标识一个文件不直接是文件名,而是inode编号。

认识一下分区分组中的数据段:

  • inode Table:里面有很多个连续的128字节的空间,每一个空间存放文件的属性 如 :文件大小,所有者,最近修改时间等
  • inode Bitmap :inode Table对应的位图,标识inode Table的使用情况,每个bit表示一个inode是否空闲可用。
  • Data blocks(数据区):该区域被划分为很多个以4KB为单位的数据块,存储文件的内容。
  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用。
  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息,例如块组的整体使用情况等。
    - 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。Super Block只在个别的Block group中有,本质是进行数据备份。
  • Block Group:文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。

删除文件直接将inode bitmap与block bitmap删除即可,不需要将属性与内容删除,使用时覆盖即可。

文件内容与属性怎么关联的?

文件属性结构体中,包含一个int block[15],就是来存储该文件所使用的数据区里面的数据块的编号,其中,[0,12]为直接映射,[12,13]为间接索引(不保存文件内容,保存的文件使用的数据块的编号),[13,14]为三级索引。所以,有了文件的inode编号,就有了文件属性与内容;

怎么通过一个文件的inode编号找到文件的?

每一个分区的inode编号有一个范围,先根据inode编号确定是在哪一个分区的,然后减去该分区的起始inode编号,去inode bitmap中看是否存在,如果存在就去inode Table中查找文件即可。
在这里插入图片描述

🦅文件名

目录也是文件,也有自己的inode编号,目录的内容里面放什么呢?
任何一个普通文件都在一个目录中。
目录内容放的是文件名与inode的映射关系
如果一个目录没有r,w权限的表现在这里就很好理解了。

对于一个文件的增删查改,都和该文件所处的目录有关系的。
增删查改,都必须先找到文件,找文件就是找到该文件的inode,就需要先找到文件的目录,通过目录的内容找到该文件名与inode的映射关系。

那怎么找到目录呢

  • 查找一个文件,在内核中,都要逆向的递归般得到``根目录/,其中,根目录的inode编号是确定的,然后从根目录进行路径解析`,查找文件。

怎么知道该文件在哪一个分区呢?

  • 通过该文件的路径前缀可以直接区分处在哪一个分区下的。

将属性和数据分开存放的想法看起来很简单,但实际上是如何工作的呢?我们通过touch一个新文件来看看如何工作。

[root@localhost linux]# touch abc
[root@localhost linux]# ls -i abc
263466 abc

为了说明问题,我们将上图简化:

在这里插入图片描述
创建一个新文件主要有一下4个操作:

  1. 存储属性
    内核先找到一个空闲的i节点(这里是263466)。内核把文件信息记录到其中。
  2. 存储数据
    该文件需要存储在三个磁盘块,内核找到了三个空闲块:300,500,800。将内核缓冲区的第一块数据复制到300,下一块复制到500,以此类推。
  3. 记录分配情况
    文件内容按顺序300,500,800存放。内核在inode上的磁盘分布区记录了上述块列表。
  4. 添加文件名到目录

新的文件名abc。linux如何在当前的目录中记录这个文件?内核将入口(263466,abc)添加到目录文件。文件名和inode之间的对应关系将文件名和文件的内容及属性连接起来。

删除文件

将文件名在目录内容中做字符串匹配,找到文件的inode编号,将inode bitmap与block bitmap删除,不需要将属性与内容删除,使用时覆盖即可,然后将目录中的映射关系删除。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1988534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

XML 发票解析

文章目录 1. xml 类型发票格式2. 数据提取思路2.1 项目结构 3. 提取实现3.1 实体类3.2 提取工具类3.3 controller3.4 service 4. 结果展示 1. xml 类型发票格式 本文解析的xml类型的发票格式如下 2. 数据提取思路 通过遍历xml文件中的标签去获得标签对应的文本 2.1 项目结…

MySQL的简单介绍

文章目录 数据库关系型数据库非关系型数据”数据库的概念和用途MySQL数据库服务器、数据库和表的关系数据库的创建和删除表创建表修改常见的数据类型和约束字符串类型日期和时间类型PRIMARY KEY使用AUTO_INCREMENT使用UNIQUE使用FOREIGN KEY使用 SQL语言基础SQL语言简介SQL分类…

基于Spark的豆瓣书籍推荐系统的设计与实现-计算机毕业设计源码53447

摘要 本论文主要论述了如何基于Spark开发一个豆瓣书籍推荐系统,本系统将严格按照软件开发流程进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述豆瓣书籍推荐系统的当前背景以及系统开发的目的,后续章节将严…

谷粒商城实战笔记-MySQL踩坑记录

文章目录 1, Public Key Retrieval is not allowed问题描述解决办法 2,1044 -Access denied for user root% to database解决方案 1, Public Key Retrieval is not allowed 问题描述 打开DBeaver连接MySQL提示“Public Key Retrieval is no…

大数据信用报告查询有什么作用?怎么选择查询平台?

随着互联网的快速发展,人们的金融行为越来越多地依赖于网络平台。然而,网络上的金融交易存在着一定的风险,为了有效地防范这些风险,金融机构采用了大数据技术进行风险控制,下面,小易大数据平台将详细介绍大…

20240807 每日AI必读资讯

👨‍💼马斯克再发难、OpenAI 高层巨变:两大核心人物离职,总裁休长假到年底 - OpenAI 联合创始人 John Schulman 官宣离职,加入原是竞品公司的 Anthropic - 陪伴 OpenAI 共同成长 9 年的总裁兼联合创始人 Greg Brockm…

《计算机组成原理》(第3版)第3章 系统总线 复习笔记

第3章 系统总线 一、总线的基本概念 总线是连接多个部件的信息传输线,是各部件共享的传输介质,如图3-1所示。 图3-1 面向CPU的双总线结构框图 倘若将CPU、主存和I/O设备都挂到一组总线上,便形成单总线结构的计算机,如图3-2所示…

【自动驾驶】ubuntu server安装桌面版

目录 安装桌面版当锁屏界面使用root用户登录错误时 这里环境一开始是ubuntu20.04服务器版本 安装桌面版 sudo apt-get update sudo apt-get upgrade apt-get install -y ubuntu-desktop # 如果你不想安装一些附加的程序,可用以下命令 sudo apt install --no-instal…

java创建多线程方式

文章目录 概要继承 Thread 类实现 Runnable 接口实现 Callable 接口线程池 概要 继承 Thread 类 public class Test extends Thread {Overridepublic void run() {System.out.println("current thread is:" Thread.currentThread().getName());}public static voi…

Aigtek超声功率放大器在建筑结构检测中的应用

超声功率放大器是一种可以可放大交、直流信号的功率放大器。它可以用来驱动高压型负载。通过与主流的信号发生器配套使用,实现信号的放大,因此超声功率放大器在建筑结构检测中有着良好应用,今天Aigtek安泰电子就为大家介绍一下。 什么是超声波…

拓普壹老阳:人力rpo项目如何做才会成功?

为了成功执行老阳推荐的人力RPO项目(招聘流程外包),关键在于几个核心要素的有效整合和执行。RPO项目不仅仅是简单地外包招聘流程,更是通过优化流程、提升效率和质量,帮助企业实现人才招聘的战略目标。 首先,项目的成功与需求分析和…

PID控制算法

关于PID算法最全的文章!从浅入深快速掌握 GitHub - br3ttb/Arduino-PID-Library

STM32F28335:按键实验

一个简单的按键实验: 每一个按键的功能是不一样的 其中不知道为什么key3出现了问题,可是查不出原因,就先放在这里了 按键采用行列扫描的方式判断 大家可以自己看资料 看管脚和资料是程序猿的基本功 代码: key的驱动 keys.c…

【Java】Java泛型、集合、UML统一建模语言、final关键字

昨天在昆仑巢,下午练习Spring Boot的过滤器Filter。 昨天傍晚开始阅读《疯狂Java讲义(第2版)》,熟悉了UML建模语言、Final修饰符、List集合和泛型。 1.UML建模语言: 13种图,常用的包括用例图、类图、组件图、部署图、顺序图、活动图和状态机…

【ai】 时间序列分析的python例子

时间序列分析 :分析和理解随时间变化的数据序列 在gcc的趋势滤波后,需要对排队延迟梯度进行检测及调整,参考的是一个阈值, 调整阈值时就使用了时间序列分析技术: 时间序列分析是统计学和数据分析中的一种技术,用于分析和理解随时间变化的数据序列。时间序列数据具有时间上…

活动易企秀H5场景秀源码系统 带完整的安装代码包以及搭建教程

在数字化营销飞速发展的今天,H5页面以其独特的互动性、高度的传播性和良好的兼容性成为众多企业及个人宣传推广的首选。而“活动易企秀H5场景秀”作为一款广受欢迎的在线H5创作工具,凭借其丰富的模板、简易的操作流程,让非技术背景的用户也能…

MySQL笔记(八):事务

一、事务 事务用于保证数据的一致性,它由一组相关的dml组成,该组的dml语句要么全部成功,要么全部失败:转账。 事务和锁:当执行事务操作时(dml语句),mysql会在表上加锁,防止其他用户…

【Mysql】第十四章 使用C语言链接(环境配置+连接库+sql函数)

文章目录 1.下载库2.上传库3.编译库4.连接库创建对象-mysql_init连接数据库-mysql_real_connect关闭数据库连接-mysql_close 5.sql函数设置编码格式-mysql_set_character_set发送请求-mysql_query获取查询结果-mysql_store_result获取查询结果的行数-mysql_num_rows获取查询结果…

案例开发-日程管理2第一期(超详细教程、配备图文和源代码注释,没学过也能看懂)

文章目录 一、 项目前期准备1.数据库准备2.导入依赖3.pojo包处理4.dao包处理5.service包处理6.controller包处理7.加密工具类的使用8.页面文件的导入 总结 一、 项目前期准备 1.数据库准备 创建schedule_system数据库并执行如下语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHE…

国产AI大模型:从萌芽到繁盛,未来可期

I一、AI****大模型的起源 自1950年图灵提出著名的“图灵测试”以来,人工智能领域经历了从学术探索到实际应用的转变。1956年达特茅斯会议上“人工智能”一词的首次提出,标志着AI正式成为学术研究的焦点。进入21世纪,随着计算能力的显著提升和…