Linux文件系统(下)

目录

前言

0.文件的长期存储

1.磁盘如何定位一个扇区

2.虚拟到物理映射

3.分区、分组与inode

4.软硬链接与文件访问


前言

在博主的【Linux文件系统(上)】一文中介绍了有关文件系统在Linux操作系统平台上加载到内存中后是如何进行管理的,本文要介绍的是在磁盘中的文件是如何存储的。

注意:文件系统是管理磁盘上数据读写的重要一环,目前已经有很多成熟的文件管理系统,本文选择以ext2文件系统为例介绍文件系统。


0.文件的长期存储

在高中物理,我们了解到自然界中有一些物质可以磁化且可以长时间保持磁性的物质利用这种物质可以制作一个磁体,磁体具有同性相斥异性相吸引的性质。在计算机中数据最终都会被转化为二进制数据进行存储,一位二进制数只有01两种可能,所以科学家利用磁体的性质制作了磁盘盘片这种可以用来长时间存储数据的介质。给磁盘盘片赋予磁性的是我们的磁头,通过对磁头的通断点来改变磁盘盘片某一部分的极性,就可以实现对磁盘盘片上数据的擦除和写入。

图1        磁盘内部图(图片来源网络)

磁盘的最小的存储单元是扇区,即当我们想要对该扇区中的数据进行修改的时候,需要将整个扇区的内容加载到内存中,传统扇区的大小是512字节(但是现在也出现了4KB扇区的磁盘,感兴趣的读者可自行了解,这不是本文的重点,故不多作介绍)。

1.磁盘如何定位一个扇区

要阐述这个问题,我们先要了解一下磁盘盘片区域划分与名称。

图2        磁盘盘片划分

了解了磁盘盘片的区域划分结构后,那么如何定位一个盘片上的扇区呢?

图3        磁盘概念图

在图1中我们观察右侧的实物图,在图1中包含磁头和摞在一起的磁盘盘片,一个磁盘盘片分为上下两面,每一面都配有一个磁头,磁头与盘片间不接触。将事物图抽象一下就是我们的图3,在图3中可以看到磁臂和机械臂杆,这两者共同作用可以令磁头有一定幅度的摆动,注意所有磁头都是一同摆动的共进退的,磁盘中间的转轴可以令磁盘旋转。所有的磁头一同摆动配合着磁盘的旋转相当于一个柱面,这个时候操作系统选择对应的磁头,就可以定位到对应盘片的扇区。(CHS定位法)

2.虚拟到物理映射

介绍完物理上如何寻找一个扇区,那么在计算机上如何抽象出寻找扇区的逻辑呢?

我们将磁盘中的所有盘片想象成一个线性连续储存结构(数组),该数组的一个下标对应一个扇区。这样对扇区的操作就抽象成了对数组的操作。

如何根据数组下标寻找某个磁盘盘片上的某个扇区(假设数组下标为index):

首先,根据一个盘片容纳数据的总量,可以计算推导出一个盘片包含多少个扇区,我们假设一个盘片可以容纳x个扇区。

int a=index/x;

int b=index%x;

a就是数组中的元素位于哪个盘片,b就是在对应盘片从0开始的偏移量。

前文介绍到了磁盘IO的基础单位是扇区,但是Linux认为一次读取512字节的数据量过小,所以Linux操作系统认为一IO的基本单位是4KB的数据,也就是8个扇区的大小,我们将连续的8个扇区称为一个数据块 。

3.分区、分组与inode

在第一、第二部分主要解释了物理和抽象结构中如何查看定位一个扇区,那么一个文件是如何存储在磁盘上的,为了将数据存储在磁盘上,操作系统需要做哪些工作?

在解释这个问题之前我们可以参考一下我们的Windows平台下的电脑,Windows平台下的图形化界面非常可以非常直观的看到:Windows显示在该电脑上有两块“盘”,可事实真是这样吗?

图4        操作系统分区图

答案是否定的,观察图5不难发现博主的电脑上只有一块SSD,其中对C盘、D盘的描述是基本数据分区,而不是某某磁盘。

图5        SSD空间分配图

实际上一个磁盘,安装后,一定不会被立即使用,其一定会先被进行分区处理,一方面,磁盘中需要装载相应的文件系统,这一部分一般不建议让用户感知到。另外,还可能为恢复文件单独分区,用来存储备份的文件系统等必要的文件,以确保文件系统的发生错误时,可以从恢复区中恢复文件系统。

对于我们用户能接触到的所谓的C盘、D盘其实也是分区,我们称这些分区叫做基本数据区,对于基本数据区,还要对其进行分组处理。而后在所分的块组存储元数据和数据。

图6        分区、分组、块组关系图

关于分组策略的优点、元数据概念、数据存储的解释:

Ⅰ、元数据(inode)

元数据指的是对数据属性、来源、关系等方面信息的集合。在文件系统中,文件的权限、创建时间、修改时间访问时间等信息就是元数据的一部分。

元数据存储在图6所示的inode Table中,通过inode Bitmap来查看标识inode Table某一位置是否被使用。注意:inode在分区内唯一,且文件名不属于元数据。

Ⅱ、数据的存储

一个在计算机上存储的文件包括文件内容和属性,文件的属性也就是我们说的元数据,文件的内容就是我们说的数据,数据存储在Data blocks中,Block Bitmap用来表示对应的数据亏块是否被使用。

对数据进行删除时只需要将对应的inode bitmap和block bitmap对应的位置0即可。

Ⅲ、分组策略的优点:

①独立性:ext系列文件系统的块组与块组相对独立,每个块组独立的管理自己的元数据和数据信息。

②固定结构:每个块组都有相似的管理结构,比如每一块组都含有inode、block和其管理信息,这使得在为块组空间的开辟和管理更加有序,比如需要写入数据时,操作系统可以先查找空闲的inode和数据块。

③局部性原理的体现:文件系统在存储数据的时候会尽量将相关性强的文件存储到一个块组中,这样当操作系统读取数据的时候可以减少磁头在盘片上的摆动耗时,进而提高文件访问效率。

④冗余和恢复机制:虽然每个块相对对立,但是在每个块间存在一些联系和冗余机制,文件系统可能会在一些块组中存储一下重要的元数据,保证磁盘在一定限度内损坏时文件系统的恢复能力,这样的数据通常包含在Group Descriptor Table中。

在图6中还有两个块的组成部分没有谈,它们分别是Super block和Group Descriptor Table。

Super block通常位于文件系统的第一个块组上,存储着有关文件系统本身的结构信息,其主要包含的信息有:整个分区的inode、block的总量、使用情况、剩余情况、最近一次写入时间、最近一次挂载时间等,这一部分数据存在的意义是引导文件系统读取数据。如果这一部分数据发生损毁,可以说文件系统就被损毁了。

Group Descriptor Table中存储了Block Bitmap和inode Bitmap的存储位置信息和其所在块组的inode、bolck的使用情况等信息。

4.软硬链接与文件访问

用户创建的文件一定位于基本数据区,我们可以将某一分区视作一个目录,在这个目录下创建一个文件,这个文件一定会有一个文件名,在第3部分中讲解到inode在某一分区内唯一,所以将创建的文件名与某一inode相绑定,就创建了一个文件,对文件的读写,其实就转换成了对文件名绑定的inode进行读写。

试想一下,在你的Windows电脑上有一些文件的快捷方式,这些快捷方式可以让我们快速访问到目标文件,这个过程就与软连接类似(软连接是支持跨文件系统的而快捷方式不支持跨文件系统访问),软连接创建的文件是一个独立的文件,其有对应的inode。

硬连接不具有一个独立的inode,其与链接的文件同用一个inode,硬连接相当于在原文件的访问额外开辟了一个通道,此时对链接的文件的引用计数加1,当删除文件时,只有当链接的引用计数为0时才会擦除磁盘上的数据。

ln -s [链接文件] [生成的链接文件名]     //软连接
ln [链接文件] [生成的链接文件名]       //硬连接 
图7        查看软硬连接inode差异
图8        利用软硬连接文件向对应文件中写入数据        

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

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

相关文章

电脑上如何多开微信软件(多个微信同时使用)

想登录几个就下面这种文件里,复制几行即可: 创建的是以 .bat 文件结尾的txt文件(先创建一个txt文本文档,等写好了命令保存后,再把文件的后缀名改为: .bat )再保存即可。然后,右键以管理员运行&a…

【WRF工具】WRF Domain Wizard第一期:软件下载及安装

【WRF工具介绍】WRF Domain Wizard下载及安装 1 WRF Domain Wizard 的主要功能2 使用 WRF Domain Wizard 的步骤2.1 安装 WRF Domain Wizard:2.2 启动 WRF Domain Wizard:2.3 定义计算域:2.4 生成配置文件:2.5 运行 WPS 和 WRF&am…

多维时序 | Matlab基于BO-LSSVM贝叶斯优化最小二乘支持向量机数据多变量时间序列预测

多维时序 | Matlab基于BO-LSSVM贝叶斯优化最小二乘支持向量机数据多变量时间序列预测 目录 多维时序 | Matlab基于BO-LSSVM贝叶斯优化最小二乘支持向量机数据多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于BO-LSSVM贝叶斯优化最小二乘支…

从ANN到SNN的转换:实现、原理及两种归一化方法【MINIST、实战】

从ANN到SNN的转换:实现、原理及两种归一化方法 引言 随着神经形态计算的迅猛发展,脉冲神经网络(Spiking Neural Networks, SNNs)作为一种仿生神经计算模型,逐渐展现出其在低功耗和事件驱动计算领域的巨大潜力。不同于…

苹果cms多语言插件,插件配置前端默认语言采集语言等

苹果CMS(maccmscn)是一款功能强大的内容管理系统,广泛应用于视频网站和其他内容发布平台。为了满足全球用户的需求,苹果CMS支持多语言插件,使得网站能够方便地提供多语言版本。以下是关于苹果CMS多语言插件的详细介绍&…

dubbo一

Dubbo 分布式系统的演进 SOA面向服务架构 NSA微服务架构 节点与网络 分片和冗余 分布式系统挑战 分布式系统特性与衡量标准 一致性理论 强一致性ACID CAP 弱一致性BASE 一致性算法 dubbo dubbo六大核心功能 API与SPI

一键生成中秋国风插画!FLUX中秋专属Lora的使用教程

如何在中秋节期间快速生成富有节日气氛的国风插画吗? 不需要复杂的设计技能,或者手绘功底。只需借助FLUX中秋专属Lora-中秋国风人物插画v1.0_FLUX, 就可以轻松实现一键生成精美插画,特别适合用于宣传海报、包装设计等场景。 这个…

gin集成jaeger中间件实现链路追踪

1. 背景 新业务线带来新项目启动,需要改进原有项目的基础框架和组件能力,以提升后续开发和维护效率。项目搭建主要包括技术选型、框架搭建、基础服务搭建等。这其中就涉及到链路追踪的内容,结合其中的踩坑情况,用一篇文章来说明完…

高通Liunx 系统镜像编译

本文将会介绍如何在编译高通Liunx代码, 具体可以在高通 Linux | 高通下查看相关信息。 编译服务器配置 首先,准备一台Ubuntu 22.04版本主机或者服务器 1,编译Yocto 系统,需要如下一些配置 sudo apt update sudo apt install repo gawk wg…

C++——STL(list类)

1.list的介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素…

音视频入门基础:AAC专题(5)——FFmpeg源码中,判断某文件是否为AAC裸流文件的实现

一、引言 通过FFmpeg命令: ./ffmpeg -i XXX.aac 可以判断出某个文件是否为AAC裸流文件: 所以FFmpeg是怎样判断出某个文件是否为AAC裸流文件呢?它内部其实是通过adts_aac_probe函数来判断的。从《FFmpeg源码:av_probe_input_for…

TCP socket

TCP的socket和UDP大同小异,基本的代码结构都是相同的。一些相同的接口本文就不赘述了,例如,socket,bind,有需要看这篇文章UDP socket 服务端server 两步:初始化服务端,运行服务端 初始化服务端 创建soc…

物品识别——基于python语言

目录 1.物品识别 2.模型介绍 3.文件框架 4.代码示例 4.1 camera.py 4.2 interaction.py 4.3 object_detection.py 4.4 main.py 4.5 运行结果 5.总结 1.物品识别 该项目使用Python,OpenCV进行图像捕捉,进行物品识别。我们将使用YOLO&#xff08…

人工智能——猴子摘香蕉问题

一、实验目的 求解猴子摘香蕉问题,根据猴子不同的位置,求解猴子的移动范围,求解对应的过程,针对不同的目标状态进行求解。 二、实验内容 根据场景有猴子、箱子、香蕉,香蕉挂天花板上。定义多种谓词描述位置、状态等…

Vue生命周期;Vue路由配置;vue网络请求;vue跨域处理

一&#xff0c;Vue生命周期 <template><div > <h1 click"changeText">{{ info }}</h1></div> </template><script> export default {name: HelloWorld,data(){return{info:"介绍组件生命周期"}},methods:{chang…

CenterNet官方代码—目标检测模型推理部分

CenterNet模型推理部分解析 CenterNet官方代码环境部署 CenterNet作为2019年CVPR推出的论文&#xff0c;论文中给出了官方代码所在的github仓库地址。https://github.com/xingyizhou/CenterNet。 整个代码的代码量并不是特别大&#xff0c;但整个项目的难点在于使用了老版本的…

Djourney新手入门基础,AI摄影+AI设计+AI绘画-AIGC作图

人工智能技术的飞速发展&#xff0c;AI正逐渐渗透进创意领域&#xff0c;特别是在摄影、设计和绘画方面&#xff0c;AIGC&#xff08;Artificial Intelligence for Generative Content&#xff09;技术正在重塑我们的创作方式。本文将深入探讨Djourney这款创新工具&#xff0c;…

XML_Tomcat_HTTP

第四章 XML_Tomcat10_HTTP 一 XML XML是EXtensible Markup Language的缩写&#xff0c;翻译过来就是可扩展标记语言。所以很明显&#xff0c;XML和HTML一样都是标记语言&#xff0c;也就是说它们的基本语法都是标签。 可扩展 三个字表面上的意思是XML允许自定义格式。但这不代…

推荐这款神器:Perplexity

今天推荐是一款AI搜索引擎&#xff0c;还支持gpt-4模型的使用&#xff0c;虽然4小时只能使用5次&#xff0c;但是相比于常规的搜索引擎&#xff0c;在某些方面还是很强的&#xff0c;个人感觉优于newbing。 页面简洁&#xff0c;没有广告&#xff0c;内容丰富&#xff0c;功能…

LinkedHashMap 如何实现排序

目录 一、LinkedHashMap二、排序实现三、代码片段分析 一、LinkedHashMap LinkedHashMap 是 Java 中的一个集合类&#xff0c;它是 HashMap 的一个子类&#xff0c;继承了 HashMap 的所有特性&#xff0c;并且在此基础上增加了一个双向链表来维护元素的插入顺序或者访问顺序。L…