Linux文件管理---磁盘上文件如何管理(inode)

news2024/11/28 16:48:14

文章目录

  • 磁盘与文件的关系
  • 磁盘的逻辑结构与操作系统关系
  • 真实的磁盘逻辑结构

一台计算机磁盘上的文件是非常多的,这些文件该如何进行管理?我们想打开某个磁盘上的文件究竟是如何找到该文件的?

磁盘与文件的关系

image-20230105112253681

这就是磁盘的物理模型和存储结构

一块磁盘中有很多的磁片,每片都有两面,每面都有很多环磁道组成,每环磁道分为很多扇区,每个扇区的大小为512byte,而这就是磁盘的最小存储单元了。每一面都有一个磁头,磁头的左右摆动配合磁片的高速旋转可以使得磁头锁定磁盘的每一个扇区,从而能够找到磁盘上的文件。(所有的磁头都是一起绑定运动的)

磁盘的逻辑结构与操作系统关系

在操作系统中,磁盘会被抽象成线性结构,就像磁带被拉直一样。

image-20230105114114421

每个扇区、磁道、磁面都有编号,即我们知道我们想要访问的扇区编号后就能够通过该线性结构找到物理地址。

操作系统这样做的好处:

  • 便于文件、数据的管理
  • 不让OS的代码和硬件(驱动)代码强耦合,能够让不同硬件以统一视角面对OS。

真实的磁盘逻辑结构

虽然磁盘的基本单位上512byte,但是这依旧很小,科学家根据不断的测试,推断出每次取4KB为最佳,所以每次从磁盘往内存加载数据的时候取的并不是一个扇区512byte,而是8个扇区4KB(也有的OS采用1KB、2KB,但很少)。

内存的基本单位也被分成了4KB大小,称为页框;

磁盘中的文件尤其是可执行文件,是按照4KB大小划分好的块,称为页帧。

image-20230105120826579

  • BookBlock:用于引导计算机启动等功能;
  • SuperBlock:卷资源表,记录文件系统的整体信息,包括inode、block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
  • GroupDescriptorTable:存储一个块组的描述信息,块位图块号,inode位图块号,inode表块号,数据块块号,空闲inode计数,空闲块计数,自由块计数等等;
  • Block Bitmap:记录着Data blocks里有哪些已经被占用(bit为1),有哪些是空闲的(bit为0);
  • inode Bitmap:记录着inode Table里有哪些已经被占用(bit为1),有哪些是空闲的(bit为0);
  • inode Table:里面有非常多的块,每块都有一个编号称为inode编号,每块大小为256byte(ext4格式),该inode里存储文件的全部属性信息(不包括文件名);
  • Data blocks:里面有非常多的块,每块都有一个编号,每块的大小默认为4kb,存储文件的全部内容信息。

inode里记录着Data block的编号,以便通过文件的属性就能够找到文件的内容,下面是inode结构的源码:

  * Inode layout:

  - Minix FS::

                    unsigned short i_mode;
                    unsigned short i_uid;
                    unsigned long  i_size;
                    unsigned long  i_time;
                    unsigned char  i_gid;
                    unsigned char  i_nlinks;
                    unsigned short i_zone[7+1+1];

  - Xenix FS, SystemV FS, Coherent FS::

                    unsigned short i_mode;
                    unsigned short i_nlink;
                    unsigned short i_uid;
                    unsigned short i_gid;
                    unsigned long  i_size;
                    unsigned char  i_zone[3*(10+1+1+1)];
                    unsigned long  i_atime;
                    unsigned long  i_mtime;
                    unsigned long  i_ctime;

其中i_zone数组中记录了data block的编号,即能够找到data block的位置,0-6里面的data block里存放着的是文件的内容,7-8里面的data block存放的是其它data block的编号。

image-20230105131114366

至此,文件的属性和内容都有了,那么文件名在哪里呢?

目录的内容就是文件名和inode编号的映射关系!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/142721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu20.04安装Mysql5.7

目录 1、下载安装包 2、解压 3、删除测试安装包 4、开始安装Mysql 4.1、如果碰到缺少依赖处理方法,没有碰到忽略即可 5、配置MySQL 5.1、查看mysql状态 5.2、设置root密码 1、下载安装包 wget https://cdn.mysql.com/archives/mysql-5.7/mysql-server_5.7.3…

操作系统死锁相关知识点介绍

死锁 死锁的定义 一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。 如果死锁发生,会浪费大量系统资源,甚至导致…

【CSDN周赛】第21期第二题千问万问

题目描述: 给定大小为n的整数序列A. 现在会有q次询问,询问子区间的整数数量。 思路: 1、考的时候没做出来,但是感觉不难,一直不懂错在哪里,所以比赛结束后继续修改; 2、以下代码没有按调用函…

QTextDocument

一、描述 此类用来储存结构化的富文本文档。 二、类型成员 1、enum QTextDocument::FindFlag:此枚举描述查找函数可用的选项。这些选项可以用“|”组合: FindBackward:向后搜索。FindCaseSensitive:不区分大小写。FindWholeWo…

用户单点登录

一、用户身份认证 1、单一服务器模式 我们使用传统的Session贺Coookie的模式,就可以完成单一服务器的登录,会话跟踪技术, 一般过程如下: 用户向服务器发送用户名和密码。 验证服务器后,相关数据(如用户名…

SpringBoot自定义动态定时任务(三十五)

二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。 上一章简单介绍了SpringBoot整合Quartz实现动态定时任务(三十四) ,如果没有看过,请观看上一章 通过 Quartz 实现了动态定时任务,还需要引入 Quartz 组件, 能不…

腾讯前端二面高频手写面试题总结

实现LRU淘汰算法 LRU 缓存算法是一个非常经典的算法,在很多面试中经常问道,不仅仅包括前端面试 LRU 英文全称是 Least Recently Used,英译过来就是” 最近最少使用 “的意思。LRU 是一种常用的页面置换算法,选择最近最久未使用的…

降本提效 | AIRIOT设备运维管理解决方案

传统运维多是使用在本地化系统,以人工运维和独立系统执行运维工作,重点关注的是设施运行,存在以下几个问题: 1、信息孤岛:本地化系统的接口不同,功能单一独立,各个系统之间的数据无法对接、交互…

了解枚举。

在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。 [1] 是一个被命名的整型常数的集合,枚举在日常生活中很常见&#xff0…

xxx.OpenResty+Lua后续补充

OpenRestyLua后续补充-请求参数处理看上图,鼠标右键-在新标签中打开图片食用 这是对xxx.nginx转发OpenResty(nginx升级版)_web服务器lua_tgbyhn31的博客-CSDN博客 的一个补充,用于nginx处理请求参数。 附代码: nginx 配置 #user nobody; w…

centos7 安装docker和docker-compose

本人使用的是 阿里云的centos7 的 镜像 安装在虚拟机里面的linux系统 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 如果这条命令没用 在国内很慢 换个地址用下面的试试 curl -sSL https://get.daocloud.io/docker | sh 安装成功 设置开机启动doc…

让你轻松掌握电商设计的在线工具,无门槛

零门槛不用经过工具认识,跟着教程就能上手的电商主图设计平台,让无基础又急需要设计电商主图的你轻松设计商品主图,下面跟着小编的教程一起学习如何使用乔拓云,在线设计电商主图!按照步骤就能搞定!第一步&a…

适配器Adapter

1.意图:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 2.结构 类适配器结构图 对象适配器结构图 类适配器使用多重继承对一个接口与另一个接口进行匹配。对象适配器依赖于对象组合。 Targ…

职场一些办公技能和技巧总结

办公软件Word、Excel、PPT职场一些办公技能和技巧总结一、Word(含 WPS word)1、输入带小方框的对勾 / 叉号法1法2(搜狗输入法)备注:Word、Excel、PPT 职场一些办公技能和技巧总结一、Word(含 WPS word&…

MySQL调优-深入理解MySQL事务隔离级别与锁机制

目录 MySQL调优-深入理解MySQL事务隔离级别与锁机制 概述 事务及其ACID属性 (1) 原子性(Atomicity) (2)一致性(Consistent) (3) 隔离性(Isolation) (4) 持久性(Durable) 原子性和一致性有何区别? 并发事务处理带来的问题 更新丢失(Lost Update)或脏写 脏读&…

Mysql 使用存储过程合并多个表数据

Mysql 使用存储过程合并多个表数据 drop procedure if exists mergeTable; CREATE PROCEDURE mergeTable() BEGIN#定义变量declare temp_table_name varchar(20);declare total int default 0;declare done int default false;#游标数据来源 查询出你想要合并的表名称declar…

分布式锁实现

分布式锁实现一 为什么要使用分布式锁二 分布式锁应该具备哪些条件三 分布式锁的三种实现方式四 基于数据库的实现方式五 基于Redis的实现方式一 为什么要使用分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用…

HCIE-Security:顺利通过,备考心得

备考半年多,终于通过华为HCIE安全,今天把心得贴出来,供大家参考。 我是4月1日开始在机构开始学习安全IE的,报名之后从IA开始学习,学习期间也算勤勤恳恳,每次上课都进行预习和复习,形成自己的笔记…

论文投稿指南——中文核心期刊推荐(大气科学)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

2023-1-5 javaScript

JavaScript基础 javaScript 概念 概念:一门客户端脚本语言 脚本语言:不需要编译,直接就可以被浏览器解析执行了 功能:可以增强用户和heml页面交互的过程可以控制html元素,让页面有一些动态的效果,增强用…