文件系统和软硬链接

文章目录

  • 文件系统
    • 磁盘
    • 磁盘逻辑抽象
    • inode
  • 软硬链接
    • 软链接
    • 硬链接

文件系统

文件分为打开的文件和没有被打开的文件,而只有打开的文件是在内存的,也就是我们之前讲的,然而大部分文件都不是被打开的(当前不需要被访问的),它们都在磁盘中存放,显而易见,他们也是需要被管理的。而对于这部分文件的核心就是我们需要快速的定位它们在磁盘中的位置。

文件的管理:

  1. 打开文件进行管理
  2. 没有被打开的文件也要在磁盘中进行管理

对于打开文件和没有被打开文件的管理,我们称之为文件系统。

磁盘

磁盘是硬件,物理存储结构。
在这里插入图片描述

在这里插入图片描述

磁盘一片有两面,每一面都有一个磁头,可以左右移动,盘面是可以旋转的,所以这两个一结合,磁头就可以访问磁盘中的任意位置。一个盘面有很多的磁道,每一圈磁道可以有很多的扇形的扇区。而扇区是磁盘的最小存储单元(512字节)。
在这里插入图片描述
如果我们想向一个扇区写入,应该如何寻址?

  1. 选择磁头(head)
  2. 选择该面的那一个磁道(cylinder)
  3. 选择哪一扇区(sector)

这样的寻址方式为CHS定位法
现在可以向一个扇区进行写入,就可以向任意一个/多个扇区进行写入,可以多个扇区进行写入,当然也可以进行随机的读写。

磁盘逻辑抽象

一圈一圈的磁道我们可以想象一下一个圆可以抽象成一个长方形,所以我们的一圈圈磁道就是一个一个的圆形,所以我们可以把一个盘面抽象成一个数组,而数组元素的大小就是扇区,所以我们可以把整个磁盘也就是多个盘面抽象成一个超级大的数组。

在这里插入图片描述
所以我们根据数组的下标,然后根据每个盘面多大,每圈的磁道多大,就可以通过计算,定位到一个扇区的CHS地址。

操作系统可以根据扇区为单位进行存取,也可以基于文件系统以文件块为单位进行存取。Linux中OS一般读取的大小为8个扇区的大小(4KB),所以每次只需要给一个初始地址,然后向后读取8个单位即可,这样的以8个扇区为单位大小的起始地址为LBA地址

最终结论: 对于存储设备的管理就转化为了对数组的增删查改。

假设我们现在有500GB的空间需要我们管理,如果我们把这500GB的空间整体使用,从技术层面来说当然是可以的,但是我们用起来非常的不方便,所以我们会把一个非常大的空间进行分区,然后对分区进行管理,只需要把一个分区管好其他的分区可以复用这个分区的策略来进行管理。

在这里插入图片描述
然后可以让一个分区进行分组,然后只需要把一个组管好,其他组可以复用这个组的方式,所以对500GB的管理就转化为了对一个组的管理。所以磁盘也是设备
在这里插入图片描述
操作系统中管理文件无非即使我自己的文件信息和很多管理我的文件的信息,所以在文件系统开始用之前一定要把管理数据写入到块组中,而我的文件信息无非就是内容+属性,Linux下属性和内容是分开存储的。

格式化就是把磁盘中管理我们自己文件的信息初始化,相当于恢复出厂设置。

inode

Linux下,使用ls 加个-li选项就可以看到我们文件的indode。
在这里插入图片描述图中圈红的就是我们自己文件的inode。一般情况下一个文件一个inode,基本上inode每个文件都要有,inode在整个分区具有唯一性,Linux内核中识别文件和文件名无关,之和inode有关。由于文件我们用户用的是文件名,但是内核用的是inode,所以一定存在文件名和inode的映射关系。

在这里插入图片描述

我们在看这个图,我们会发现每个块组中包含很多的属性,我们看一下每个属性代表什么含义。

  1. 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了
  2. GDT,Group Descriptor Table:块组描述符,描述块组属性信息。
  3. 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没
    有被占用
  4. inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
  5. inode表:存放文件属性 如 文件大小,所有者,最近修改时间等
  6. 数据区:存放文件内容

inode中除了存放的有文件的属性之外,还有一个block的数组,表示自己的内容放在哪几个块中。一般来说这个数组的大小是15。后两个位置并不值就存放内容,倒数第二个存放二级映射,而倒数第一个存放三级映射。

所以后四个是存放我们自己的文件内容,而前两个是存放管理文件的内容。一般超级块没隔几个块组就会有一个,因为为了防止因为超级块坏的话整个磁盘就会挂掉,所以为了防止这种情况,如果一个坏了,就可以去后面把正确的拷贝回来,可以增强容错率。

对于普通文件来说,创建一个普通文件只需要通过inode位图找到一个没有用过的inode,然后把位图修改成1,通过inode表,索引找到inode,把属性填进去,把内容放进block中,修改blocd的位图,把内容存在的block的下标填入自己的block数组中,就搞定了。
对于目录文件来说,它的创建方式和普通文件完全一样,只不过它的内容是它目录下的文件的文件名和inode的映射关系。而删除一个文件只需要修改一个文件对应的inode位图和block位图即可。

上面说的所有都是在一个分区中,那么我们如何区分在哪一个分区呢?
每一个文件都有路径,可以通过判断路径的前缀来判断文件在哪一个分区下。

如何查找一个文件?
一般查找一个文件是,不是是打开还是怎样,文件的路径都是我们用户提供,所以每个进程都会有一个CWD,所以OS只需要通过用户给的路径确定在哪一个分区,然后依次根据文件名和inode的映射关系就可以找到我们需要的文件。

软硬链接

软链接

Linux中可以通过ln -s 的方式来建立软链接。
在这里插入图片描述
可以发现软链接是一个独立的文件,有独立的inode,文件的内容就是指向文件的路径。类似于Windows中的快捷方式。软链接就是普通文件。

硬链接

Linux中可以通过ln 的方式来建立软链接。
在这里插入图片描述
圈红的为硬链接数。

可以发现硬链接的inode和指向的文件是相同的,所以硬链接不是一个独立的文件,他是一个目录内部文件名和inode的映射关系,所以一个文字只有在硬链接数为0时,才会被真正的删除。
一般目录文件不能被建立硬链接,因为我们在查找的时候,如果目录被创建了硬链接,在实现某种查找算法是无法区分硬链接指向的目录和真正的目录、,很可能会出现死循环。所以一般是不允许创建目录的硬链接。
在这里插入图片描述

但是Linux中存在目录的硬链接,这个被OS的特殊处理,我们用户是不允许创建硬链接的。
在这里插入图片描述

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

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

相关文章

硬盘日常使用中的注意事项

硬盘是计算机中的重要存储设备,负责存储大量的数据。为了确保数据的完整性和硬盘的寿命,日常使用中需要注意以下几点: 避免震动和撞击:硬盘在工作时,内部的磁盘正在高速旋转,任何轻微的震动或撞击都可能导致磁盘损坏或数据丢失。因此,使用硬盘时应确保计算机放置稳定,避…

输电线路运行特性及简单电力系统潮流估算(二)

本篇为本科课程《电力系统稳态分析》的笔记。 本篇为这一章的第二篇笔记。上一篇传送门,下一篇传送门。 输电线路的运行特性 输电线路的空载运行特性 线路的等值电路如图所示。 由于是空载,则 S ~ 2 0 \widetilde{S}_20 S 2​0,可以计算…

4月阿里offer被毁,我该怎么进字节?

在校招求职的浪潮中,有些故事总是让人唏嘘不已。比如最近在社交平台上广泛讨论的一个话题:“4月阿里offer被毁,我该怎么进字节?”这不仅反映了当下职场的变动性,也映射了求职者在面对突如其来的变故时的无助与挣扎。 …

QT 按钮的工具提示tooltips设置字体大小颜色与背景

QT 按钮的工具提示tooltips设置字体颜色与背景 main.cpp添加 mainwindow.cpp添加全局配置: 构造函数中: QToolTip::setFont(font3); //按钮提示信息通用设置 如下: MainWindow_oq::MainWindow_oq(QWidget *parent) : QMainWindow(parent)…

光伏电站智能勘探:无人机优势及流程详解

随着科技和互联网技术的不断发展,无人机在各个领域的应用越来越广泛,其中之一就是光伏电站智能勘探。利用无人机高清摄像头和传感器等设备,可以对光伏电站周边环境、日照情况、房屋状态进行全方面的勘探和记录,搭配卫星勘探、实地…

C语言中scanf、gets、fgets的区别

scanf、gets和fgets都是C语言中用于从标准输入读取数据的函数,但它们之间存在一些重要的差异: scanf: scanf是一个格式化输入函数,它可以根据指定的格式从标准输入读取数据。使用scanf读取字符串时,需要小心处理缓冲区…

springboot注解开发如何映射对象型数据

创作灵感 最近在帮学校写一款小程序时,有这样一个数据需要展示:一条申请记录,里面包含了申请时间、申请状态、申请所提供的六条活动记录等待,其中,申请所提供的六条活动记录为一个数组,数组中的每个元素又…

【BUG】Hexo|GET _MG_0001.JPG 404 (Not Found),hexo博客搭建过程图片路径正确却找不到图片

我的问题 我查了好多资料,结果原因是图片名称开头是_则该文件会被忽略。。。我注意到网上并没有提到这个问题,遂补了一下这篇博客并且汇总了我找到的所有解决办法。 具体检查方式: hexo生成一下静态资源: hexo g会发现这张图片…

二维码门楼牌管理应用平台建设:网格化管理的新篇章

文章目录 前言一、二维码门楼牌管理应用平台的建设背景二、二维码门楼牌管理应用平台的功能特点三、二维码门楼牌管理应用平台的实际应用四、二维码门楼牌管理应用平台的前景展望 前言 随着信息技术的飞速发展,二维码门楼牌管理应用平台的建设已成为城市网格化管理…

李廉洋:4.20国际黄金,原油本周行情分析及下周一走势分析。

荷兰国际银行表示,所谓的美国国债期限溢价的回升,将为10年期国债收益率重返5%的关键水平铺平道路。从理论上来说,可将10年期美债收益率拆解为未来短端利率的期望期限溢价(term premium)。所谓期限溢价,是对投资者持有长期债券的风…

第十四届蓝桥杯省赛C/C++大学B组真题-飞机降落

思路&#xff1a;根据数据范围N<10猜测用DFS剪枝&#xff0c;因为菜狗不会状压dp。根据题目&#xff0c;一般这种飞机的题都会用到贪心的思想。思想是每架飞机都要卡极限最早降落时间&#xff0c;从而保证后面的飞机能够有充足时间降落。 代码参考博客MQy大佬有详细解答 #i…

深度学习之CNN

目录 我们为什么要用CNN&#xff0c;或者说究竟是因为什么我们要用CNN 卷积操作的实现原理 补充知识 torch.nn.Conv2d&#xff08;&#xff09; 注意 torch.nn.functional.conv2d&#xff08;&#xff09; torch.nn.functional.conv2d&#xff08;&#xff09;和torch.nn.…

前端-每天一道面试题(2)-localStorage/sessionStorage/cookie的区别

都是本地缓存数据的方式。 cookie:类型为小型文本文件&#xff0c;是某些网站为了辨别用户身份而储存在用户本地终端上的数据。是为了解决HTTP无状态导致的问题。最大为4KB,由一个名称&#xff0c;一个值&#xff0c;和其它几个用于控制cookie有效期&#xff0c;安全性&#x…

Fannel和Calico

一 1、路由器下面每一个端口都是一个vlan,隔离了广播包 192.168.1.0和192.168.2.0他们属于不同的vlan,没有三层交换机或者路由器,他们通不了信 不在同一个vlan,也就是子网,包就会走向网关(也就是路由器那里,路由器有路由表。查看目的地192.168.2.0在b口,从b口出去vlan…

模块与包及json模块学习

【一】模块与包介绍 【1】什么是模块 在Python中&#xff0c;一个py文件其实就是一个模块 文件名 knight.py中 py就是模块名 【2】模块的优点 有了模块以后可以增加程序的可读性&#xff0c;提高开发效率 【3】模块的来源 &#xff08;1&#xff09;在Python解释器内部内…

oCPC实践录 | 低转化场景下的智能出价设计

有读者私聊问笔者一个问题&#xff1a;低转化场景下怎么做智能出价。特别是对于电商、线索类行业&#xff0c;每个广告下转化量普遍非常低。 笔者也没有给出很完善的答案&#xff0c;也咨询了行业内资深的出价产品专家&#xff0c;下面尝试总结一下常见的思路&#xff0c;供大…

太多模型了!

多少个 AI 模型才算太多?这需要看你的角度。但每周 10 个可能有点过头了。在过去几天里,我们大概就看到了这么多新模型的推出,要说这些模型彼此之间有何对比,甚至一开始就能比较,都变得越来越难。那么这到底有什么意义呢? 我们正处于 AI 发展的一个奇怪时期,尽管整个过程一直…

MacOS 文件句柄数不够 Error: EMFILE: too many open files

MacOS 文件句柄数不够 Error: EMFILE: too many open files 直奔主题-解决方案 启动项目发现报错&#xff1a;Error: EMFILE: too many open files&#xff1b;经排查是因为单个微应用项目较大&#xff0c;发布过程中已经超过了mac默认的文件监听上限对文件系统进行大量并发调用…

互联网技术知识点总览——算法和数据结构

简介 本文对算法和数据结构的知识点整体框架进行梳理和分享如下&#xff1a;

Ubuntu无法安装向日癸15.2.0.63062_amd64.deb最新版

Ubuntu安装向日葵远程控制 安装包下载 安装方式 方式一&#xff1a;运行安装包安装 方式二&#xff1a;终端命令安装 通过以下教程可以快速的安装向日葵远程控制&#xff0c;本教程适用于Ubuntu18.04/20.04/22.04 安装包下载 进入向日葵远程控制下载官网下载向日葵远程控制Lin…