【Linux进行时】磁盘文件结构

news2024/11/27 14:39:07

磁盘

上篇文章,我们提及文件是存放在磁盘当中,本篇文件我们来了解一下磁盘的结构!!!

磁盘的概念:

❓什么是磁盘?

💡磁盘(disk)是指利用磁记录技术存储数据的存储器。

磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘([Hard disk](https://baike.baidu.com/item/Hard disk/2806058?fromModule=lemma_inlink),简称硬盘)。

磁盘的基本结构:

磁盘是我们电脑上的唯一的一个机械设备,目前我们的笔记本上可能已经不用磁盘了,而是固态硬盘 (SSD) 。相对而言用起来更快,效率更高。固态硬盘是另一种存储的方案,和磁盘的存储差别很大,单价比磁盘大很多。一般 500G 的固态基本上比同等的磁盘要贵个两三百块。

image-20231103161858154

🧊盘片:
磁盘通常由一个或多个盘片组成,这些盘片通常是由金属或玻璃等材料制成的圆形薄片。一个盘片有正反两个面。
🧊磁头:
磁头负责读取和写入数据。每个扇面都有一个磁头,它浮动在盘片表面上方,通过微小的电流在磁盘表面上读写数据。
🧊磁道(柱面):
扇面表面被划分为许多同心圆,每个圆被称为一个磁道。数据被写入或读取时,磁头会在特定磁道上移动。
🧊扇区:
磁道被进一步划分为多个扇区,每个扇区存储一定量的数据。磁盘中存储的基本单元,通常为 512 字节或 4 KB。

image-20231103162847190

CHS寻址方式:

❓通过上述的介绍我们大概知道了磁盘的结构。那我们现在思考一个问题,如何在一个磁盘上确定一个扇区呢?💡答案很简单,我们先确定一个盘面,盘面根据磁头( magnetic head)就可以确定了。再根据根据磁道也就是柱面(cylinder)定位扇区,最后在某个磁道上找到该扇区(cylinder),就可以定位到某个扇区了。这种磁盘寻址的方式是chs.

🧊因此以后找一个扇区只要

磁道(柱面): cylinder
磁头: head
扇区: sector

🧊而这种定位扇区的方法被称作 CHS 定位法。

磁盘的逻辑抽象结构:

通过上述我们知道磁盘寻址定位方式chs,但是这是物理寻址方式,操作系统是软件层,这套寻址方式看到不适操作系统。操作系统的上面怎么寻址管理磁盘上的数据的呢?我们先看看下面这张图片。

image-20231103163513913

类比于磁带,卷起来是圆形的,扯开是线性结构的。所以我们可以把磁盘盘片想象成线性结构。以OS为角度,则认为磁盘是线性结构,要访问某个扇区,只需要定位数组下标,也就是说知道这个扇区的下标就算定位了一个扇区。在操作系统内部,我们称这种地址为LBA(Logic Block Address)地址!而要写到物理磁盘上,我们就要把LBA地址转换成对应磁盘的三维地址CHS地址。总结来说,OS的地址为LBA地址,而对应的磁盘为CHS地址。

因为 OS 是以 4KB 为单位进行 IO 的,故 OS 读取的数据块要包括 8 个扇区,在 OS 的角度甚至可以不关心扇区。

只需要像计算机常规的访问方式那样: 起始地址 + 偏移量,即获取数据块第一个扇区的地址(下标) + 4KB(块的类型)即能访问的整个数据块。**

image-20231103163704433

文件系统:

🧊学习完上面的知识后,我们知道 OS 通过先描述再组织的方式将磁盘抽象成一个大数组进行管理。

🧊而具体管理的方法,就是我们接下来要讲解的内容了。

由于磁盘抽象成的数组过于庞大,首先第一步就需要将其分作几个区域。每个区域的管理方式都是一样的,因此只要管理好一个区域就相当于管理好整个磁盘了。(类似于 begin 和 end 进行下标的划分)

🧊虽然磁盘已经经历过一次分区,但是每个区的大小依旧十分庞大,我们还需要再进行一次分组

文件系统分组管理结构:

image-20231103170123771

由此管理每个区的任务就简化到了管理每个组,只要实现一个组的管理通过复制粘贴就可完成其他组的管理,进而完成整个区的管理,而管理好每个区就相当于管理好了整个盘。

🧊在每个区内都会有一个Boot Block,又名为启动块,在开机时会通过它读取 OS 镜像的地址,从而找到操作系统,若是这个区域损坏则会直接影响操作系统的启动

  • Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相

    同的结构组成。政府管理各区的例子

  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,

    未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的

    时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个

    文件系统结构就被破坏了

  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息,有兴趣的同学可以在了解一下

  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没

    有被占用

  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。

  • i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等

  • 数据区:存放文件内容

🧊我们常说,在文件 = 内容 + 属性,在 Linux 中内容和属性是被分开存储的。

一般而言,一个文件内部所有属性的集合就是 inode 节点(128字节),同时一个文件对应一个 inode。

🧊在一个分区中便会有大量的文件,因此就会又大量的 inode,由此需要将 group 中所有的 inode 管理起来,即 inode Table。

存储属性:

其中每个 inode 都有自己对应的编号,也属于对应文件的属性 id。我们可以通过 ls -i 查看文件的 inode 编号。

ls -i

image-20231103171350664

在之后的访问中,OS 也是根据 inode 编号来进行文件查找或读取内容。

内容存储:

🧊存完属性后,那考虑的便是如何存储文件内容。我们通过数据块来保存文件内容,所以一个有效文件保存内容至少需要 1 个数据块。

🧊而数据块在 Data Block 中,那么我们该如何定位文件对应的数据块呢?

🧊其实,在 inode 内部便会存入当前文件对应数据块的索引,之后在 Data Block 中定位即可。可以如此近似理解。

struct inode
{
    int number;
    ...//其他文件属性
    int datablocks[NUM]; 
};

深入理解文件操作:

如何理解inode:

**🧊Linux 系统中只识别 inode 编号,文件的 inode 中并不存在文件名,**文件名提供给用户使用的。我们又该如何理解这层关系呢?

image-20231103172034801

🧊创建一个目录文件后,我们可以观察到目录文件也有自己的 inode 编号,那目录中都存了什么数据呢?

🧊实际上,目录的数据块里保存的就是该目录下文件名与文件 inode 编号对应的映射关系,二者互为key值。

🧊因此,任何一个文件都应该在一个目录内部。

🧊同时,inode 可以用于确定分组,inode number 在一个分区中唯一有效,不能跨分区。(分组的起始位置 + 位图的位置)

创建一个新文件:

  1. 存储属性
    内核先找到一个空闲的i节点(这里是263466)。内核把文件信息记录到其中。
  2. 存储数据
    该文件需要存储在三个磁盘块,内核找到了三个空闲块:300,500,800。将内核缓冲区的第一块数据
    复制到300,下一块复制到500,以此类推。
  3. 记录分配情况
    文件内容按顺序300,500,800存放。内核在inode上的磁盘分布区记录了上述块列表。
  4. 添加文件名到目录
    新的文件名abc。linux如何在当前的目录中记录这个文件?内核将入口(263466,abc)添加到目录文
    件。文件名和inode之间的对应关系将文件名和文件的内容及属性连接起来。

image-20231103172319485

删除一个文件:

删除文件的话只需要修改两个 bitmap 即可,将空间空闲出来,下次便会直接覆盖写入

文件访问:

🧊当我们访问文件时:

首先在当前目录下,找到输入文件名对应的 inode 编号。
一个目录一定隶属于一个分区,结合编号在该分区中找到对应分组,在该分组的 inode table 中找到文件的 inode。
通过 inode 与对应的 Data Block 关联起来,于是便找到了相关数据,进而根据命令进行其他操作

如何存储大文件

🧊若是直接使用 inode 内部的数组直接索引 Data Block 中的内容,假设一个数组可以存 NUM 个内容,是否意味着我们最大只能存 NUM * 4KB 大小的文件呢?

🧊答案是否定的,我们可以使指向的数据块里的内容并非直接的数据,而是其他数据块的编号,由此拓宽文件的存储大小。

🧊这种索引方式称为二级索引。

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

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

相关文章

JVM运行时数据区-堆

目录 一、堆的核心概述 (一)概述 (二)堆空间细分 (三)jvisualvm工具 二、设置堆内存的大小与OOM 三、年轻代与老年代 四、图解对象分配一般过程 五、对象分配特殊过程 六、常用调优工具 七、Mino…

Python 潮流周刊#25:性能最快的代码格式化工具 Ruff!

△点击上方“Python猫”关注 ,回复“1”领取电子书 你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。标题取自其中一则分享,不代表全部内容都是该主题,特此声明。 本周刊由 Python猫 出品…

基于蜜獾算法的无人机航迹规划-附代码

基于蜜獾算法的无人机航迹规划 文章目录 基于蜜獾算法的无人机航迹规划1.蜜獾搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用蜜獾算法来优化无人机航迹规划。 1.蜜獾搜索算法 …

Java 开发常用的 Linux 命令

基本操作 Linux关机,重启 # 关机 shutdown -h now# 重启 shutdown -r now查看系统,CPU信息 # 查看系统内核信息 uname -a# 查看系统内核版本 cat /proc/version# 查看当前用户环境变量 envcat /proc/cpuinfo# 查看有几个逻辑cpu, 包括cpu型号 cat /proc/cpuinfo | grep name …

Camtasia Studio2024录屏软件适合教育和培训的工具

众所周知轻松维护视频一致性:通过将模板、库、主题、快捷方式、收藏夹和预设捆绑到一个文件中,以便跨计算机、团队和组织共享,轻松维护所有视频的一致性。从总体上来看录制屏幕和网络摄像头:从桌面捕获清晰的视频和音频,或录制摄像…

MySQL-慢sql语句分析

explain分析sql语句 如果一条sql执行很慢的话,我们通常会使用mysql自动的执行计划explain来去查看这条sql的执行情况。 语法格式: 效果如下 各字段含义 type:表示连接类型,性能由好到差的连接类型为NULL、system、const、eq_r…

2014年亚太杯APMCM数学建模大赛B题如何评价微信公众号求解全过程文档及程序

2014年亚太杯APMCM数学建模大赛 B题 如何评价微信公众号 原题再现 微信是腾讯公司推出的是一款跨平台的通讯工具。微信公众平台,是用户利用公众账号进行自媒体活动,简单来说就是进行一对多的媒体性的行为活动,如商家通过申请公众微信服务号…

马斯克的X.AI平台即将发布的大模型Grōk AI有哪些能力?新消息泄露该模型支持2.5万个字符上下文!

本文原文来自DataLearnerAI官方网站: 马斯克的X.AI平台即将发布的大模型Grōk AI有哪些能力?新消息泄露该模型支持2.5万个字符上下文! | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051699114783001 马斯克透露xAI…

Leetcode刷题详解——求根节点到叶节点数字之和

1. 题目链接:129. 求根节点到叶节点数字之和 2. 题目描述: 给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字: 例如,从根节点到叶节点的路径 1…

Zabbix如何监控腾讯云NAT网关

1、NAT网关介绍 NAT 网关(NAT Gateway)是一种支持 IP 地址转换服务,提供网络地址转换能力,主要包括SNAT(Source Network Address Translation,源网络地址转换)和DNAT(Destination N…

chrome好用的阅读工具【推荐】

1、插件名称:Circle 下载地址: circlereader.com/ Circle 可以提取网页中的内容信息,并进行重新排版,是浏览文章、新闻等内容的神器 看各大网站VIP : 2、油猴: 下载地址: https://www.tampe…

【2024最新】PE工具箱【下载安装】零基础到大神【附下载链接】

下载链接:点这里 1.PE (Portable Executable) 工具箱通常用于处理Windows可执行文件和动态链接库(DLL)的二进制文件格式。这些工具对于进行逆向工程、软件分析和系统维护等任务非常有用。以下是PE工具箱的一些常见功能和用法: 查…

汽车标定技术(四)--问题分析:多周期测量时上位机显示异常

目录 1.问题现象 2.数据流分析 ​​​​3.代码分析 3.1 AllocDAQ 3.2 AllocOdt 3.3 AllocOdtEntry 4.根因分析及解决方法 4.1 根因分析 4.2 解决方案 1.问题现象 在手撸XCP代码时, DAQ的实现是一大头痛的事情。最初单周期实现还好一点,特别是…

为你整理了一份抖音小店的高分打造指南

抖音小店是一种在抖音平台上运营的电商店铺。通过打造一个高分店铺,可以吸引更多用户关注和购买,提升销售业绩。下面四川不若与众将介绍一些打造高分店铺的方法。 首先,店铺名称和简介要吸引眼球。店铺名称应该简洁明了,容易被记住…

Java EE进阶2

包如果下载不下来怎么办? 1,确认包是否存在 2.如果包存在就多下载几次 3.如果下载了很多次都下载不下来,看看是不是下面几步出现了问题? 1)是否配置了国内源 settings.xml 2)目录是否为全英文,存在中文的话就修改路径 3)删除本地仓库的 jar 包,重新下载(可能由于网络的原…

线扫相机DALSA--常见问题六:PoCL供电设置

第一步:Connect power to the board J7 connector(J7供电) 第二步:Use CamExpert to enable the PoCL feature in the the Basic Timing category(打开PoCL)

Appium 移动端自动化测试,触摸(TouchAction) 与多点触控(MultiAction)

一、触摸 TouchAction 在所有的 Appium 客户端库里,TouchAction 触摸对象被创建并被赋予一连串的事件。 规范里可用的事件有: * 短按(press) * 释放(release) * 移动到(moveTo) * 点击(tap) * 等待(wait) * 长按(longPress) * 取消(cancel) * 执行(per…

将Series中每个值v替换为v在Series中升序排列时的位置值s.rank()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将Series中每个值v 替换为v在Series中 升序排列时的位置值 s.rank() 选择题 下列代码执行三次排名索引a的名次值分别为? import pandas as pd s pd.Series([3,2,0,3],index list…

Java高频面试题——Java基础篇

java基本数据类型及对应的字节数?什么是自动拆装箱?int与integer的区别?项目中如何使用? 1.java基本数据类型及对应的字节数? java总共有8中基本数据类型,整型4种,浮点型2种,字符类…

【微服务】mysql + elasticsearch数据双写设计与实现

目录 一、前言 二、为什么使用mysqles双写 2.1 单用mysql的问题 2.2 为什么不直接使用es 2.2.1 非关系型表达 2.2.2 不支持事务 2.2.3 多字段将造成性能低下 三、mysqles双写方案设计要点 3.1 全新设计 VS 中途调整架构 3.2 全表映射 VS 关键字段存储 3.2.1 最大程度…