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进行拦截拼接需要的场景,…...

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

数据结构DAY4--哈希表
哈希表 概念:相当于字典,可以根据数据的关键字来寻找相关数据的查找表。 步骤:建立->插入->遍历->查找->销毁 建立 建立数据,形式随意,但一般为结构体(储存的数据量大)ÿ…...
MySQL二阶段和三阶段提交
在分布式系统中,事务管理是一个至关重要的方面。MySQL作为一种常用的关系型数据库管理系统,提供了二阶段提交(Two-Phase Commit,2PC)和三阶段提交(Three-Phase Commit,3PC)等协议来支…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...