当前位置: 首页 > news >正文

22 文件系统

了解了被打开的文件,肯定还有没被打开的文件,就是磁盘上的文件。先从磁盘开始认识

磁盘

概念

内存是掉电易失存储介质,磁盘是永久性存储介质
磁盘的种类有SSD,U盘,flash卡,光盘,磁带。磁盘是外设,机械设备,访问慢,os也有提速的方式

磁盘物理结构

在这里插入图片描述

磁盘上面有盘片,伺服,磁头,音圈马达等
盘面上会存储数据,计算机只认识二进制,南极和北极,向磁盘写入数据本质就是改变磁盘上的正负极,磁头可以读取内容

磁盘的存储结构

在这里插入图片描述

在这里插入图片描述

磁盘有一个一个圈,每一个平看是一个盘面,一个盘面上每一圈圆叫磁道,将磁道分为了8份,每一份磁道就是扇区。磁道相同的盘面合在一起是一个柱面

磁盘寻道

磁盘怎么找到数据在哪里
在电脑中运行的时候,磁盘是在高速旋转,高速旋转让磁头悬浮在盘面上方,电脑找到地址后发送给磁头,驱动磁头臂精确寻道,找到数据存放的位置。读取数据时,磁头会移动到盘面上读取数据,读取完会回到起始位置。磁盘怎么确定数据在哪个扇区?

CHS寻址

要找到一个扇区,先确定在哪个面(对应哪个磁头),然后确定哪个磁道,最后确定在哪个扇区。
磁盘结构的抽象
在这里插入图片描述

磁带里面的塑料带就像磁盘的盘片,播放时会将磁带从一边卷到另一边。虽然是圆形的,但可以将磁带抽出来,就成了线性结构,里面分为很多部分。磁盘虽然是圆形的,也可以拉开抽象为线性结构,每一块就像一个扇区,访问一个扇区只需要知道下标,就像给每一个扇区编了号,这种寻址方式是LBA寻址。将LBA寻址转换为CHS寻址,就可以找到数据扇区

在这里插入图片描述

磁盘管理

将数据存储到磁盘变为存储到数组,找到扇区变为找到数组特定位置,这样对磁盘的管理变为对数组的管理,就方便了很多
在这里插入图片描述

一整个磁盘不好管理,可以将磁盘分为几个区,就可以转换为小分区的管理。 橙色部分是分区的信息,电脑启动的信息,不只存一份,还有几个备份,当启动出问题就可以拷贝过来恢复

在这里插入图片描述

上面的橙色部分就是BootBlock,一个分区还是大,可以划分为很多个快,其中每个块的结构如上图。

块组

在这里插入图片描述

虽然磁盘的基本单位是扇区,512字节,但是操作系统(文件系统)和磁盘进行IO的基本单位是:4KB(8*512byte),一个block块的大小,所以磁盘也叫块设备

为什么不以512字节为单位

1.如果给的太小,需要多次IO,效率会低
2.如果操作系统和磁盘一样的大小,万一磁盘基本大小编了,Os的源代码要不要改,硬件和软件(os)进行解藕

linux ext2文件系统,上图是磁盘文件系统图(内核内存映像有所不同),磁盘是典型的快设备,硬盘分区被划分一个个的block。一个block的大小是格式化的时候确定的,并且不可以更改,例如mke2fs的-b选项可以设定bloc大小为1024、2048或4096字节。而上图中启动快

  • Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。政府管理各区的例子
  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:block和inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息,Super Block的信息被损坏,可以说整个文件系统结构就被破坏了
  • GDT,Group Descriptor Tbale:块组描述符,描述块组属性信息,包含每个块组的总体信息,如数据位图的块号、索引节点位图的块号、索引节点表的起始块号、空闲数据块和 inode 的个数等。
  • 块位图(Block Bitmap):假设有1000+个blocks,就有1000+个比特位,和block一一对应,每个bit表示一个哪个数据块被占用,哪个没被占
  • inode位图(inode Bitmap):同上,表示inode是否空闲可用
  • inode节点表:一个大小128字节的空间,所有文件inode空间的集合,需要标识唯一性,每一个inode块,都要有一个inode编号。一般一个文件,一个inode,一个inode编号。存放文件属性和大小,所有者,最近修改时间等
  • data blocks:存放文件内容,多个4kb(扇区*8)大小的集合,保存的都是特定文件的内容

在上面的区分后,linux在存储文件时,内容和属性是分开存储的。文件=内容+属性,属性存在inode,内容存在data里。这样可以让一个文件的信息可追溯,可管理

在每个块组内写入相关的管理数据,整个分区就被写入了文件系统信息,这就是格式化

文件查找

找到文件,只要找到对应的inode编号,就能找到该文件的inode属性合集。那么文件的内容怎么知道,哪些块是这个文件的?

inode中存了文件的属性和同一个块组的编号
在这里插入图片描述

如果一个文件特别大,block数据块里不只可以放内容,也可以放其他块的编号,这样类似多叉树的机构,节点就会存在大量的数据块,就可以表示一个大文件

inode

在这里插入图片描述
文件属性第一串数字就是inode

找到inode编号,就能找到分区里特定的bg,然后有了inode属性和内容,怎么知道一个文件的inode编号 。在linux里,想找一个文件,首先知道的是文件名,但文件inode属性里并没有文件名,文件名是在哪里?

在linux目录下,有很多文件,但是同一个目录里没有重复的文件名。目录其实也是文件,有自己的inode,也有data block,data里就存文件名以及文件名和inode的映射关系,这两个互为key值。正因为目录也是文件,所以也有自己的权限,x就是进入目录,w创建文件,需要写入文件名,r显示文件名和属性,读取文件属性和内容

寻找inode编号,依托的是目录结构,所以相对路径和绝对路径的关键在于定位目录,才能读取目录里的文件。关于目录名怎么找到自己的inode,在linxu里有目录树结构,保存了目录之间的关系和目录名与inode的映射关系

创建文件
先找到目录所在的分区,然后找到块组,在inode bitmap找到没有被占用的编号,置为1,然后将文件的属性写入,比如权限,所属组,时间等,将datablock映射关系建立,block位图置为1。有了inode编号,还需要在目录block里写入文件名,编号和文件名映射关系。

删除文件
以文件名为key,找到对应文件的inode,将inode bitmap和block bitmap的内容修改为0,无占用。再将映射关系删掉就行了。有时候删部分文件只需要修改文件大小。所以删除文件比拷贝快的多,所以文件删除也是可以恢复,只需要找到inode,将inode bitmap恢复,将映射的数据块恢复。但是,如果这个inode和data block被再次占用覆盖了,就找不到了

查看文件
ls找到目录,显示目录的对应的文件名和文件属性
cat根据文件名找到文件inode,显示文件内容

磁盘空间或者块组还有空间,但文件创建失败

inode和block是固定的,如果一个申请不下来,就会出现这种情况

相关文章:

22 文件系统

了解了被打开的文件,肯定还有没被打开的文件,就是磁盘上的文件。先从磁盘开始认识 磁盘 概念 内存是掉电易失存储介质,磁盘是永久性存储介质 磁盘的种类有SSD,U盘,flash卡,光盘,磁带。磁盘是…...

OVITO-2.9版本

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩! 主要专栏内容包括: †《LAMMPS小技巧》: ‾ \textbf…...

【Java开发指南 | 第一篇】类、对象基础概念及Java特征

读者可订阅专栏:Java开发指南 |【CSDN秋说】 文章目录 类、对象基础概念Java特征 Java 是一种面向对象的编程语言,它主要通过类和对象来组织和管理代码。 类、对象基础概念 类:类是一个模板,它描述一类对象的行为和状态。例如水…...

Neo4j 图形数据库中有哪些构建块?

Neo4j 图形数据库具有以下构建块 - 节点属性关系标签数据浏览器 节点 节点是 Graph 的基本单位。 它包含具有键值对的属性,如下图所示。 NEmployee 节点 在这里,节点 Name "Employee" ,它包含一组属性作为键值对。 属性 属性是…...

002 springboot整合mybatis-plus

文章目录 TestMybatisGenerate.javapom.xmlapplication.yamlReceiveAddressMapper.xmlreceive_address.sqlReceiveAddress.javaReceiveAddressMapper.javaIReceiveAddressServiceReceiveAddressServiceImpl.javaReceiveAddressController.javaTestAddressService.javaSpringboo…...

代码随想录训练营第三十五期|第天16|二叉树part03|104.二叉树的最大深度 ● 111.二叉树的最小深度● 222.完全二叉树的节点个数

104. 二叉树的最大深度 - 力扣(LeetCode) 递归,可以前序遍历,也可以后序遍历 前序遍历是backtracking 下面是后序遍历的代码: /*** Definition for a binary tree node.* public class TreeNode {* int val;* …...

Mac版2024 CleanMyMac X 4.15.2 核心功能详解 cleanmymac这个软件怎么样?cleanmymac到底好不好用?

近些年伴随着苹果生态的蓬勃发展,越来越多的用户开始尝试接触Mac电脑。然而很多人上手Mac后会发现,它的使用逻辑与Windows存在很多不同,而且随着使用时间的增加,一些奇奇怪怪的文件也会占据有限的磁盘空间,进而影响使用…...

【华为OD机试】执行任务赚积分【C卷|100分】

题目描述 现有N个任务需要处理,同一时间只能处理一个任务,处理每个任务所需要的时间固定为1。 每个任务都有最晚处理时间限制和积分值,在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。 可用于处理任务的时间有限,请问在…...

mybatis分页实现总结

1.mybatis拦截器相关知识 1.作用 mybatis的拦截器是mybatis提供的一个拓展机制,允许用户在使用时根据各自的需求对sql执行的各个阶段进行干预。比较常见的如对执行的sql进行监控,排查sql的执行时间,对sql进行拦截拼接需要的场景&#xff0c…...

Vue3——html-doc-js(html导出为word的js库)

一、下载 官方地址 html-doc-js - npm npm install html-doc-js 二、使用方法 // 使用页面中引入 import exportWord from html-doc-js// 配置项以及实现下载方法 const wrap document.getElementById(test)const config {document:document, //默认当前文档的document…...

第19天:信息打点-小程序应用解包反编译动态调试抓包静态分析源码架构

第十九天 本课意义 1.如何获取到目标小程序信息 2.如何从小程序中提取资产信息 一、Web&备案信息&单位名称中发现小程序 1.国内主流小程序平台 微信 百度 支付宝 抖音头条 2.小程序结构 1.主体结构 小程序包含一个描述整体程序的app和多个描述各自页面的page …...

外观模式:简化复杂系统的统一接口

在面向对象的软件开发中,外观模式是一种常用的结构型设计模式,旨在为复杂的系统提供一个简化的接口。通过创建一个统一的高级接口,这个模式帮助客户端通过一个简单的方式与复杂的子系统交互。本文将详细介绍外观模式的定义、实现、应用场景以…...

PHP数组去重

public function array_unique_key($arr,$key) {$tmp_arrarray();foreach($arr as $k > $v){if(in_array($v[$key],$tmp_arr)){ //判断是否重复unset($arr[$k]); //重复则删除}else{$tmp_arr[]$v[$key]; //将值存储在临时数组中}}return $arr; } public function array…...

论软件系统的架构风格,使用三段论 写一篇系统架构师论文

软件系统的架构风格是指在软件系统设计与开发过程中,采用的一组相互协调的设计原则、模式和实践。这些风格不仅影响着系统的技术实现,还关乎到系统的可维护性、可扩展性和可靠性等关键质量属性。通过三段论的结构,本文旨在探讨软件系统架构风…...

深度挖掘响应式模式的潜力,从而精准优化AI与机器学习项目的运行效能,引领技术革新潮流

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🔥 转载自热榜文章:探索设计模式的魅力:深度挖掘响应式模式的…...

企业级网络安全:入侵防御实时阻止,守护您的业务安全

随着互联网技术的快速发展,企业级网络安全问题日益凸显。在这个数字化时代,企业的业务安全不仅关系到企业的形象和声誉,还直接影响到企业的生存和发展。因此,加强企业级网络安全,预防和抵御各种网络攻击已成为企业的重…...

(一)Java八股——Redis

1 Redis缓存 1.1 什么是缓存穿透 ? 怎么解决 ?(穿透) ​ 缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。这种情…...

2024.4.15力扣每日一题——设计哈希映射

2024.4.15 题目来源我的题解方法一 链表自定义哈希函数 题目来源 力扣每日一题&#xff1b;题序&#xff1a;706 我的题解 方法一 链表自定义哈希函数 使用链表存储每个<key,value>。由于题目有限制put的次数不超过10000次&#xff0c;因此对于哈希函数的设计为&#…...

数据结构DAY4--哈希表

哈希表 概念&#xff1a;相当于字典&#xff0c;可以根据数据的关键字来寻找相关数据的查找表。 步骤&#xff1a;建立->插入->遍历->查找->销毁 建立 建立数据&#xff0c;形式随意&#xff0c;但一般为结构体&#xff08;储存的数据量大&#xff09;&#xff…...

MySQL二阶段和三阶段提交

在分布式系统中&#xff0c;事务管理是一个至关重要的方面。MySQL作为一种常用的关系型数据库管理系统&#xff0c;提供了二阶段提交&#xff08;Two-Phase Commit&#xff0c;2PC&#xff09;和三阶段提交&#xff08;Three-Phase Commit&#xff0c;3PC&#xff09;等协议来支…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...