inode和软硬链接

article/2025/10/2 22:13:33

文章目录:

  • 一、理解文件系统
    • 1.1 什么是inode
    • 1.2 磁盘了解
      • 1.2.1磁盘的硬件结构
      • 1.2.2 磁盘的分区
      • 1.2.3 EXT2文件系统
  • 二、软硬链接
    • 2.1 软链接
    • 2.2 硬链接

一、理解文件系统

1.1 什么是inode

inodes 是文件系统中存储文件元数据的数据结构。每个文件或目录都有一个唯一的 inode 编号来标识它们。

inode 包含了有关文件或目录的信息,如文件的拥有者、所属组、权限、时间戳等。它还包含指向文件内容的指针,以及其它一些元数据(文件属性),如文件大小和文件类型。

使用命令 ls -l 或者 ll 就可以查看到该目录下的文件及其属性:

在这里插入图片描述

其中文件对应的属性如下所示(以 myfile.txt 文件为例):

在这里插入图片描述

在 Linux 中,文件的元数据和文件内容是分开存储的,其中使用 inode 来保存文件的元数据。为了管理系统中大量的文件,给每一个文件都分配了一个唯一的 inode 编号,便于系统可以快速的访问和管理文件系统中的文件,而不需要扫描整个文件系统。inode 使得文件系统非常高效的处理大量文件和目录。

使用命令 ls -il 可查看当前目录下的文件的 inode 编号:

在这里插入图片描述

在计算机中,文件的属性和数据通常存储在文件系统中。文件系统是一种用于在磁盘或其它设备组织和管理文件和目录的机制❗

1.2 磁盘了解

磁盘是一种用于存储电子数据的设备,通常由多个盘片、磁头和马达组成。它是计算机系统中最常见的外部存储设备之一。磁盘可以存储各种类型的数据,包括操作系统、应用程序、文档、音乐、图像等。数据以二进制形式存储在盘片表面的磁性涂层上。当读取或写入数据时,磁头会在盘片表面运动,根据磁性涂层上的磁场变化来读取或写入数据。

1.2.1磁盘的硬件结构

在这里插入图片描述

文件保存在磁盘中,为了更好的理解,首先来了解一下磁盘的物理结构:

在这里插入图片描述

磁盘的CHS地址:

磁盘的 CHS 地址是一种用于标识磁盘上物理扇区位置的方式,他由柱面(Cylinder)、磁头(Head)、扇区(Sector)三个参数组成,通常被称为 “CHS寻址模式”。在 CHS 寻址模式下,每个物理扇区都由一个唯一的 CHS 地址来定位。柱面号标识磁盘上的圆柱轨道编号,磁头号表示读写磁盘表面的编号,而扇区号则表示每个轨道上的扇区编号。

尽管CHS寻址模式已经被逐渐淘汰,但在早期计算机系统中仍然广泛使用。现代计算机系统使用更高级别的LBA(Logical Block Addressing,逻辑块寻址模式)或者GPT(GUID Partition Table,全局唯一标识分区表)等方式进行数据存取。

1.2.2 磁盘的分区

磁盘的分区是指将一个物理磁盘划分为多个逻辑部分,每个部分称为一个分区。一个磁盘可以划分为一个或多个分区,每个分区看起来像一个独立的磁盘,可以单独格式化、挂载和使用。磁盘一般以扇区为单位,一个扇区的大小通常情况下为 512byte 。如:一个大小为 512G 的磁盘,可以划分为10亿多个扇区。

在这里插入图片描述
在 Linux 下,可以使用 ls /dev/vda* -l 命令来查看磁盘的分区信息:

在这里插入图片描述

1.2.3 EXT2文件系统

ext2文件系统于1993年问世,由 Remy Card 开发,它是几个 Linux 发行版(如 RedHat 和 Debian)中的第一个默认文件系统。ext2之所以流行并使用了很长的一段时间,是因为它解决了 ext 第一个系列中出现的 inode 和 碎片 等基本问题。

EXT2文件系统使用基于磁盘的存储方案,其中数据被存储在扇区中,每个扇区的大小为4KB。磁盘被分为一个或多个分区,每个分区包含一个超级块、一个或多个组描述符块和多个数据块组。每个数据块组都由超级块(Super Block)、块组描述符(Group Descriptor Table)、块位图(Block Bitmap)、inode位图(inode Bitmap)、inode表(inode Table)和数据块(Data blocks)组成。
在这里插入图片描述

  • Boot Block(启动块):大小是确定的,占据一个扇区(512byte)。存储着主引导记录与分区表信息。
  • Block Group:ext2文件系统会根据分区的大小划分为数个 Block Group。而每个 Block Group 都有着相同的结构组成。
  • Super Block(超级块):存放文件系统本身的结构信息。记录的信息主要有:block 和 inode 的总量,未使用的 block 和 inode 的数量,一个 block 和 inode 的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其它文件系统的相关信息。Super Block 的信息被破坏,可以说整个文件系统结构就被破坏了。
  • Group Descriptor Table(块组描述符):简称 GDT,描述块组的属性信息。
  • Block Bitmap(块位图):记录 Data Block 中哪个数据块已经被使用,哪个数据块没有被使用。
  • inode Bitmap(inode 位图):记录 inode Table 中哪一个被使用,哪个没有被使用。每个 bit 位表示一个 inode 是否被使用。
  • inode Table(i 节点表):存放文件的属性。
  • Data Blocks(数据区):存放文件内容。

将属性和数据分开实际上是如何工作的呢?接下来我们创建一个新的文件来说明一下:

[root@hostname linux]# touch abc
[root@namehost linux]# ls -i abc
263466 abc

在这里插入图片描述
创建一个文件时,操作系统通常会执行以下操作:

  1. 分配空间:操作系统会为哎文件分配磁盘空间,这些空间在文件创建后将被保留以供该文件使用。
  2. 存储属性:内核先找到一个空的 i 节点(该例子是263466)。内核将文件属性记录到其中。
  3. 存储数据:该文件需要存储在三个磁盘块中,内核分别找到三个空闲磁盘块:300、500、800。将内核缓冲区的数据分别写到三个磁盘块中。
  4. 记录分配情况:文件内容按顺序300、500、800存放。内核在 inode 上的磁盘分布区记录了上述块列表。
  5. 添加文件名到目录:该目录的文件名为 abc。Linux 内核将入口(263466,abc)添加到目录文件。文件名和 inode 之间的对应关系将文件名和文件的内容以及属性连接起来。

文件与 inode 和 data block 之间的关系

在文件系统中,一个文件对应一个 inode ,一个文件可以由一个或多个数据块组成,这些数据块可能存储在磁盘上的不同位置。每个数据块都有一个地址,该地址通常存储在文件的 inode 中。因此,在文件系统中,当我们创建一个文件时,操作系统会为该文件分配一个 inode,并为该文件分配一些数据块。文件内容存储在数据块中,而文件元数据则存储在 inode 中。程序通过 inode 来访问文件,并根据 inode 中存储的指针信息找到相应的数据块来读取或写入文件数据。

如何理解创建一个新文件

  1. 在创建新文件的目录下找到该目录所在的分区和块组。
  2. 遍历 inode bitmap 找到一个未使用的位,将该位置为1。在 inode table 中找到该位对应的空间,并将该文件的属性信息写入其中。
  3. 在 block bitmap 中找到一个或多个未使用的位(具体多少个由写入文件数据的大小来确定),将这些位置为1。然后在 data blocks 中找到对应的数据块,将数据写入数据块中。
  4. 在 inode table 新创建文件的 inode 的数组中填入对应的数据块信息,建立映射关系。
  5. 最后,将 inode 名称和文件名的映射关系保存到目录的数据块中。

如何理解删除一个文件

  1. 将该文件对应的 inode 在 inode bitmap 对应的位置置为 0 。
  2. 将该文件在 block bitmap 中申请的位置置为 0。

注意:删除文件并不是真正意义上的对文件数据进行删除,而是将删除文件对应的数据置为无效即可。因此,在一些情况下,可以对某些删除的文件进行找回。

二、软硬链接

Linux 中的软链接和硬链接是什么?

软链接(符号链接)是到原始文件的实际链接,而硬链接是原始文件的镜像副本。如果删除原始文件,软链接就失去价值了,因为它删除原始文件后它指向一个不存在的文件。但在硬链接的情况下,情况是完全相反的。即使删除了原始文件,硬链接依旧会有原始文件的数据。因为硬链接是原始文件的镜像副本。

在这里插入图片描述

2.1 软链接

在 Windows 中有一个文件快捷方式功能,用于给文件创建快捷方式,如下所示:

在这里插入图片描述
软链接类似于上图中的快捷方式。每个软链接文件都有自己的 inode 值,该值引用原始文件。

对一个文件中信息的任何更改都会反映到另外一个文件中。可以跨不同的文件系统连接软链接,如果源文件被删除或传输,软链接文件将无法正常工作。这种链接被称为悬挂链接。删除软链接没有效果,但如果删除原始文件,可能会导致链接停止工作。🎯

可以通过以下命令创建文件的软链接:

[hyr@centos-hyr linux15]$ ln -s d1/d2/d3/test test.c.soft// d1/d2/d3/test : 表示原始文件// test.c.soft : 生成软链接的名称

通过以下代码我们发现,创建的软链接类似于 Windows 中的快捷方式,可在常用路径下创建路径较深可执行程序的快捷方式,便于快捷的执行程序。

在这里插入图片描述

在 shell 下执行 ll -i 命令查看文件的 inode 号,可以看到,软链接文件与原始文件的 inode 号是不同的,说明软链接相对于原始文件是一个独立文件,软链接文件里面实际存储的是原始文件的路径(该文件所在路径到原始文件所在路径的路径),而不是其内容。所以相对于原始文件要小很多。

在这里插入图片描述

关于软链接:

  • 可以遍历文件系统
  • 允许跨越目录去连接
  • 权限将不会被修改
  • 具有与原始文件不同的我呢见权限和 inode
  • 只是原始文件的路径,而不是其内容
  • 如果我们改变了原始文件的名称,那么该文件所有的软链接都变成了悬空,即它们变得毫无意义

2.2 硬链接

Linux 中的硬链接相当于保存在磁盘驱动器上的文件 - 它实际上是指里链接到磁盘上的某个位置。硬链接的本质是原始文件的镜像。硬连接和软链接之间的区别就在于,删除了原始文件对硬链接是没有影响的,但是删除原始文件对软链接是有影响。因此,硬链接最大的好处是,即使你删除了原始文件,你依旧可以通过硬链接来访问文件。🎯

可以通过以下命令来创建文件的硬链接:

[hyr@centos-hyr linux15]$ ln test.txt test.txt.hard// test.txt : 原始文件// test.txt.hard : 创建的硬链接文件

在这里插入图片描述

通过命令 ll -i 命令查看文件的 inode 号,如下:软链接文件与硬链接文件的 inode 号是一样的,且硬链接文件的大小与源文件的大小也是相同的。在建立硬链接之后,原始文件和硬链接文件的链接数都变为了 2 (为什么?)。

如下所示,若创建一个普通文件,则文件初始的硬链接数为1;若创建一个目录,则文件的硬链接数为2(why?)。

在这里插入图片描述

当我们创建目录时,该目录下会生成两个隐藏文件 .... 表示当前目录,.. 表示上级目录。因此,.dir 都表示同一个文件(它们的 inode 都是一样的),因此目录生成时硬链接数就是2。

在这里插入图片描述

关于硬链接:

  • 不能链接目录
  • 每个硬链接文件都被分配了与原始文件相同的 inode 值,因为它们引用相同的物理文件位置。硬链接更加灵活,即使原始文件或被链接的文件在整个文件系统中移动也能保持链接,尽管硬链接不能跨不同的文件系统。
  • 任何硬链接文件的大小都与原始文件相同,如果我们改变了任何硬链接的内容,那么所有硬链接文件的大小都会更新
  • 即使我们改变了原始文件的文件名,硬链接也可以正常工作
  • 不能为目录创建硬链接以避免递归循环
  • 硬链接的缺点是不能为不同文件系统上的文件创建硬链接,也不能为特殊文件或目录创建硬链接

软链接和硬链接之间的差异:

参数软链接硬链接
inode 值与原始文件的 inode 值不同与原始文件的 inode 值相同
目录可以链接目录不能跨目录链接
删除原始文件若原始文件被删除,该链接将失效,因为它只是原始文件的快捷方式即使删除原始文件,硬链接也将继续运行,因为它访问的数据与原始文件相同
速度较慢较快
内存消耗

总结:硬链接占用的空间更少,工作速度更快,但对它的修改会反映到原始文件中。而软链接需要更多的空间,对软链接的任何更改都不会对原始文件产生影响。


http://chatgpt.dhexx.cn/article/Hf50lU3o.shtml

相关文章

服务器inode满了怎样删除文件,inode满了

inode满了 内容精选 换一换 可能原因:客户端缓冲区(output buffer)占用过多的内存空间。解决方案:Redis-cli客户端连接实例后,执行大key扫描命令:redis-cli --bigkeys,然后执行info,查看output buffer占用情况。 系统每30秒周期性检测磁盘Inode使用率,并把实际Inode使用…

一、Inode

文章目录 一、Inode概述1.1、文件数据包括元信息与实际数据1.2、inode的特殊作用1.3、Linux系统文件三个主要的时间属性1.4、目录文件的结构1.5、inode的号码 二、inode的大小三、链接文件四、恢复EXT类型的文件五、恢复XFS类型的文件xfsdump命令格式六、xfsdump使用限制七、日…

inode节点(详解)

首先,要明确理解inode是理解Linux/Unix文件系统和硬盘存储的基础。 1.什么是inode? 理解inode,要从文件存储说起。文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”。每个扇区能存储512字节(相当于0.5KB&#xff09…

Linux inode 详解

目录 1 inode 和 block 概述 2 inode 内容 2.1 stat 2.2 file 2.3 inode 号码 2.4 inode 大小 2.5 特有现象 2.6 inode 耗尽故障 3 硬链接与软链接 3.1 硬链接 3.2 软链接 1 inode 和 block 概述 文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区 secto…

文件系统之inode

注:本文分析基于linux-4.18.0-193.14.2.el8_2内核版本,即CentOS 8.2 1 inode 内存中,每个文件都有一个inode,一切皆文件,其实应该是说一切皆inode。inode保存了文件系统中一个文件的属性描述,比如文件类型…

内核中inode结构体

在介绍inode结构体之前先做一个链接文件的实验: 1.创建一个普通的文件test.txt,并写入内容查看,如下 2.创建test.txt的硬链接文件,并测试如下: 3.创建test.txt的软连接文件并测试,如下: …

linux inode大小,Linux inode详解

Sam最近在架设spnfs过程中发现。在client上创建文件,文件名以及目录关系都可以在MDS上表现出来。文件内容则存储在DS上。但DS上的文件名却都是由数字组成的。命名方式为:inode.xxxx. 关于inode,Sam刚开始以为是kernel的node概念。后来查了一下…

理解inode

文章目录 磁盘构成磁盘存储的映射 inode和data block(重点)inode bitmapblock bitmapinode tabledata table 查找文件的示意图(重点)创建新文件需要的操作(重点)为什么明明还有空间,却创建不了文…

Linux inode

之前写了一篇Linux的文件描述符博客,是针对打开的文件来说的。那么如果一个文件没有被打开呢?存在哪里呢?又怎么存储?今天让我们一起来坐上"贼船"到知识的海洋中学习吧~ 目录 磁盘 什么是磁盘? 磁盘vs线…

inode结点

一、 机械硬盘 1.1 工作原理 写入时,磁头线圈加电,在周围产生磁场,磁化其下的磁性材料;电流的方向不同,所以磁场的方向也不同,可以表示 0 和 1 的区别。——“电生磁”。 读取时,磁头线圈&am…

什么是inode?

理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫扇区(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区&…

inode详解

文章目录 什么是inode?inode的内容(inode是一个结构体)block区和inode区的理解inode编号硬链接软连接 什么是inode? 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区&quo…

代码编写流程

文章目录 代码编写步骤好的代码满足条件:注意事项 代码编写步骤 1、分析任务目标,根据目标选择合适的代码设计模式   1.1、创建模式选择   1.2、结构模式选择   1.3、行为模式选择 2、整理思路、画出思维导图、或代码流程图 3、找到其中的关键对象…

代码详解设计模式--模板模式

模板模式 一个抽象类公开定义了执行方法的模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 优点: 封装不变部分,扩展可变部分。提取公共代码,便于维护。行为由父类控制,子类实现…

GRID-FORM 基于 VUE3 可视化低代码表单设计器

本文开源代码在 GRID-FORM,如能帮到您麻烦给个星哈 楔子 大概 4 年前,我做了一个简单的动态表单功能,开发人员通过 UI 界面配置表单(其实就是添加常用的控件,如文本框、下拉框等)就能向用户提供数据查询&a…

领域驱动实践总结(基本理论总结与分析+架构分析与代码设计+具体应用设计分析V)

目录 领域驱动实践总结三:具体应用设计分析 一、应用项目的基本背景 二、针对项目进行领域驱动的战略设计阶段 (一)事件风暴确定产品愿景 (二)事件风暴进行业务场景分析 场景分析一:请假 用户:…

领域驱动实践总结(基本理论总结与分析+架构分析与代码设计V+具体应用设计分析)

目录 领域驱动实践总结二:架构分析与代码设计 一、微服务架构模型的对比与选择 (一)整洁架构 (二)六边形架构 (三)DDD 分层架构 1.用户接口层 2.应用层 3.领域层 4.基础层 5.从三层架构向 DDD 分…

十二种常见设计模式代码详解

零:设计模式分类 设计模式有创建型模式、结构型模式与行为型模式 创建型:单例模式、工厂模式(简单工厂,工厂方法,抽象工厂)结构型:适配器模式、门面模式、装饰器模式、注册树模式、代理模式、…

优雅代码的秘密,都藏在这6个设计原则中

优雅的代码,犹如亭亭玉立的美女,让人赏心悦目。而糟糕的代码,却犹如屎山,让人避而远之。 如何写出优雅的代码呢?那就要理解并熟悉应用这6个设计原则啦:开闭原则、单一职责原则、接口隔离原则 、迪米特法则…

低代码--低代码开发(LCDP)介绍

低代码开发(LCDP)介绍 1 介绍1.1 概述1.2 行业风向1.3 行业报告1.4 优点减少重复编程避免沟通隔阂提升效率 1.5 挑战完全抛弃代码的代价,就是平台能力与灵活性受限应用低代码平台阻力大技术局限老旧系统改造困难职业角色缺失应用者大多是技术…