【Linux】文件系统

文章目录

  • 文件系统
    • 1. 了解磁盘的物理结构
    • 2. 磁盘的具体物理存储结构
    • 3. 逻辑抽象
    • 4. 文件系统
    • 5. 软硬连接
      • 5.1 制作软硬连接,对比差别

文件系统

我们目前的文件都是被打开的,如果没有被打开那,在哪里?

一定不是在内存当中,只能在磁盘等外设当中存在着

磁盘文件,如果没有被打开,如何理解这些文件?没有打开的文件都有什么问题?

  1. 如何被合理存储的问题
  2. 主要是为了解决:快速定位,快速读取和写入 — 磁盘文件也是这样
  3. 目前我们标识一个文件主要是通过文件名的方式
    1. 如何定位一个文件
    2. 如何对文件进行读取和写入

1. 了解磁盘的物理结构

磁盘使我们计算机上唯一的一个机械设备,同时它还是外设,它表明了它加载到内存的速度非常慢

盘片一共有两个面,有一摞盘片,一面有一个磁头,一个磁头负责一个面的读取。

磁头和盘面是没有挨着的,距离依旧很近,对数据写入和读取,更改基本元素的南北极,读取南北极

向磁盘写入:N->S

删除磁盘数据:S->N

2. 磁盘的具体物理存储结构

尝试在硬件上,理解数据的一次读和写

磁盘中的基本存储单元:扇区,一个扇区是512字节或者4kb

一般磁盘,所有的扇区都是512字节。 通半径的所有扇区:磁道

只需要确定用哪一个磁头读取:

首先要定位哪一个面:在一个面上,如何在硬件上定位一个扇区?

  1. 先定位在哪一个磁道,由半径决定
  2. 在确定在该磁道,再确定在哪一个扇区–根据扇区的编号,定位一个扇区

柱面就是磁道

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

未来定义一个扇区 CHS定位法

一个普通文件(属性+数据)都是0,1数据,无非就是占用一个或者多个扇区,来进行数据存储的,我们既然能够使用CHS定位法定位任意一个扇区,我们就能够定位多个扇区,从而将文件从硬件角度,进行读取和写入

3. 逻辑抽象

如果操作系统能够得知任意一个CHS地址,就能够访问任意一个扇区,那么操作系统内部是不是直接使用CHS地址那?

不是,这是为什么?

  1. 操作系统是软件,磁盘是硬件,硬件定位一个地址CHS,但是如果操作系统直接用了这个地址,万一硬件变了?操作系统是不是也要发生改变。这不符合解耦的思想,操作系统要和磁盘做好解耦工作
  2. 即便是扇区,512字节,单位IO的基本数据量也是很小的!硬件512字节,操作系统进行IO,基本单位是4kb,这是非常浪费时间的、

磁盘:块设备,所以OS需要一套新的地址,来进行块级别的访问

这种磁带想必大家都见过,磁带本来是一个圆形的,但是如果我们将它拉直,是不是就是一个线性的

初步完成了一个从物理逻辑到线性逻辑的抽象的过程!!数组是天然有下标的

这个时候要定位一个扇区,只需要一个数组下标就可以了。

假设数组的下标是N, 而其中我们OS是以4kb为单位进行IO的,一个操作系统级别的文件要包括8个扇区!甚至在操作系统角度,并不关心扇区

计算机常规的访问方式:起始地址+偏移量的方式(语言,数据类型)我们只需要知道数据块的起始地址(第一个扇区的下标地址)+ 4kb的类型,我们把数据块看做一个类型

所以块的本质,就是一个数组的下标,以后我们表示一个块,就可以采用线性下标的方式,定位任何一个块了

OS->N->LBA->逻辑地址块,可是磁盘只认CHS所以我们要知道

LBA <-----> CHS的相互转化

这个相互转化,只需要了解就可以了

OS系统要管理磁盘,就将磁盘看成一个大数组,对磁盘的管理,变成了对数组的管理。先描述在组织

4. 文件系统

我们使用ls -l的时候除了看到文件名,还看到了文件元数据

每行包含7列:

  • 模式
  • 硬链接数
  • 文件所有者
  • 大小
  • 最后修改的时间
  • 文件名

ls -l读取存储在磁盘上的文件信息,然后显示出来。

这个信息除了通过这种方式来读取,还有一个stat命令能够看到更多信息

这个执行结果,我们需要了解几样东西

innode

  • 超级快(Super Block):存放文件系统本身的结构信息。记录的信息主要有:block和inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。 超级块在各个分区里都会存在,而且是统一更新的
  • GDT,Group Descriptor Table:块描述符,描述块组属性信息
  • 块位图(Block Bitmap):快位图里面记录了那个数据已经被占用了,那个数据没有被占用
  • inode位图(inode Bitmap):一般而言,一个文件内部所有属性的集合,inode节点(128字节),一个文件,一个inode其中即便是一个分区,内部也存在大量的文件即会存在大量的inode节点,一个group需要有一个区域,来专门保存该group内所有文件的inode节点。inode表分组内部,可能会存在多个inode,需要将inode区分开来,每一个inode都会有自己的inode编号!inode编号,也属于对应文件的id

而文件的内容是变化的,我们使用数据块来进行文件内容的保存的,所以一个有效文件要保存,就需要【1,n】数据块。如果是多个文件需要更多的数据块

Linux要查找一个文件,是根据inode编号来进行查找的,包括读取内容。一个inode对应一个文件,而改文件inode属性和改文件对应的数据块,是有映射关系的

将属性和数据分开存放的想法看起来简单,但实际上是如何工作的?

  1. inodeVS文件名

Linux只认识inode号,文件的inode属性中,并不存在文件名!文件名是用户给的

  1. 重新认识目录

目录是文件吗?是的,Linux下一切皆是文件,目录也有inode

  1. 任何一个文件,一定在一个目录内部,所以目录的内容是什么?需要数据块,目录的数据块里面保存的是该目录下文件名和inode编号对应的映射关系,而且在目录内,文件名和inode互为key值
  2. 当我们访问一个一个文件的时候,我们是在特定目录下访问的
    1. 先要在当前目录下,找到这个文件的inode编号
    2. 一个目录也是一个文件,也一定在一个分区里面,结合inode,在该分区中找到分组,在该分组中inode table中找到文件的inode
    3. 通过inode和对应的datalock的映射关系,找到文件的数据块,并加载到OS,并完成显示到显示器

如何理解文件的增删改查

根据文件名找到inode,再根据inode属性中的映射关系,设置block Bitmap对应的bit位,置为0就可以,最后inode number设置inode Bitmap对应的bit位设为0。删除文件,只需要修改位图就可以了

如果文件被误删了,我们该怎么办?

  1. inode确定分组,inode number是一个分区内唯一有效,不能跨分区
  2. 我们学习到的分区,分组,填写系统属性,都是OS完成的?分区完成之后,后面要让分区能够被正常使用,我们需要对分区进行格式化,格式化的过程,其实是OS向分区写入文件系统的管理属性信息
  3. 我们如果inode只是单单的用数组建立和datablock的映射关系,15 * 4kb,是不是意味着只能存放:60kb的数据

创建一个文件主要有以下4个操作:

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

5. 软硬连接

5.1 制作软硬连接,对比差别

软连接,类似Windows的快捷方式,软连接内部存放的都是自己所指向的文件的路径。软连接是一个独立的连接的文件,有自己的inode number,必有自己的inode属性和内容

建立软连接的命令是 ln -s 源文件 目标文件,其中 -s 表示创建软链接。例如,将 /home/user1/file1 创建一个软连接到 /home/user2/file2,可以使用以下命令:

ln -s /home/user1/file1 /home/user2/file2

这样,/home/user2/file2 就成为了 /home/user1/file1 的软链接,对 /home/user2/file2 的操作实际上是对 /home/user1/file1 的操作。

硬连接,硬连接和目标文件公用一个inode number,意味着,硬连接一定是和目标文件使用同一个inode的。那么硬连接究竟是干了什么,?建立了新的文件名和老的inode的映射关系,有多少个文件名指向我硬连接数,本质上是一个引用计数

建立硬连接的命令是 ln 源文件 目标文件,其中不需要使用 -s 参数。例如,将 /home/user1/file1 创建一个硬链接到 /home/user2/file2,可以使用以下命令:

ln /home/user1/file1 /home/user2/file2

这样,/home/user2/file2 就成为了 /home/user1/file1 的硬链接,对 /home/user2/file2 的操作实际上是对 /home/user1/file1 的操作。因为硬链接是对同一文件的多个名称,所以在文件系统中只有一个文件,所以无法在不同的文件系统中创建硬链接。

解释一下文件的三个时间:

  • Access:最后访问的时间
  • Modify:文件内容最后修改的时间
  • Change:属性最后修改的时间

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《论文阅读》Unified Named Entity Recognition as Word-Word Relation Classification

总结 将NER视作是word-word间的 Relation Classification。 这个word-word 间的工作就很像是TPlinker那个工作&#xff0c;那篇工作是使用token间的 link。推荐指数&#xff1a;★★★☆☆值得学习的点&#xff1a; &#xff08;1&#xff09;用关系抽取的方法做NER抽取 &…

论文阅读_MAE

论文信息 name_en: Masked Autoencoders Are Scalable Vision Learners name_ch: 带遮蔽的自编码器是大规模的视觉学习者 paper_addr: https://ieeexplore.ieee.org/document/9879206/ doi: 10.1109/CVPR52688.2022.01553 date_read: 2023-04-08 date_publish: 2022-06-01 tag…

快速分析一个行业,这个工具必不可少

今天主要介绍一个做细分市场选择的工具:战略定位分析SPAN矩阵。 SPAN属于细分市场的分类排序模型。 如果用一句话来介绍这个工具,那就是: 面对纷繁的选项,我们究竟该如何做选择? 小到每天中午吃什么饭,大到生死存亡,我们每天都在做着各种各样的选择。 说到吃饭,你…

Nuxt3中的常用seo标签

title标签&#xff1a;主要是为了告诉搜索引擎我们的网站标题是什么&#xff0c;然后搜索引擎才会根据你提供的的title给你打上tag&#xff0c;用户在搜索的时候才会搜索到你。meta标签&#xff1a;这个标签根据name的不同有很多中&#xff0c;和SEO相关的主要是namedescriptio…

HuggingGPT:一个ChatGPT控制所有AI模型,自动帮人完成AI任务

最强组合&#xff1a;HuggingFaceChatGPT ——HuggingGPT&#xff0c;它来了&#xff01; 只要给定一个AI任务&#xff0c;例如“下面这张图片里有什么动物&#xff0c;每种有几只”。 它就能帮你自动分析需要哪些AI模型&#xff0c;然后直接去调用HuggingFace上的相应模型&a…

Python 02 数据类型(04元组)

一、元组 元组和列表的唯一不同&#xff1a;不能直接对元组的元素进行修改&#xff0c;删除&#xff0c;添加。 不能修改 1.1 创建元组 1.1.1 创建一个空元组 touple1() # ‘() 里面没有元素&#xff0c;表示为空元组 1.1.2 元组可以容纳任意数据类型的数据的有序集合&…

CoppeliaSim安装教程(以前叫V-REP)

最近使用机器人仿真器CoppeliaSim做一些机械臂相关的东西&#xff0c;记录一下安装过程。 注意&#xff1a;CoppeliaSim使用广泛&#xff0c;我感觉最经典的一篇文章就是andy zeng等人使用CoppeliaSim仿真器和强化学习方法进行机械臂push and grasp的研究&#xff0c;参考文献在…

【李宏毅】深度学习——HW4-Speaker Identification

Speaker Identification 1.Goal 根据给定的语音内容&#xff0c;识别出说话者是谁 2.Data formats 2.1data directory 目录下有三个json文件和很多pt文件&#xff0c;三个json文件作用标注在下图中&#xff0c;pt文件就是语音内容。 mapping文件 metadata文件 n_mels:Th…

优思学院|《精益思想》让企业快速应对市场变化的利器

1985年&#xff0c;美国麻省理工学院的丹尼尔T琼斯&#xff08;Daniel T. Jones&#xff09;、詹姆斯沃默克&#xff08;James P. Womack&#xff09;等筹资500万美元&#xff0c;用了近5年的时间对90多家汽车厂进行对比分析&#xff0c;于1990年出版了《改变世界的机器》一书&…

贵金属技术分析的止损保护

前面说过我们这些小散户&#xff0c;最多也不过十几万或者几万美金的账户&#xff0c;没有必要想国际的一些大基金那样&#xff0c;又锁仓&#xff0c;又对冲什么的&#xff0c;我们资金小的投资者&#xff0c;足够灵活&#xff0c;自然有我们存活的方法。所以我们要注意发挥我…

算法题回顾:双指针链表系列集锦

1&#xff0c;合并两个有序链表 思路 创建一个指向空的新链表&#xff0c;用来存储合并后的链表&#xff0c;p指针指向该链表。创建双指针&#xff0c;分辨指向两个链表&#xff0c;用p1, p2表示while循环&#xff0c;依次判断两个指针指向数据的大小&#xff0c;将最小值赋值…

从零开始实现一个C++高性能服务器框架----日志模块

此项目是根据sylar框架实现&#xff0c;是从零开始重写sylar&#xff0c;也是对sylar丰富与完善 项目地址&#xff1a;https://gitee.com/lzhiqiang1999/server-framework 简介 项目介绍&#xff1a;实现了一个基于协程的服务器框架&#xff0c;支持多线程、多协程协同调度&am…

Vue3走马灯(Carousel)

Vue2走马灯&#xff08;Carousel&#xff09; 可自定义设置以下属性&#xff1a; 走马灯图片数组&#xff08;imageData&#xff09;&#xff0c;类型&#xff1a;Array<{title: string, link?: string, imgUrl: string}>&#xff0c;默认 [] 自动滑动轮播间隔&#…

3-ELK+Kafka+Filebeat 海量级日志收集 TB PB级别

ELKKafkaFilebeat 终极版 4、Kafka&#xff1a; 数据缓冲队列(消息队列)。同时提高了可扩展性。具有峰值处理能力&#xff0c;使用消息队列能够使关键组件顶住突发的访问压力&#xff0c;而不会因为突发的超负荷的请求而完全崩溃。是一个分布式、支持分区的&#xff08;partit…

模板匹配及应用

模板匹配及应用 1)模板匹配 模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术。模板匹配不是基于直方图的, 而是通过在 输入图像上滑动图像块(模板)同时比对相似度, 来对模板和输入图像进行匹配的一种方法。 应用: ①目标查找定位 ②运动物体跟踪 ③…

SpringMvc中拦截器

文章目录 1.拦截器概述 2.拦截器类中的方法 1.先写一个前端页面 2.写后台代码 3.编写success.jsp页面 4.编写拦截器类&#xff0c;实现HandlerInterceptor接口 5.编写error.jsp页面 6.配置拦截器类 3.配置多个拦截器 3.1再写一个拦截器类 3.2 配置拦截器类 1.拦截器概述 Spring…

中国版ChatGPT即将来袭-国内版ChatGPT入口

必应chatGPT入口 目前并不存在“必应ChatGPT”这个概念。必应&#xff08;Bing&#xff09;是Microsoft公司推出的一款搜索引擎&#xff0c;而ChatGPT是OpenAI开发的自然语言处理技术&#xff0c;它们是两个不同的产品品牌。 不过&#xff0c;Microsoft也在自然语言处理领域里…

Leetcode字符串的排列

其实可以看成使用其中一个字符加上其他字符的连接&#xff0c;最后用set去重 class Solution:lru_cache(None)def permutation(self, s: str) -> List[str]:if not s: return []res set()for i in range(len(s)):for j in self.permutation(s[:i]s[i1:]):res.add(s[i]j)re…

Unity Animation -- 改进动画效果

使用曲线&#xff08;Curves&#xff09;改善动画 在上一篇笔记中&#xff08;Unity Animation -- Overview_亦枫Leonlew的博客-CSDN博客&#xff09;&#xff0c;我们制作了简单的小球弹跳的动画&#xff0c;但这个动画看起来很不自然&#xff0c;小球的弹跳看起来就像是不受…

Leetcode.559 N 叉树的最大深度

题目链接 Leetcode.559 N 叉树的最大深度 easy 题目描述 给定一个 N 叉树&#xff0c;找到其最大深度。 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。 N 叉树输入按层序遍历序列化表示&#xff0c;每组子节点由空值分隔&#xff08;请参见示例&#xff09;。…
最新文章