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

数字IC设计\FPGA 职位经典笔试面试--整理

注: 资料都是基于网上一些博客分享和自己学习整理而成的 1:什么是同步逻辑和异步逻辑? 同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。 同步时序 逻辑电路的特点:各触发器的时钟端全部连接在一…...

Golang协程泄漏定位和排查

Golang协程泄漏定位和排查 1 场景:无缓冲channel写阻塞2 排查和定位思路2.1 Golang pprof2.2 协程数监控2.3 操作系统内存泄漏 参考 1 场景:无缓冲channel写阻塞 package mainimport ("log""net/http"_ "net/http/pprof"…...

【我的 PWN 学习手札】Unlink Attack

目录 前言 一、Unlink介绍 二、保护和限制 (1)FD->bk P AND BK->fd P (2)chunksize(P) prev_size(next_chunk(P)) (3)largebin chunk 三、适用场景 四、利用与绕过 (1&#…...

算法笔试-编程练习-好题-04

题目:堆盒子 礼盒大小不同,我们玩堆盒子的游戏,怎么堆盒子使得堆出的高度最高,每个礼盒的大小由长、宽、高表示,堆盒子的时候要求下面的盒子长、宽、高都必须大于上面的盒子,不包含等于。高度为堆出的礼盒的所有高度的…...

使用Rustup快速无缝升级Rust

rust update 升级 Rustup 是 Rust 官方的跨平台 Rust 安装工具。我们可以使用rustup升级rust版本 rustup updaterustup is not installed at ‘E:\cargo’ 意思是说’E:\argo’未安装rustup 将原来C:\Users\用户名\.cargo\bin下的文件复制到新的E:\cargo\bin $ rustup upda…...

pytorch qwen2-vl自定义数据全量微调

参考:https://github.com/zhangfaen/finetune-Qwen2-VL/tree/main 测试情况: 2B显存训练也很高,4090卡训练的 下载代码: git clone https://github.com/zhangfaen/finetune-Qwen2-VLtransformers包: 安装特定包,对qwen2vl支持 pip install git+https://github.com/hugg…...

切换淘宝最新npm镜像源是

切换淘宝最新npm镜像源是一个相对简单的过程,但首先需要明确当前淘宝npm镜像源的状态和最新的镜像地址。由于网络环境和服务更新,镜像源的具体地址可能会发生变化,因此,我将基于当前可获取的信息,提供一个通用的切换步…...

全国历年高考真题2008-2024

目录 分享链接: ⬇️⬇️⬇️ 点击下载...

【vue-media-upload】一个好用的上传图片的组件,注意事项

一、问题 media 的saved 数组中的图片使用的是location 相对路径&#xff0c;但是我的业务需要直接根据图片链接展示图片&#xff0c;而且用的也不是location 相关源代码 <div v-for"(image, index) in savedMedia" :key"index" class"mu-image-…...

linux第一课(操作系统核心)

一.关于linux (1)linux是一款开源的操作系统(是多用户&#xff0c;多任务&#xff0c;多线程)。 (2)一般所说的linux指的是linux核心&#xff0c;即对计算机硬件资源负责调度管理&#xff0c;主要职责是进程管理&#xff0c;内存管理文件系统&#xff0c;设备驱动&#xff0c…...