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

文件系统(磁盘 磁盘文件 inode)

文章目录

  • 磁盘
    • 看看物理磁盘
    • 磁盘的存储结构
  • 对磁盘的储存进行逻辑抽象
    • inode号
    • 文件名 -> inode
    • 判断文件在哪个分区

磁盘

电脑中存在非常多的文件,被打开的文件只是少量的。
没有被打开的文件,在磁盘中放着,那么文件是如何存取?

看看物理磁盘

计算机只认识二进制:什么是0,1?
0,1在物理上会有不同的表现(比如有无、高低电频等)
在这里插入图片描述
磁盘里面的结构:
在这里插入图片描述
在这里插入图片描述

磁盘的存储结构

磁盘是一个机械设备,是外设。交互效率很慢。
小时候玩过的磁铁,比如S表示0、N表示1。通过磁头改变磁盘的磁性
在这里插入图片描述
每个扇区都是512字节,靠圆心近的,512字节密集,远的稀疏。

在这里插入图片描述
如何找到一个扇区?(CHS定址法)
1.先找到哪个磁头(Header)。
2.找到指定的磁道(Cylinder)。
3.找到指定的扇区(Sector)。
在这里插入图片描述
磁盘中的盘片为什么要旋转?
定位扇区。
磁头要左右摆动?
定位磁道。
在这里插入图片描述
磁盘文件 == 文件 = 内容 + 属性 = 都是二进制数据
文件存储在磁盘 -> 文件在磁盘中占据几个扇区

对磁盘的储存进行逻辑抽象

如果OS直接使用CHS定址法,耦合度太高。磁盘结构一改,OS也得跟着更改。
以磁带为引例:
在这里插入图片描述
假设磁盘有800G的内存,2个盘片组成。前200GB就是一面。
在这里插入图片描述
这个工作是磁盘内部做的,以500号下标为例子计算一下CHS
500/100 = 0;第一个盘面
500%1000 = 500;
500/100 = 5;第6个磁道
500%100 = 0;第一个扇区
文件 = 很多个sector的数组下标
保存一个文件,比如要用到100个扇区,只要记录100个sector都交给磁盘!
内存和外设进行IO交互时,512字节小不小?
一般而言,OS未来和磁盘交互的时候,基本单位:4 KB(可以更改,改了OS得大改)。一次性读8*sector,连续的8个扇区。
把4KB称为一个块
在这里插入图片描述
这样管理LAB block[N]数组就可以了。
对于800G的磁盘来说,但只要把200GB(一个盘面)管理好,就能把800GB管理好
把800GB进行分区,跟电脑上分盘是一个道理(我这里没分)
在这里插入图片描述
一块区如何管理好?
分组:只要管理好一个组,那么就能管理好每一个组。
在这里插入图片描述

文件 = 内容 + 属性(也是数据) 0KB是内容为0 属性不为0
在这里插入图片描述
文件在磁盘储存,本质是:文件的内容 + 文件的属性数据
Linux文件系统特点:文件内容和文件属性 分开储存。
先搭起文件系统的框架,再谈细节:
在这里插入图片描述
在这里插入图片描述

通过ll -il就能看见inode号
在这里插入图片描述
那我们怎么知道inode占据哪些Data blocks里面的块?
inode结构体里面有datablocks[N],保存着该文件用了哪几个块。
在这里插入图片描述
GDT (Group Descriptor Table):块组描述符,描述块组属性信息(块有多大、有多少inode Table被使用了)。
比如块组还剩下1GB的空间,要写入2GB的文件,写不下。
超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。
Super Block描述的是整个分区,一个组里面可以有多个Super Block,也可以没有,一个区每个组中的Super Block内容都是一样的。(多个防止某个Super Block被损坏,若损坏可以通过其他组的Super Block进行修复)
格式化:在磁盘中重新写入文件系统!
综上所述:我们寻找文件的时候,必须先得到文件的inode号

inode号

inode编号是以分区为单位分配的,一个分区的inode号是不能重复的。两个分区是可以重复,所以不能跨分区访问。
开始的时候,Super Block与GDT会记住inode的范围[start_inode,end_inode]
以寻找inode==50为例子:
在这里插入图片描述
关于inode属性中的datablocks[N]谈论下:
我们目前讲述的都是ext2文件系统,常用的是ext3、ext4。ext3、ext4比ext2多了日志安全等功能。
不同的文件系统,文件属性的大小不一定相同。下面都是以128KB为例:
在这里插入图片描述
如果文件大小为20GB,大于分区的10GB的可以吗?
在这里插入图片描述

答案是可以的,因为Data blcoks的编号是以分区为单位的,可以指向其他分组。但非常不建议,一旦跨组的,就代表磁针和磁盘要进行其他寻址(本来指向0组,现在要指向其他组)。
现在只要找到了inode编号,就能找到文件。但如何找到inode编号?我们平时访问时都用的文件名

文件名 -> inode

以目录入手:Linux一切皆文件,所以目录也是文件,那么目录也有他自己的inode
目录 = 文件属性 + 文件内容
目录的属性与普通文件的属性做对比:属性的类型一样,值不一样。
在这里插入图片描述
目录内容放的是:文件名和inode编号的映射关系
在这里插入图片描述
综上所述:1.一个目录下不能建立同名文件(因为映射关系)
2.查找文件的顺序,文件名 -> inode 编号 (目录里面保存着文件名,所以inode属性里面不用保存文件名)
3.进入目录需要x权限。
目录的r权限:本质是是否允许我们读取目录的内容,拿到文件名与Inode的文件关系!
在这里插入图片描述
目录的w权限:新建文件的本质,最后一定是想要向当前所在处的目录内容中写入文件与inode的映射关系
在这里插入图片描述
一个文件新建的过程:
首先向特定的分区当中申请一个inode,Super Block会记录该分配哪个inode,分配一个就++,根据inode确定在哪个分组里。然后在inode Bitmap找位图,从低向高找,看哪个为0,给我们分配的新的偏移量+新分配的inode编号就是新的inode,根据新的inode号在inode Table里把属性一写。在Blcok Bitmap里面申请位图,把Data blocks里面申请的块往inode Table里面一写,建立映射关系,返回inode编号,再与文件名建立起映射关系,就新建一个文件了。
在这里插入图片描述
删除一个文件:
根据文件名,找到inode编号,遍历datablocks数组,根据数组内容把Block Bitmap中的数据依次清成0。然后找到把inode在位图的位置由1->0就删掉了,inode Table和Data blocks里的数据不用动。
这就是为什么我们在电脑里,下载内容要很长时间,删除很快。
在Linux中文件被误删了,是可以恢复的,找到相应的位图由0->1就可以恢复。不过前提是文件不能被覆盖。
windows的回收站本质是一个目录,rm -> mv
在这里插入图片描述
Linux内核在被使用的时候,一定存在大量的解析完毕的路径,要对访问到的路径做管理->先描述,在组织
在这里插入图片描述
源码:
在这里插入图片描述
以上都是确定分区才有效

判断文件在哪个分区

云服务器一般都只有一个盘vda,vda对应的vda1一个分区
在这里插入图片描述
一般要访问一个分区,要把一个分区进行挂载,要将磁盘分区和文件目录进行关联,进入磁盘分区其实是进入指定的目录
下面就是挂载到/dev/vad1中的根目录,所以在根目录写的内容全在/dev/vda1的内容里
在这里插入图片描述

相关文章:

文件系统(磁盘 磁盘文件 inode)

文章目录 磁盘看看物理磁盘磁盘的存储结构 对磁盘的储存进行逻辑抽象inode号文件名 -> inode判断文件在哪个分区 磁盘 电脑中存在非常多的文件,被打开的文件只是少量的。 没有被打开的文件,在磁盘中放着,那么文件是如何存取? …...

ThreeJs创建圆环

ThreeJs除了创建基本的长方体,球形,圆柱等几何体,也可以创建一些特殊的几何体,比如圆环,多边体,这节就来讲怎么用Threejs绘制出圆环。首先依然是要创建出基础的组件,包括场景,相机&a…...

React实现类似Vue的路由监听Hook

React实现类似Vue的路由监听Hook 监听路由变化;React Hook封装,返回回调函数,新旧路由为函数参数; 代码 import { useEffect, useRef } from react; import { useHistory, useLocation } from react-router-dom;/*** 监听路由变…...

Visual Studio打开项目的一些小技巧

Visual Studio(VS)是一款功能强大的集成开发环境,许多刚入门C/C的小白也会使用这款软件进行写代码,然而它的操作并不简单,下面将讲解一下VS打开项目文件的一些小技巧。 目录 🎁创建空项目 ❤️①点击“创建新项目” ❤️②点击“…...

前端页面中使用 ppt 功能,并且可以随意插入关键帧

要在前端页面中实现类似 PowerPoint 的功能,并且能够随意插入和控制关键帧动画,你可以使用 HTML、CSS 和 JavaScript 结合的方式来创建一个互动幻灯片系统。以下是一个详细的实现方案,包括如何插入和控制关键帧动画: 1. 基础 HTM…...

机器学习:opencv--图像金字塔

目录 一、图像金字塔 1.图像金字塔是什么? 2.有哪些常见类型? 3.金字塔的构建过程 4.图像金字塔的作用 二、图像金字塔中的操作 1.向下采样 2.向上采样 3.注意--无法复原 三、代码实现 1.高斯金字塔向下采样 2.高斯金字塔向上采样 3.无法复…...

linux安全软件Hydra使用教程

Hydra 是一个强大的网络登录工具,常用于渗透测试,支持对多种服务和协议(如 SSH、FTP、HTTP 等)进行暴力crack攻击。它可以通过字典攻击来测试用户名和密码的有效性。以下是关于如何使用 Hydra 的基本步骤和示例: 1. 安…...

【ShuQiHere】从晶体管到逻辑门:数字电路的构建之旅

【ShuQiHere】 现代计算机和电子设备的基础是逻辑电路(Logic Circuits),它们执行信息处理和运算任务。在这些电路的核心,是晶体管(Transistors) 和 逻辑门(Logic Gates)。通过理解这…...

PDF扫描版文字识别OCR

PDF扫描版文字识别OCR 最近需要有对PDF扫描版进行文字可识别的需求,这里介绍一款工具挺好用的 这是一款开源的OCR工具 github地址 https://github.com/hiroi-sora/Umi-OCR 主要功能及特点 免费:本项目所有代码开源,完全免费。方便&#…...

Synchronized由什么样的缺陷? Java Lock是怎么弥补这些缺陷的?

synchronized 的缺陷 Synchronized 在 Java 中是最基础的线程同步机制,尽管简单易用,但也存在一些缺陷和局限性: 性能开销: synchronized 内部实现的监视器锁可能导致不必要的线程上下文切换和频繁竞争,从而引起性能下…...

联合仿真(FMI,FMU)资料收集

本文地址:https://blog.csdn.net/t163361/article/details/142262888 最近在研究使用Unity导入FMU模块进行仿真的功能。做功能前先尽可能收集下资料。 FMI标准 官方网站 github标准库 FMI标准由Modelica协会主导,具体介绍 FMI目前有三个标准 FMI1:20…...

Android Radio2.0——动态列表回调(七)

上一篇文章我们主要介绍了电台动态列表的获取流程,这里我们主要处理对应的回调流程以及扫描流程。 1)通过 getDynamicProgramList() 方法获取动态列表。 2)按照动态列表的内容,循环调用 scan() 方法执行向上调台,直到列表中的内容搜索完成。 3)根据 RadioManager.Program…...

在conda虚拟环境中安装cv2(试错多次总结)

首先保证你创建好了虚拟环境,并在anaconda命令窗口激活虚拟环境 依次输入下列命令: pip install opencv-python3.4.1.15 pip install opencv-contrib-python3.4.1.15 pip install dlib19.6.1 然后测试cv2是否可以使用,输入python 运行pyth…...

【EI稳定,马来亚大学主办】2024年计算机与信息安全国际会议(WCCIS 2024,9月27-29)

2024年计算机与信息安全国际会议 (WCCIS 2024) 将于2024年9月27-29日召开。 会议旨在为从事计算机与信息安全的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术,了解学术发展趋势,拓宽研究思路,加强学术研究和探讨&…...

免费AI播客生成:notebooklm可以生成播客的两个发言人谈论的内容,从各种来源如研究论文、文章

参考: https://notebooklm.google.com/ 可以上传文章链接,ai自动生成播客两人对话: 另外notebooklm他本身也是个rag知识库对话,可以直接聊天框对话...

“MIME 媒体类型“用来标识网络传输内容的格式标准

MIME 类型(Multipurpose Internet Mail Extensions 类型),也称为媒体类型,是用来标识网络传输内容的格式的标准。这些类型帮助 Web 服务器和浏览器理解如何处理和显示数据。MIME 类型在 Web 开发和网络通信中起着关键作用&#xf…...

MySql的基础讲解

一、初识MySql 数据库:按照数据结构来组织、存储和管理数据的仓库;是一个长期存储在计算机内的、有组织的、可共享 的、统一管理的大量数据的集合; OLTP:联机事务处理,主要是对数据库的增删改查。 OLTP 主要用来记录…...

类型转换等 面试真题

题目1 请问哪个结果为NaN A. 123null B. 123‘1’ C. 123/0 D. 123undefined 在这四个表达式中,只有D. 123 undefined 的结果是 NaN,原因如下: A. 123 null 结果是:123原因:null 在数值运算中会被自动转换为 0&a…...

MySQL下载安装

MySQL下载安装 MySQL :: MySQL Community Downloads MySQL :: Download MySQL Installer 安装步骤1 一路向前即可。 我只安装Server,不清楚的建议选择Full ​ 安装步骤2 如果是正式运行的服务器,可以选择Server Computer...

golang实现正向代理http_proxy和https_proxy

package mainimport ("bytes""fmt""io""log""net""net/url""strings" )func main() {// tcp 连接,监听 8080 端口l, err := net.Listen("tcp", ":8080")if err != nil {log.Panic…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层&#xf…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...