Linux中inode、软硬连接

磁盘的空间管理

如何对磁盘空间进行管理?

假设在一块大小为500G的磁盘中,500*1024*1024=524288000KB。在磁盘中,扇区是磁盘的基本单位(一般大小为512byte),而文件系统访问磁盘的基本单位是4KB,因此500G就被分成了131072000个扇区,将这些扇区看作为数组。而如果对这500GB进行分盘(C盘50G,D盘100G等),因此对500G磁盘的管理也就是对分的C盘50G,D盘100G的管理,相同,对于C盘50G的管理又被分化成对C盘中5个10G的管理。因此只要管理好局部,就能管理好整体,将整体细化成小等份进行管理即可(如下图)。

在Linux中,文件由数据与属性组成,这里数据内容存储在block(一般是4KB)中,属性存放在inode(磁盘上的另一块空间,一般是128字节)中,因此一个扇区(512字节)可以存储4个inode。但是内容可以增多或减少,而属性是不变的。

  1. Date blocks:里面包含许多Data Block,并且占磁盘的绝大部分空间,每一个Data Block大小是4KB。Data Blocks的作用是以块(这里的块就是Data Block)为单位,对文件内容进行保存,OS将文件每4KB分为一块进行保存,不够4KB也按照4KB保存。
  2. inode table:里面包含大量的inode空间(每个inode大小为128字节),用于保存文件属性。这里的inode可以理解成一个结构体(struct inode,其中保存着对应文件的Data Block编号,这使得Data Blocks与inode进行相互关联),结构体内部包含文件属性(所有者,权限等),并且以二进制的形式将实例化对象(struct inode i)写到inode空间里面。一般而言,一个文件有一个inode编号,以保证文件的唯一性。
  3. Block Bitmap:意思是位图,用于判断Data Blocks上的空间是否被占用。通过比特位上的数据来判断数据块中哪些空间被使用,哪些空间没被使用(0000 0000表示空空间都没有被使用,0000 1010表示1号位和3号位空间被使用)。
  4. Inode Bitmap:用于判断inode哪些空间被占,哪些空间没有被使用。
  5. Group Descriptor Table:简称GDT,块组描述符,用于描述inode表和数据块的起始位置。
  6. Super Block:用于记录存放文件系统本身的信息,记录Data Block和inode Block中的使用量以及未使用量等。并不是每个Block Group都含有Super Block,Super Block存在的意义是如果Super Block出现损坏可以通过其他Super Block对文件进行恢复。

注意:文件名也是文件的属性,但是在Linux中,并没有文件名的概念,而是通过inode对应的Data Block编号来识别文件的,因此要找到文件,就必须找到该文件对应inode编号,找到inode编号就能找到文件的Data Blocks,从而找到文件内容。那么如何找到inode呢?

我们知道,目录其实也是文件,是文件就具有文件内容和属性,这里目录的文件内容其实就是文件与目录的inode编号的映射关系。当我们在某一个目录下创建一个文件的时候,OS会根据当前目录下的Inode Bitmap找到未使用空间,将创建的文件的属性写入到该未使用的inode上,然后再根据Block Bitmap找打未使用的Data Block,然后填写数据到Data Block上,最后返回该文件的inode。最后返回的inode编号找到该文件所处的目录,根据目录的inode找到目录的Data Block,然后将文件名与inode的映射关系写入到目录的Data Block中。(这就是为什么inode中不保存文件名,因为文件名在目录中)

当删除一个文件的时候,根据目录的inode和要删除的文件名,找到目录的Data Block,根据文件名的映射关系找到文件的inode,再根据要删除文件的inode找到该文件的BlockGroup,将要删除文件的inode Bitmap和Block Bitmap的位图上的标志位由1置为0,最后取消该文件与目录的映射关系。

软连接与硬连接

软连接:

如上图,在/home/101-asy/linux/2024-12-06/d1/d2/d3目录下编译成的可执行文件mytest1,如果在/home/101-asy/linux/2024-12-06下执行需要带该文件的路径: ./d1/d2/d3/mytest1;但是如果使用软连接的方式:ln -s ./d1/d2/d3/mytest1 mytest1.s在/home/101-asy/linux/2024-12-06目录下生成一个软连接的可执行文件mytest1.s。这个软连接可以理解成快捷键。

如上图,软连接的文件与源文件的inode不同(因此软连接文件是一个独立的文件,也要进行分配inode,填写属性Data block,映射等操作),并且软连接文件的内容其实是源文件的所在路径。


硬连接:

创建的硬链接文件与原文件的inode相同,所谓的硬连接就是在当前目录下,给指定的文件新增文件名和inode编号的映射关系。

硬连接数是指向同一inode文件的数量,用于标识有多少个文件指向当前inode文件。


为什么创建的文件默认硬连接数是1呢???而文件夹又是2呢???

如上图,我们知道硬连接数表示有几个文件名指向该文件。当创建file文件时,file文件本身就指向了该文件,因此file文件本省就是一个硬连接数。而对于文件夹来说除了文件夹名本身外其内部还有一些文件:

以目录d4为例,d4的硬连接数为3,分别为d4文件名本身指向d4,d4目录下的.文件指向d4,以及d5目录下的..文件指向d4。

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

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

相关文章

基于卷积神经网络的垃圾分类系统实现(GUI应用)

1.摘要 本文主要实现了一个卷积神经网络模型进行垃圾图像分类,为了提高垃圾分类模型的准确率,使用使用Batch Normalization层、使用早期停止策略来防止过拟合等方法来优化模型,实验结果显示最终优化后的模型准确率较高90%左右。最终&#xf…

IDEA结合GitLab使用

GitLab新建仓库 使用管理员账号创建gitlab仓库创建空白文件填写项目名称及命名空间 注意:取消勾选【使用自述文件初始化仓库】,否则IDEA中push代码报错 设置仓库权限 【设置】-【仓库】-【受保护分支】中需要添加哪些角色可以提交与合并代码&#xff0…

洛谷 P1179 [NOIP2010 普及组] 数字统计 C语言

题目&#xff1a; https://www.luogu.com.cn/problem/P1179 思路&#xff1a;直接暴力过 代码&#xff1a; #include<iostream> using namespace std; int cnt(int x) {int sum 0;while(x){int temp x %10;if(temp 2){sum;}x x/10;}return sum; } int main(void) …

Android APP自学笔记

摘抄于大学期间记录在QQ空间的一篇自学笔记&#xff0c;当前清理空间&#xff0c;本来想直接删除掉的&#xff0c;但是感觉有些舍不得&#xff0c;因此先搬移过来。 Android导入已有外部数据库 2015.06.26在QQ空间记录&#xff1a;在Android中不能直接打开res aw目录中的数据…

在GitHub上fork 别人的仓库 到 自己的仓库,clone到本地,处理后再上传回Github请求PR的过程

如题 一、fork 别人的仓库 到 自己的仓库 这是一种完全的复刻&#xff0c;所有内容都会被拿过来。 点击fork 写信息 创建fork 二、把它clone 到本地 先回到home&#xff0c;打开刚才 我们fork 的工程。 复制地址。 然后 在我们 本地 你去创建一个文件夹 来 接受他 比如我…

MATLAB 识别色块和数量

文章目录 前言步骤 1: 读取图像步骤 2: 转换为 HSV 颜色空间步骤 3: 定义颜色范围步骤 4: 创建颜色掩码步骤 5: 应用形态学操作&#xff08;可选&#xff09;步骤 6: 标记和显示结果完整代码步骤七 返回色块坐标 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&…

深入理解偏向锁、轻量级锁、重量级锁

一、对象结构和锁状态 synchronized关键字是java中的内置锁实现&#xff0c;内置锁实际上就是个任意对象&#xff0c;其内存结构如下图所示 其中&#xff0c;Mark Word字段在64位虚拟机下占64bit长度&#xff0c;其结构如下所示 可以看到Mark Word字段有个很重要的作用就是记录…

文字稿 | MatrixOne2.0.0:AI向量与高可用能力的重磅升级MatrixOne 2.0.0 新特性解读

MatrixOne 2.0.0 是一款 AI 驱动的云原生超融合数据库&#xff0c;采用了存算分离的架构&#xff0c;全面优化了云上资源利用效率。 MatrixOne兼容 MySQL 协议和语法&#xff0c;具备支持混合负载场景的能力&#xff0c;并结合向量数据类型、全文检索等特性&#xff0c;为生成式…

Qt Xlsx安装教程

Qt Xlsx安装教程 安装perl 如果没有安装perl&#xff0c;请参考perl Window安装教程 下载QtXlsxWriter源码 下载地址 ming32-make编译32 lib库 C:\Qt\Qt5.12.12\5.12.12\mingw73_32>d: D:\>cd D:\Code\QtXlsxWriter-master\QtXlsxWriter-master D:\Code\QtXlsxWrit…

【49】AndroidStudio构建其他人开发的Android项目

(1)做Android软件开发&#xff0c;通常会看一些其他人开发的项目源码&#xff0c;当将这些项目的源码通过git clone到本地之后&#xff0c;用AndroidStudio进行打开时&#xff0c;通常会遇到一些环境配置的问题。本文即用来记录在构建他人开发项目源代码这一过程中遇到的一些常…

day08 接口测试(3)——postman工具使用

下载 postman 的历史版本&#xff1a;Postman 历史版本下载 - 简书 我自己根据我的电脑&#xff0c;安装的地址为&#xff1a;https://dl.pstmn.io/download/version/9.31.32/osx_64 今天开始学习 postman 这个测试工具啦。 【没有所谓的运气&#x1f36c;&#xff0c;只有绝…

OpenCV相机标定与3D重建(10)眼标定函数calibrateHandEye()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算手眼标定&#xff1a; g T c _{}^{g}\textrm{T}_c g​Tc​ cv::calibrateHandEye 是 OpenCV 中用于手眼标定的函数。该函数通过已知的机器人…

day08 接口测试(4)知识点完结!!

【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 1、postman读取外部数据文件&#xff08;参数化&#xff09; 1.1 数据文件简介 1.2 导入外部数据文件 1.2.1 csv文件 1.2.2 导入 json文件 1.3 读取数据文件数据 1.4 案例 1.5 生成测试报告 2、小…

linux 安装 Jenkins 教程

前言 Jenkins 是一个开源的自动化服务器&#xff0c;广泛用于持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff09;和持续交付&#xff08;Continuous Delivery&#xff0c;CD&#xff09;领域。它帮助开发者自动化软件构建、测试、部署等过程&#xff0c;从…

IdentityServer4框架、ASP.NET core Identity

OAuth2.0 IdentityServer4 官网 中文官网 ASP.NET Core Identity提供了一个用来管理和存储用户账户的框架. IdentityServer4是基于ASP.NET Core实现的认证和授权框架&#xff0c;是对OpenID Connect和OAuth 2.0协议的实现。 IdentityServer是一个中间件,它可以添加符合OpenID…

ZZCMS2023存在跨站脚本漏洞(CNVD-2024-44822、CVE-2024-44818)

ZZCMS是一款用于搭建招商网站的CMS系统&#xff0c;由PHP语言开发&#xff0c;可快速搭建&#xff1a;医药招商、保健品招商、化妆品招商、农资招商、孕婴童招商、酒类副食类等招商网站。 国家信息安全漏洞共享平台于2024-11-14公布其存在跨站脚本漏洞。 漏洞编号&#xff1a…

使用Kubernetes部署MySQL+WordPress

目录 前提条件 部署MySQL和WordPress 编写yaml文件 应用yaml文件 存在问题及解决方案 创建PV(持久化卷) 创建一个PVC(持久化卷声明) 部署添加PVC 查看PV对应的主机存储 删除资源 查看资源 删除deployment和service 查看主机数据 删除PVC和PV 删除主机数据 前提条…

每日一刷——12.10——学习二叉树解题模式(二)

题目三&#xff1a;填充每个节点的下一个右侧节点指针1 题目描述&#xff1a;116. 填充每个节点的下一个右侧节点指针 - 力扣&#xff08;LeetCode&#xff09; 我的理解&#xff1a; 我的感觉是同父亲还好搞一点&#xff0c;感觉是在遍历到每一个节点的时候&#xff0c;就把…

Spring Cloud Alibaba:一站式微服务解决方案

Spring Cloud Alibaba介绍 在当今的软件开发领域&#xff0c;微服务架构因其灵活性、可扩展性和独立性等优势而备受青睐。Spring Cloud Alibaba 作为一款强大的一站式微服务解决方案&#xff0c;为开发者提供了丰富的工具和组件&#xff0c;帮助他们轻松构建和管理复杂的微服务…

服务器数据恢复—LINUX下各文件系统删除/格式化的数据恢复可行性分析

Linux操作系统是世界上流行的操作系统之一&#xff0c;被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统&#xff08;EXT2/EXT3/EXT4/Reiserfs/Xfs&#xff0…