【Linux】文件系统与软硬连接

news2024/11/28 10:50:57

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:折纸花满衣
🏠个人专栏:题目解析
🌎推荐文章:【LeetCode】winter vacation training

在这里插入图片描述


目录

  • 👉🏻 磁盘
    • HDD的物理存储结构
    • 磁盘的逻辑抽象结构
  • 👉🏻磁盘文件系统
    • 常见磁盘文件系统
    • 磁盘文件系统组成部分
    • 创建一个文件的具体过程
    • dentry
    • 挂载分区
  • 👉🏻硬连接和软连接
    • 区别和应用场景

👉🏻 磁盘

当你谈论磁盘时,通常指的是计算机存储设备中的硬盘驱动器(HDD)或固态驱动器(SSD)。它们都是用于存储和检索数据的重要组件。

硬盘驱动器(HDD):硬盘驱动器使用旋转的磁盘和移动的读写头来存储和访问数据。它由一个或多个磁性盘片组成,每个盘片上都有一个磁性涂层。读写头在盘片上移动,通过磁场读取或写入数据。硬盘驱动器的优点包括较大的存储容量和相对较低的成本

固态驱动器(SSD):固态驱动器使用闪存芯片来存储数据,而不需要任何移动部件。它类似于您在手机、平板电脑或USB闪存驱动器中使用的存储设备。固态驱动器的优点包括更快的数据访问速度、更高的数据传输速率和更好的耐用性。然而,与硬盘驱动器相比,它们通常具有较小的存储容量,并且价格相对较高。

无论是硬盘驱动器还是固态驱动器,它们都是计算机中重要的存储设备。它们用于存储操作系统、应用程序、文件和其他数据,并且对于计算机的整体性能至关重要。

HDD的物理存储结构

在这里插入图片描述
HDD(硬盘驱动器)是一种常见的存储设备,用于在计算机系统中保存和检索数据。它由以下几个主要硬件组成部分组成:

  1. 盘片(Platters):是HDD的主要部分,通常由金属或玻璃制成的圆盘形结构。数据存储在盘片的表面上,每个盘片都有两个表面。

  2. 磁头(Read/Write Heads):位于盘片的表面上,负责读取和写入数据。磁头可以感应盘片上的磁性颗粒,并将其转换为数字数据或将数字数据转换为磁性颗粒。

  3. 手臂(Actuator Arm):连接磁头的部分。手臂可在盘片上移动,将磁头定位到指定的磁道上以读取或写入数据。

  4. 主轴电机(Spindle Motor):驱动盘片旋转的电机。主轴电机使盘片以高速旋转,通常每分钟数千转。

  5. 逻辑板(Logic Board):位于HDD的电路板上,负责控制和管理HDD的操作。逻辑板上包含处理器、内存芯片和接口电路等组件。

  6. 运动控制器(Controller):连接逻辑板和手臂,负责控制手臂的移动,并确保磁头正确定位到指定的磁道上。

以上是HDD的主要硬件组成部分。它们密切协作以实现数据的读取和写入操作。

磁盘的逻辑抽象结构

在这里插入图片描述

👉🏻磁盘文件系统

常见磁盘文件系统

磁盘文件系统是一种用于在计算机硬盘驱动器上组织和管理文件和文件夹的方法。它定义了文件和目录的结构、命名规则、访问权限以及如何在物理介质上存储和检索数据。

以下是几种常见的磁盘文件系统:

  1. FAT(文件分配表):FAT是一种较早的文件系统,最早由微软引入。它使用文件分配表来跟踪文件在磁盘上的存储位置,并支持文件和目录的命名。FAT文件系统广泛应用于早期的Windows操作系统和可移动存储介质(如磁盘和闪存驱动器)。

  2. NTFS(新技术文件系统):NTFS是微软开发的一种高级文件系统,用于Windows NT系列操作系统(包括Windows XP、Windows 7、Windows 10等)。它提供了更高级的功能,如对大容量硬盘的支持、文件压缩、访问控制和日志记录等。

  3. ext4:ext4是Linux操作系统中广泛使用的文件系统,是对先前的ext3文件系统的改进。它提供了更高的性能和可靠性,并支持更大的文件和文件系统容量。

  4. HFS+(Mac OS 扩展):HFS+是苹果公司在早期Mac OS系统中使用的文件系统。它支持文件和目录的命名、访问权限以及对大容量存储介质的支持。

  5. APFS(Apple 文件系统):APFS是苹果公司在最新的macOS和iOS系统中引入的先进文件系统。它具有高级的数据完整性和安全性功能,并支持快照、加密和快速文件系统操作等。

这些是常见的磁盘文件系统,不同的操作系统和应用场景可能会选择不同的文件系统来满足其特定需求。

磁盘文件系统组成部分

磁盘文件系统通常由以下几个组成部分组成:

  1. 分区表(Partition Table):分区表是磁盘上的一个特殊区域,用于记录分区的信息。它定义了磁盘上各个分区的位置、大小和类型等信息。

  2. 引导扇区(Boot Sector):引导扇区位于分区表之前,是磁盘上的第一个扇区。它包含引导加载程序(Boot Loader),用于启动操作系统。引导扇区也包含了其他文件系统的元数据和相关配置信息。

  3. 文件分配表(File Allocation Table):文件分配表是一种常见的文件系统结构,例如FAT文件系统。它记录了文件在磁盘上的存储位置和状态信息,以及文件和目录的命名信息。

  4. 超级块(Superblock):超级块是文件系统的关键元数据结构之一。它包含了文件系统的整体信息,如文件系统类型大小块大小inode表的位置等。超级块在文件系统初始化时创建,并在运行时被读取以获取文件系统的元数据信息。

  5. Inode(Index Node):Inode是文件系统中的索引节点,用于存储文件和目录的元数据,如文件大小、权限、所有者等。每个文件和目录都对应一个唯一的Inode节点

  6. 数据块(Data Blocks):数据块是用于存储实际文件内容的区域。文件系统将文件内容分割成多个数据块,每个数据块通常有固定的大小(如4KB)。文件系统通过Inode节点中的指针将数据块链接在一起,以构建和管理文件的存储。

这些组成部分共同构成了磁盘文件系统的结构和功能,使得文件和目录可以被组织、存储和访问。不同的文件系统可能会有稍微不同的组成部分和实现方式,但大体上都包含了类似的概念和结构。

下面举Linux下的ext2文件系统图来深入了解
在这里插入图片描述

  • Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相
    同的结构组成。政府管理各区的例子
  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,
    未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的
    时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个
    文件系统结构就被破坏了

Super Block之所以在多个Block Group存在,就是为了防止一个Super Block的信息被破坏导致整个
文件系统结构就被破坏

  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息
  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没
    有被占用
  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
  • i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等
  • 数据区:存放文件内容

一个文件对应一个inode编号,linux中根据inode编号识别文件,与文件名无关。

因为有了块位图和inode位图,操作系统对文件的管理就非常轻松了,我们想创建一个文件时,就在inode位图中查看哪个比特位为0(即未被使用),此时就可以将该位置比特位对应的i节点表中的inode编号赋这个文件。块位图也是同理,只是对文件内容的分配进行处理。

所以删文件只要改位图,这就解释为什么下载文件慢,而删除文件就非常快了,而且文件之所以能够恢复,就是因为我们只是更改了位图的状态,实际上在数据块中的数据没有清除。但是,如果我们不小心误删了文件,尽量不要进行文件操作,因为新的文件操作可能会将新的文件内容覆盖到我们原本删除的文件对应的数据块,如果数据块的内容被覆盖了,即使文件恢复了,也不是原来的模样了。

创建一个文件的具体过程

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

在这里插入图片描述

🧆 创建一个新文件主要有一下4个操作:

  1. 存储属性
    内核先找到一个空闲的i节点(这里是263466)。内核把文件信息记录到其中。
  2. 存储数据
    该文件需要存储在三个磁盘块,内核找到了三个空闲块:300,500,800。将内核缓冲区的第一块数据
    复制到300,下一块复制到500,以此类推。
  3. 记录分配情况
    文件内容按顺序300,500,800存放。内核在inode上的磁盘分布区记录了上述块列表。
  4. 添加文件名到目录
    新的文件名abc。linux如何在当前的目录中记录这个文件?内核将入口(263466,abc)添加到目录文
    件。文件名和inode之间的对应关系将文件名和文件的内容及属性连接起来。

dentry

dentry(Directory Entry)是Linux文件系统中的一个重要概念,它代表着目录项。每个目录都有一个或多个dentry,用于表示该目录下的文件和子目录

dentry是与路径名相关联的数据结构,它包含了文件或目录的元数据,如文件名、权限、所有者等。dentry还包含指向对应inode的指针,通过这个指针可以获取到文件的具体内容、大小等信息

dentry的主要作用是加速文件系统的操作。当用户打开、读取或写入一个文件时,操作系统需要根据路径名找到对应的inode来执行相应的操作。而dentry充当了一个缓存,当用户再次访问相同的文件时,可以直接从缓存中获取dentry,避免了频繁的磁盘访问,提高了文件系统的性能。

此外,dentry还具有层次化的结构,反映了目录的层级关系。每个dentry都有一个指向其父目录dentry的指针,从而构成了一个目录树。

总结起来,dentry是Linux文件系统中的目录项,通过缓存文件和目录的元数据,加速文件系统的操作,同时构建了目录的层级结构

挂载分区

在Linux系统中,挂载分区是将文件系统连接到文件系统树中的特定位置,以便可以访问其内容。当你插入一个新的磁盘或者创建一个新的分区时,需要将其挂载到文件系统树上的某个目录才能对其进行访问。

以下是在Linux系统中挂载分区的一般步骤:

  1. 创建挂载点:首先,你需要在文件系统中选择一个目录作为挂载点。这个目录将成为访问该分区内容的入口点。你可以选择一个已有的目录作为挂载点,也可以创建一个新的目录作为挂载点。

  2. 查看可用分区:使用命令lsblkfdisk -l查看当前系统上可用的分区和设备信息。确定要挂载的分区的设备名称,如/dev/sdb1

  3. 挂载分区:使用mount命令挂载分区。语法为:

sudo mount <device> <mount_point>

其中,<device>是待挂载的分区设备名称,<mount_point>是挂载点的路径。

  1. 访问分区:分区挂载成功后,你可以通过挂载点路径来访问分区中的文件和目录。可以使用cd命令进入挂载点,然后执行其他操作,如查看文件列表、拷贝文件等。

  2. 卸载分区:当你不再需要访问分区时,可以使用umount命令将其卸载。语法为:

sudo umount <mount_point>

其中,<mount_point>是挂载点的路径。

请注意,执行挂载和卸载操作时通常需要具有超级用户(root)权限,因此需要使用sudo命令或以root身份执行。

挂载分区是将磁盘、分区与文件系统连接起来,使其可用于存储和访问文件。通过正确挂载分区,你可以轻松管理和利用系统中的不同存储设备。

👉🏻硬连接和软连接

在Linux系统中,硬连接(Hard Link)和软连接(Symbolic Link,也称为符号链接或软链接)是两种不同的文件链接方式。

硬连接

  • 硬连接是通过在文件系统中创建一个指向同一inode的新目录项来实现的。换句话说,硬连接是多个文件名指向相同的物理数据块。

硬连接就是在指定目录内的映射关系:文件名<->inode
一个文件真正被删除时:没有文件名<->inode映射关系了,inode内部有引用计数,知道有几个文件名映射关系

  • 硬连接与原始文件之间没有任何区别,它们都指向相同的数据块。因此,删除其中一个硬链接并不会影响其他硬链接或原始文件。
  • 硬链接只能在同一文件系统内创建,不能跨文件系统创建。
  • 修改硬链接或原始文件的内容都会反映在其他连接上。

软连接

  • 软连接是一个指向目标文件或目录的特殊文件。
  • 软连接文件本身包含了目标文件的路径信息。当访问软连接时,系统将追踪到目标文件或目录。
  • 软连接类似于Windows系统中的快捷方式
  • 删除原始文件或目录后,软连接仍然存在,但无法访问到有效的目标。
  • 软连接可以跨文件系统创建。

总结:
硬连接和软连接都允许你创建一个文件名指向另一个文件的链接,但它们的实现方式和行为有所不同。硬连接是多个文件名指向相同的物理数据块,而软连接是一个特殊的文件,指向目标文件或目录的路径。根据具体需求,可以选择使用硬连接或软连接来满足不同的链接需求。

区别和应用场景

硬连接和软连接之间存在的区别和用途如下:

  1. 文件系统中的链接方式不同:

    • 硬连接是通过在文件系统中创建一个指向同一inode的新目录项来实现的,它们与原始文件共享相同的物理数据块。
    • 软连接是一个特殊的文件,其中包含了目标文件的路径信息。
  2. 跨文件系统的支持:

    • 硬连接只能在同一文件系统内创建,不能跨文件系统创建。
    • 软连接可以跨文件系统创建。
  3. 对目标文件或目录的处理:

    • 删除目标文件或目录后,硬连接仍然存在,并且可以继续访问。因为硬连接与原始文件没有关联,只是共享相同的数据块。
    • 删除目标文件或目录后,软连接将无法访问有效的目标。软连接只是指向目标文件或目录的路径,当目标不存在时,软连接失去了有效性。
  4. 修改链接和目标的影响:

    • 修改硬链接或原始文件的内容都会反映在其他链接上,因为它们共享相同的数据块。
    • 修改软连接不会影响目标文件或目录,因为软连接只是指向目标的路径

应用场景:

  • 硬连接通常用于创建文件的备份,或者在不同的位置使用相同的文件内容,以节省存储空间。
  • 软连接常用于创建快捷方式或提供方便访问的链接,可以跨越文件系统,并且在目标文件被替换时仍然有效。

需要注意的是,软连接的性能相对较低,因为它需要解析路径。而硬连接没有这个开销,因为它们直接指向相同的数据块。因此,在选择使用硬连接或软连接时,应根据具体需求和情况做出适当的选择。


如上便是本期的所有内容了,如果喜欢并觉得有帮助的话,希望可以博个点赞+收藏+关注🌹🌹🌹❤️ 🧡 💛,学海无涯苦作舟,愿与君一起共勉成长

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

element-ui Vue 封装组件按钮工具栏,使用slot插槽

封装常用按钮工具栏,方便其它页面调用 缺点:工具栏下面div会显示工具栏下面,下面需要使用margin-top:40px(小学生一个没整明白)希望大神能帮解决 运行效果 组件代码 tt-btnBar.vue <template><div><div class"btnbarP"><div class"btnbar…

【C语言】详解文件与文件操作

1.什么是文件 文件是记录在外存上的相关信息的命名组合&#xff0c;但是在程序设计中&#xff0c;我们⼀般谈的文件有两种&#xff1a;程序文件、数据文件&#xff08;从文件功能的角度来分类的&#xff09;。 1.1程序文件 程序文件包括&#xff1a; 源程序文件 &#xff0…

Pytorch基础知识点复习

文章目录 并行计算单卡训练多卡训练单机多卡DP多机多卡DDPDP 与 DDP 的优缺点 PyTorch的主要组成模块Pytorch的主要组成模块包括那些呢&#xff1f;Dataset和DataLoader的作用是什么&#xff0c;我们如何构建自己的Dataset和DataLoader&#xff1f;神经网络的一般构造方法&…

头部姿态估计算法原理

人脸检测 文章目录 人脸检测一、前言二、原理三、代码实现 一、前言 头部姿态估计是通过一幅面部图像来获得头部的姿态角. 在3D空间中&#xff0c;表示物体的旋转可以由三个欧拉角(Euler Angle)来表示&#xff1a;分别计算 pitch(围绕X轴旋转)&#xff0c;yaw(围绕Y轴旋转) 和…

网络新手必读!CentOS 7系统IP配置与防火墙管理攻略

前言 掌握CentOS 7系统的网络配置技能&#xff0c;从IP地址、子网掩码、DNS到防火墙&#xff0c;一篇文章全搞定&#xff01;无论你是网络新手还是寻求深入了解的高手&#xff0c;这篇文章都为你提供了简单易懂的配置指南&#xff0c;助你轻松驾驭系统网络。摆脱繁琐的配置困扰…

C# 图解教程 第5版 —— 第23章 异常

文章目录 23.1 什么是异常23.2 try 语句23.3 异常类23.4 catch 子句23.5 异常过滤器23.6 catch 子句段23.7 finally 块23.8 为异常寻找处理程序23.9 进一步搜索23.9.1 一般法则23.9.2 搜索调用栈的示例&#xff08;*&#xff09; 23.10 抛出异常23.11 不带异常对象的抛出23.12 …

基于变换域的模版匹配

模板匹配原理 图像的空间域与其他域之间的变换&#xff0c;如傅里叶变换&#xff0c;小波变换&#xff0c;轮廓波变换&#xff0c;剪切波变换等&#xff0c;实际上是图像在其他坐标领域中的表现。在空间域中&#xff0c;图像的信息是像素值和坐标位置&#xff1b;在其他域中&a…

快速上手!LLaMa-Factory最新微调实践,轻松实现专属大模型

1.为什么要对Yuan2.0做微调&#xff1f; Yuan2.0&#xff08;https://huggingface.co/IEITYuan&#xff09;是浪潮信息发布的新一代基础语言大模型&#xff0c;该模型拥有优异的数学、代码能力。自发布以来&#xff0c;Yuan2.0已经受到了业界广泛的关注。当前Yuan2.0已经开源…

day19【LeetCode力扣】160.相交链表

day19【LeetCode力扣】160.相交链表 1.题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交**&#xff1a;** 题目数据 保证 整个链…

基于MATLAB计算无线通信覆盖(一)环境准备

一、环境 MATLAB 2022b 注&#xff1a;开始仿真前需部署地理坐标区和地理图&#xff0c;最好采用第三种&#xff0c;直接把底图数据下载到本地&#xff0c;防止连接不上网络时只能显示darkwater的底图。 可用于地理坐标区和地理图的底图如下表所示 二、下载底图并安装 工具&…

Intel开发环境Quartus、Eclipse与WSL的安装

PC &#xff1a;win10 64bit 安装顺序&#xff1a;先安装Quartus 21.4&#xff0c;接着Eclipse或者WSL&#xff08;Windows Subsystem for Linux&#xff09;&#xff0c;Eclipse与WSL的安装不分先后。 为什么要安装Eclipse&#xff1f; 因为Eclipse可以开发基于Nios II的C/…

RabbitMQ使用篇

☆* o(≧▽≦)o *☆嗨~我是小奥&#x1f379; &#x1f4c4;&#x1f4c4;&#x1f4c4;个人博客&#xff1a;小奥的博客 &#x1f4c4;&#x1f4c4;&#x1f4c4;CSDN&#xff1a;个人CSDN &#x1f4d9;&#x1f4d9;&#x1f4d9;Github&#xff1a;传送门 &#x1f4c5;&a…

CTF CRYPTO 密码学-1

题目名称&#xff1a;enc 题目描述&#xff1a; 压缩包中含两个文件&#xff1a;一个秘钥d.dec&#xff0c;一个密文flag.enc 解题过程&#xff1a; Step1&#xff1a;这题是一个解密他题目&#xff0c;尝试openssl去ras解密 工具简介 在Kali Linux系统中&#xff0c;openss…

交友系统程序开发,前后端源码交付,允许二开,UI配色新颖,APP小程序H5随心搭配!

在开发设计与测试阶段&#xff0c;主要包括了程序开发、测试和上线运营等环节。根据产品经理确定的功能需求&#xff0c;开发团队开始进行具体的编程和开发工作。这个过程中需要考虑到不同设备、不同系统和不同版本的需求&#xff0c;确保软件可以在不同平台上稳定运行。 测试是…

通过指令反向翻译进行自我对齐

1、写作动机&#xff1a; 对齐大型语言模型以执行指导性任务通常需要在大量人工标注的指令或偏好信息上进行微调&#xff0c;然而&#xff0c;使用此类高质量数据对指令遵循任务进行标注是难以扩展的。 2、贡献&#xff1a; 提出了一种可扩展的方法&#xff0c;通过自动标注…

【问题记录】使用命令语句从kaggle中下载数据集

从Kaggle中下载Tusimple数据集 1.服务器环境中安装kaggle 使用命令&#xff1a;pip install kaggle 2.复制下载API 具体命令如下&#xff1a; kaggle datasets download -d manideep1108/tusimple3.配置kaggle.json文件 如果直接使用命令会报错&#xff1a; root:~# kagg…

使用dbever连接 hsqldb

完整的url为 jdbc:hsqldb:hsql://ip:端口/别名 注意&#xff0c;hsqldb跟随应用启动和停止&#xff0c;所以当应用断点时&#xff0c;hsqldb也会连接不上导致查询数据失败&#xff0c;可以断点前进一步

IOS-相机权限申请-Swift

配置描述 在Info.plist文件中&#xff0c;新建一个键值对Privacy - Camera Usage Description&#xff08;或者NSCameraUsageDescription&#xff09;&#xff0c;值为申请描述说明&#xff0c;自定义的 申请 然后在需要申请的文件中导入AVFoundation import AVFoundation…

时间序列预测 — BiLSTM-Attention实现单变量负荷预测(Tensorflow)

专栏链接&#xff1a;https://blog.csdn.net/qq_41921826/category_12495091.html 专栏内容 ​ 所有文章提供源代码、数据集、效果可视化 ​ 文章多次上领域内容榜、每日必看榜单、全站综合热榜 ​ ​ ​ ​ ​ ​ ​ 时间序列预测存在的问题 ​ 现有的大量方法没有真正的预测未…

高校学生选课系统源码开发方案

一、项目背景与目标 &#xff08;一&#xff09;项目背景 随着高校教育的发展&#xff0c;学生选课系统成为了高校管理中不可或缺的一部分。传统的手工选课方式存在着效率低下、易出错等问题&#xff0c;因此需要开发一款高效、便捷的高校学生选课系统。 &#xff08;二&…