当前位置: 首页 > 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…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

基于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…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...