Linux——文件系统与软硬链接

目录

前言

一、物理上的磁盘

二、磁盘存储的逻辑抽象结构

三、块组内容与工作原理 

1.inode

2.Data bolcks

3.inode 位图

4.bolck bitmap

5.GDT

6.Super Block 

四、软硬链接

五、软硬链接链接目录


前言

我们之前学习了文件标识符,重定向,缓冲区等等,但是这些都是对已打开文件进行管理的,但是操作系统中被打开的文件只占小部分,更多的是那些在磁盘中未打开的文件,但是操作仍然要对其进行管理,今天文件系统他就来了。

一、物理上的磁盘

我们肯定是将文件放到磁盘中的,这是因为磁盘的特性,他速度虽然不快,但可以长期存储文件,并且容量也比较大。现在我们的电脑存储设备大多是固态硬盘,SATA接口或者M.2接口,比起磁盘来体积小速度快,但成本也高,同时数据难以恢复企业更多的使用的是磁盘,也就是机械硬盘

磁盘的内部所示如图

剖析图 

俯视图 

从图片中我们可以看出,磁盘一圈一圈的有很多磁道,每一个磁道又划分了很多扇区,扇区是磁盘的最小存储单元---512字节,这是因为磁盘本身比较慢,按比特位来读写效率非常差,就算只需访问1比特位,也得将整个扇区放到内存中。

如果我想向一个扇区写入,首先得选择哪一面——选择磁头,其次选择哪一个磁道,最后选择磁道中的哪一个扇区。这就是CHS定位法(柱面cylinder,磁头head,扇区sector)。

二、磁盘存储的逻辑抽象结构

我们可以将磁盘想象成可以随机存储的磁带,磁带是很长的线,这根线不就类似于磁道吗,将线卷起来就类似于磁盘了。

既然这样,我们可以将磁盘空间抽象为线性空间,有好几面,每一面又有N多个磁道,每一个磁道又分为N个扇区,这不就类似于数组了呀。

比如1-100000为第一面,1-1000为第一个磁道,依次类推,那么我们对磁盘的管理,也就变成了对数组的管理。

操作系统可以按照扇区(512Byte)为单位进行存取, 但更好的是按照文件块(8个扇区 4KB)为单位进行数据存取。这样能保证8个扇区是连续的,能更好利用局部性原理,让随机寻址变连续寻址,提升效率。

三、块组内容与工作原理 

我们现在有500G的磁盘,我对其进行分区,三个区100G,一个区200G,分区之后,需要进行格式化,也就是将管理的数据写入到块组中。每一个块组的大小是格式化的时候确定的,不可修改。块组里又有什么内容呢?

1.inode

一般情况下,一个文件一个inode,inode为文件编号,在整个分区具有唯一性,Linux内核中,识别文件和文件名无关,只和inode有关

块组中存在 inode 节点表 ,存放文件属性,如文件大小,所有者,最近修改时间等等。因为文件的属性是固定的,虽然内容不一定一样,但是属性占用的空间大小是一样的(128字节),inode表就是一个结构体数组,因此可以很方便的通过inode找到文件相关属性。

2.Data bolcks

前面inode Tables存放的是文件的属性,Data bolock是数据区,存放文件的内容

之前我们提到,每一个数据块大小都是4KB,因此我们也可以对数据块进行编号,inode 结构体里面还有一个数组,存放的是文件的块号,因此该文件的内容也能轻易的找到。

3.inode 位图

每一个bit表示一个inode是否空闲可用。

比如有40000w个inode,那么我们只需要4(KB)就能代表所有的inode是否空闲。

4.bolck bitmap

块位图,比特位表示对应的Data block是否被使用。

5.GDT

前面的Bolck 和 inode等都是关于文件的信息,Group Descriptor Table而描述块组属性信息。

6.Super Block 

超级块存放的是整个分区里面的数据,包括inode和block等等数据。他并没有跟Boot Block一样存放在分区的开始,而是存放在分组中,是因为Boot Block一般不会轻易变化,也就是不易发生损坏,而inode和block等数据会持续的发生变化,一旦Super Block毁坏,整个分区可能都不好了,因此放在组里,可以多放几份,保证Super Block的稳定,这一份挂掉从其他的组再拷贝过来再读取。同时Super Block也不会存在很多组里,会选择少数组存取,因为已经够用了。

 

  • Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相 同的结构组成。政府管理各区的例子
  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量, 未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的 时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了
  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息。
  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没 有被占用
  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
  • i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等
  • 数据区:存放文件内容

小总结一下

用户只用文件名,内核只用inode编号,文件名和inode可以互相映射。自己目录内部直接保存的文件(包括文件夹)都有一份映射关系,因此同一目录下的所有文件不能重命名。因此我想在一个目录下新建、修改、删除文件需要 w 权限(会改变文件映射关系)。

四、软硬链接

链接文件分为两种,一种叫软链接,一种叫硬链接。

软连接代码如下

ln -s 源文件名 新文件名

 硬链接代码如下,也就是没有 -s(soft)

ln 源文件名 新文件名

通过inode编号可以看到,软链接是一个独立的文件,而硬链接不是,因为他和源文件inode编号一样。 

软链接就是新建了一个快捷方式,比如我电脑桌面的英雄联盟就是链接了D盘里面的laucher.exe,如果我们要卸载,只删除掉快捷方式是不行的。

我们知道,inode与文件名互相映射,硬链接不是一个独立文件,文件名不同,但inode相同,由此可推断硬链接的本质就是在指定目录内部添加的一组映射关系

inode内部有引用计数,表面有几个文件名与之映射,当引用计数变为了0,那就代表文件被删除了。

同时今天我们也能明白文件权限后面那个数字是什么意思了,我们可以看到,当我们删除test的时候,inode没变,有一个值从2变成了1,该值就是硬链接数,哪些文件名指向对于的inode

硬链接的应用在linux系统中经常看见, 比如文件中的 "." 和 ".." ,"." 代表当前文件,进入当前文件夹创建的文件夹,会发现 "." 文件的inode就是 dir , ".."文件的inode就是前面文件的 "." 。由于是硬链接的关系,因此我们才可以使用"."找到当前文件夹,使用".."找到上级目录。

五、软硬链接链接目录

软链接可以链接目录,而硬链接无法链接目录。

这是因为操作系统设立限制,比如当使用find查找某个文件时,使用硬链接就会发生环形链接的问题,find如果没有第一时间找到,则会陷入循环。因为硬链接的inode没有改变,他本质就是一个目录文件。

软链接inode改变了,他本质是一个普通文件,find查找时发现名字对不上,便会跳过去寻找其他文件。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring框架----AOP全集

一:AOP概念的引入 首先我们来看一下登录的原理 如上图所示这是一个基本的登录原理图,但是如果我们想要在这个登录之上添加一些新的功能,比如权限校验 那么我们能想到的就有两种方法: ①:通过对源代码的修改实现 ②&a…

Android实现点击获取验证码60秒后重新获取功能

本文实例为大家分享了Android实现点击获取验证码60秒后重新获取的具体代码,供大家参考,具体内容如下 上代码 /*** Created by Xia_焱 on 2017/5/7.*/public class CountDownTimerUtils extends CountDownTimer {private TextView mTextView;/*** param…

Requests教程-17-请求代理设置

上一小节我们学习了requests解决乱码的方法,本小节我们讲解一下requests设置代理的方法。 代理基本原理 代理实际上指的就是代理服务器, 英文叫作proxy server ,它的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中…

Android Studio入门——页面跳转

1.工程目录 2.MainActivity package com.example.demo01;import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCo…

前端开发小技巧 - 【Vue3 + TS】 - 在 TS + Vue3 中使用 Pinia,实现 Pinia 的持久化,优化Pinia(仓库统一管理)

前言 ts 中使用 pinia 和 Vue3 基本一致,唯一的不同点在于,需要根据接口文档给 state 标注类型,也要给 actions 标注类型;以下都是 组合式API 的写法,选项式API 的写法大家可以去官网看看; Pinia&#xff…

Text-to-SQL 工具Vanna进阶|数据库对话机器人的多轮对话

跟数据库对话机器人对话,我可不止一个问题。 可能基于第一句问话,还有第二句、第三句问话。。。第N句对话。所以本文测试了多轮对话功能。 单轮对话的环境搭建参考博客 Text-to-SQL 工具Vanna + MySQL本地部署 | 数据库对话机器人 我的数据是这样 1. 基础配置 import vann…

深入解析Java中锁机制以及底层原理

一、概述 1.1 背景 概念:锁是多线程编程中的机制,用于控制对共享资源的访问。可以防止多个线程同时修改或读取共享资源,从而保证线程安全。 作用:锁用于实现线程间的互斥和协调,确保在多线程环境下对共享资源的访问顺…

前端性能优化——javascript

优化处理: 讲javascript脚本文件放到body标记的后面 减少页面当中所包含的script标记的数量 课堂练习: 脚本优化处理 使用原生JavaScript完成操作过程。 document.querySelector document.querySelectorAll classList以及类的操作API Element.class…

LLM之RAG实战(二十九)| 探索RAG PDF解析

对于RAG来说,从文档中提取信息是一种不可避免的场景,确保从源文件中提取出有效的内容对于提高最终输出的质量至关重要。 文件解析过程在RAG中的位置如图1所示: 在实际工作中,非结构化数据比结构化数据丰富得多。如果这些海量数据无…

记录西门子:SCL设置不同顺序

一台搅拌的设备,需要控制三种料的进料顺序和进料重量,顺序和重量可以随便设定,也可以是几十种料。触摸屏上面有A、B、C三种液体原料,需要设定三种液体原料重量,并设定序号。 假设如下面所示设定:那将先打开…

java数据结构与算法刷题-----LeetCode90. 子集 II

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 解题思路:时间复杂度O( n 2 ∗ n n^2*n n2∗n),空间复杂度O(n) 7…

开箱机自动化装箱技术:原理、应用与未来趋势

在物流、电商等行业中,开箱机作为自动化装箱技术的核心设备,正逐渐改变着传统的包装方式,为企业带来了效率和成本的双重优化。星派将从开箱机的原理出发,详细解析其应用领域,并展望未来的发展趋势。 一、开箱机的工作原…

《高效便捷,探索快递柜系统架构的智慧之路》

随着电商业务的蓬勃发展,快递柜系统作为一种高效、便捷的最后一公里配送解决方案,正在受到越来越多企业和消费者的青睐。本篇博客将深入探讨快递柜系统的架构设计理念、优势和实践,帮助读者了解如何构建智能化的快递柜系统,提升物…

【UE5】非持枪状态蹲姿移动的动画混合空间

项目资源文末百度网盘自取 在BlendSpace文件夹中单击右键选择动画(Animation)中的混合空间(Blend Space) ,选择SK_Female_Skeleton,命名为BS_NormalCrouch 打开BS_NormalCrouch 水平轴表示角色的方向,命名为Direction,方向的最…

教师如何搭建学生查询考试分数的平台?

随着信息技术的快速发展,搭建一个学生查询考试分数的平台已经成为现代教育管理的重要组成部分。这样的平台不仅可以提高成绩管理的效率,还能为学生提供便捷、及时的成绩查询服务。那么,作为教师,我们应该如何搭建这样一个平台呢&a…

低代码开发平台,快速搭建开源MES系统

MS低代码云MES作为一家专注于提供生产制造数字化方案的服务商,“以客户为中心”、以“数据驱动、智能化、互联化”为企业的核心标签,以低代码平台为切入点,帮助企业构建以人为本的未来供应链生态系统,实现制造企业的智能化转型。 …

Simple Admin:基于Go Zero的大型项目分布式微服务后端管理系统

Simple Admin 是一个开箱即用的分布式微服务后端管理系统,基于go-zero开发,为开发中大型后台提供了丰富的功能,支持三端代码生成。 官方自带多种扩展,助力中小企业快速上云,快速迭代。适合用于微服务学习和商用&#x…

如何拆解技术瓶颈的难点

以大化小的思路 解决一个一个小问题从而解决最终问题 三段论: 抽象能力 职责领域划分 分层构建解决方案 案例:全局分布式事务的解决方案 抽象能力:全局分布式 是由一个个小的事务组合而成的,其中一个分布式事务出现问题&#xff…

VsCode免密登录

创建本地密匙 按下WinR输入cmd,输入 ssh-keygen -t rsa然后连续回车直到结束 找到Your public key has been saved in C:\Users\Administrator/.ssh/id_rsa.pub,每个人都不一样找到密匙所在地 打开id_rsa.pub这个文件,可以用记事本打开&am…

wayland(xdg_wm_base) + egl + opengles 渲染使用纹理贴图的旋转 3D 立方体实例(十三)

文章目录 前言一、使用 stb_image 库加载纹理图片1. 获取 stb_image.h 头文件2. 使用 stb_image.h 中的相关接口加载纹理图片3. 纹理图片——cordeBouee4.jpg二、渲染使用纹理贴图的旋转 3D 立方体1. egl_wayland_texture_cube.c2. Matrix.h 和 Matrix.c3. xdg-shell-client-pr…
最新文章