【基础IO】文件系统 {磁盘的物理结构,存储结构,逻辑结构;CHS 和 LBA 寻址方式;磁盘分区和块组;文件inode;软硬链接}

news2024/10/6 14:31:38

文件系统

文件分为:

  1. 内存文件:被进程打开的文件,文件被加载到内存中供进程快速读写。
  2. 磁盘文件:没有被打开的文件,保存在磁盘上。磁盘文件被分门别类的存储和管理,用于支持更好的存取。

提示:

  1. 内存文件:就是我们之前学习的进程与文件的关系,文件描述符,虚拟文件系统,缓冲区,重定向等知识。
  2. 磁盘文件:是我们接下来要学习的内容。

一、磁盘(HDD)

在这里插入图片描述

  1. 内存RAM(Random Access Memory) —— 掉电易失存储介质
  2. 磁盘HDD(Hard Disk Drive) —— 永久性存储介质

提示:

  1. 永久性存储介质还有:固态硬盘SSD(Solid State Drive),U盘,flash卡,光盘,磁带
  2. 磁盘是一个外设,还是计算机中唯一的一个机械设备!其读写速度相对较慢,当然OS存在一些提速方式。

1.1 物理结构

在这里插入图片描述

物理结构:

  1. actuator:伺服电机(音圈马达,包括永磁铁和线圈)
  2. spindle:主轴(包括轴承与马达)
  3. read/write heads:磁头(读写头)
  4. platters(disks):磁盘盘片
  5. logic board:磁盘主板(逻辑板)
  6. connections:接口

磁盘存储数据的原理:

  1. 磁盘存储数据的原理是利用磁性材料在磁场作用下的磁化性质,通过在磁盘表面上划分成许多小区域,根据不同的磁化方向来表示0和1的二进制数据,通过读写磁头在磁盘上的移动,可以实现数据的读取和写入。
  2. 电脑硬盘拆解全过程 放大100倍 磁头坏道盘片磁道看的门清_哔哩哔哩_bilibili

注意:电脑开机状态下,不要搬运,挪动,碰撞。否则可以由于震动使磁头刮伤高速旋转的磁盘,从而导致数据丢失。


1.2 存储结构

在这里插入图片描述

在磁盘存储系统中,扇区(Sector)、磁道(Track)和柱面(Cylinder)是常用的概念。

  1. 扇区(Sector):扇区是磁盘上最小的存储单位。它是一个固定大小的数据块,通常为512字节或4KB。磁盘上的数据以扇区为单位进行读取和写入。

  2. 磁道(Track):磁道是磁盘上的一个圆形轨道,它位于磁盘的表面上。磁盘通常由多个同心圆组成,每个同心圆上都有一个磁道。磁道是磁盘上的物理结构,用于存储数据。磁道上的扇区可以被读取或写入数据。

  3. 柱面(Cylinder):柱面是由多个磁盘盘片(Platter)上的相同磁道组成的垂直堆叠。每个盘片上的相同编号磁道构成一个柱面。柱面是磁盘存储系统中的逻辑概念,用于组织和寻址数据。操作系统和磁盘控制器使用柱面号来定位和访问磁盘上的数据。

总结来说,扇区是磁盘上最小的存储单位,磁道是磁盘上的一个圆形轨道,而柱面是由多个磁盘盘片上的相同磁道组成的垂直堆叠。这些概念在磁盘存储系统中用于组织和管理数据,并提供对数据的读取和写入操作。

1.2.1 CHS寻址

CHS(Cylinder-Head-Sector)寻址方式是一种早期的磁盘寻址方式,用于定位和访问磁盘上的数据。它将磁盘的物理结构抽象为柱面、磁头和扇区的组合。

CHS寻址方式使用柱面号、磁头号和扇区号的组合来定位和访问磁盘上的数据。 通过指定柱面号、磁头号和扇区号,操作系统或磁盘控制器可以精确地定位到磁盘上的特定数据位置。

然而,随着技术的发展,CHS寻址方式逐渐被LBA(Logical Block Addressing)寻址方式取代。LBA寻址方式使用逻辑块号来定位和访问磁盘上的数据,更加简单和灵活,能够支持更大容量的磁盘。


1.3 逻辑结构

在这里插入图片描述

将磁带从磁带盒中抽出来,原本卷在一起的圆形结构就变成了线性结构!

类比磁带,我们也可以将磁盘盘片抽象为线性结构(类似于数组),扇区抽象为逻辑块(数组元素),每个逻辑块都有逻辑块号(数组下标):

在这里插入图片描述

1.3.1 LBA寻址

LBA是Logical Block Addressing(逻辑块寻址)的缩写。它是一种磁盘寻址方式,用于定位和访问磁盘上的数据。

在LBA寻址方式中,磁盘被抽象为逻辑块的序列,每个逻辑块都有一个唯一的逻辑块号(LBA)。逻辑块是磁盘上的最小可寻址单位,对应磁盘上的扇区,通常为512字节或4KB。

与CHS寻址方式不同,LBA寻址方式不需要考虑磁盘的物理结构,如柱面、磁头和扇区。通过指定逻辑块号,操作系统或磁盘控制器可以直接定位到磁盘上的特定逻辑块,而无需关心磁盘的物理布局。

LBA寻址方式的优点是简单和灵活。它可以支持更大容量的磁盘,并且不受物理结构的限制。此外,LBA寻址方式还可以提供更高的数据传输速率和更好的数据可靠性。

因此,现代计算机系统通常使用LBA寻址方式来管理磁盘上的数据,而不再使用传统的CHS寻址方式。

简单来说,我们可以将逻辑块序列当成数组,逻辑块号作为数组下标。

将数据存储到磁盘 --> 将数据存储到数组

找到磁盘的特定扇区 --> 找到数组的指定下标位置

对磁盘进行管理 --> 对该数组的管理


1.3.2 磁盘分区 & 块组

在这里插入图片描述

磁盘分区:

  1. 磁盘分区是将物理硬盘划分为多个逻辑部分,以便独立地管理和存储数据、操作系统和文件系统。
  2. Boot Block:引导块,磁盘分区中的引导块是存储引导加载程序、引导信息和分区表的特殊区域。引导加载程序和引导信息用于启动操作系统和提供必要的配置信息;分区表中记录了磁盘上的分区布局和分区的起始位置、大小等信息。boot block有多份拷贝,可在损坏时进行修复。
  3. Block group:块组,一个磁盘分区可以再划分为多个块组。

在这里插入图片描述

块组的结构介绍:

  1. block:数据块,操作系统和磁盘进行IO操作的基本单位是4KB,即1个block大小,因此磁盘又叫做块设备。block用于保存文件内容,一个文件可能包含多个block。
  2. inode:索引节点,是一个大小为128B的空间,用于保存对应文件的属性。每个inode节点都有一个唯一的inode编号。一个文件只有一个inode。
  3. Data blocks:数据块集合,多个4KB大小的block组成的集合,用于保存特定文件的内容。
  4. inode Table:索引节点表,多个文件的inode节点的集合,用于保存对应文件的属性。
  5. Block Bitmap:块位图,用于记录Data blocks的占用情况。每个比特位和特定的block是一一对应的,比特位为1表示该block被占用,为0表示可用。
  6. inode Bitmap:索引节点位图,用于记录inode Table的占用情况。每个比特位和特定的inode是一一对应的,比特位为1表示该inode被占用,为0表示可用。
  7. Group Descriptor Table (GDT):块组描述符,用于存储该块组的元数据信息。包括块组的起始位置,块组的大小,块位图的位置,索引节点位图的位置,索引节点表的位置,块组中可用空间的大小,块组中可用索引节点的数量,其他块组特定的信息等,以便操作系统能够快速定位和管理文件系统中的数据块和索引节点。
  8. Super Block:超级块,它存储了该分区文件系统的元数据信息。包括文件系统的大小、块大小、inode数量等,以及文件系统的状态和配置信息。Super Block有多份拷贝,可在损坏时进行修复。

注意:

  1. 磁盘存储数据的基本单位是扇区(512B~4KB),而一个block是4KB(8*512B)大小。为什么不以扇区大小作为IO操作的基本单位呢?

    1. 512B太小了,可能导致多次IO,进而导致读写效率降低。

    2. 磁盘的扇区大小并不总是512B,规定一个block是4KB,就是为了使软硬件解耦合。

  2. Linux文件系统在磁盘上存储文件的时候,将文件的内容和属性分开来保存。文件的内容保存到块组中的Data blocks,文件的属性保存到inode

  3. 什么是元数据?

    • 元数据是指描述数据的数据,它提供了关于数据的属性、结构、格式、位置和其他相关信息,帮助系统理解和管理数据。
    • 对于文件来说,元数据信息可能包括文件的名称、大小、创建时间、修改时间、访问权限等。
    • 对于分区文件系统来说,不单单只是保存文件信息,还有一批元数据结构专门负责管理信息,如Bitmap,用于管理Data blocks和inode Table;GDT,用于描述和管理整个块组;super block,用于描述和管理整个分区文件系统;等等。正是因为这些元数据结构的存在才能够让文件的信息可追溯,可管理。
  4. 磁盘格式化通常包括以下步骤:分区,创建文件系统(包括创建元数据结构,初始化元数据结构),完成格式化。

  5. 磁盘格式化实际上就是在写入文件系统。磁盘格式化是一个重要的步骤,它确保磁盘上的文件系统结构正确创建,并为文件和数据的存储提供了必要的基础。


二、索引节点(inode)

在这里插入图片描述

什么是索引节点(inode)?

  1. 索引节点(inode)是一个大小为128B的空间,用于保存对应文件的属性信息。
  2. 在同一分区中,每个inode节点都有只有唯一的一个inode编号。
  3. 在同一分区中,一个文件只有一个inode编号,对应一个inode。
  4. 每个分区都有自己的inode表,用于存储该分区中所有文件和目录的inode信息。在文件系统中,通过分区和inode编号的组合,可以唯一地标识和定位一个文件或目录。

一个文件可能包含多个block,如何找到属于同一个文件的block?

  1. 通过文件的inode编号,就可以找到该文件的索引节点。
  2. 索引节点inode中不仅包含了文件的属性信息,还包含了一部分属于该文件的block编号
  3. 对于小文件,通过inode就能定位所有的block。
  4. 对于大文件,部分block中还会保存其他block的编号。通过这样的多叉树结构,就可以找到文件的所有block。

inode和文件名

  1. inode属性中没有文件名。
  2. 目录也是文件,有自己的inode和data block。inode保存目录文件的属性;data block保存目录文件的内容:文件名和inode编号的映射关系。
  3. 在目录下创建(查看)文件需要目录的w(r)权限,这是因为要向目录文件的data block中写入(读取)数据。

注意:在同一目录下,不能创建同名文件。因为无法建立文件名和inode编号的一一映射关系。

通过对文件系统的学习,解释下面操作的具体步骤:

  1. 创建文件:

    1. 在对应的分区中找一块大小合适的块组;
    2. 遍历inode Bitmap找到第一个为0的比特位并将该位置1,创建文件inode。同时获得文件的inode编号。
    3. 初始化文件inode,将文件的初始属性信息填入到inode Table对应的编号位置。并清空和data blocks的映射关系(空文件)。
    4. 向当前目录中写入文件名(用户)和inode编号(文件系统)的映射关系。
  2. 删除文件:

    1. 通过文件名,在目录文件的block中找到对应文件的inode编号。
    2. 再通过inode编号,找到文件的inode。其中包含了一部分属于该文件的block编号。
    3. 在block bitmap中将文件所属的block位,置0。
    4. 在inode bitmap中将文件的inode位,置0。
    5. 删除目录文件中记录的文件名和inode编号的映射关系。

    提示:

    1. 删除文件时,不需要将数据清空,只需要将文件所占的空间标定无效即可。这就是为什么删除文件要比拷贝文件要快。
    2. 系统会记录文件的删除日志,包括删除文件的文件名及inode编号。如果对应空间没有被覆盖写入的话,是可以利用某些工具恢复已经删除的文件的(其实就是将inode/block bitmap中的对应位置1)。所以如果把重要的文件误删了,最好做法是什么都不做。
  3. 查看文件(ls -l):

    1. 通过文件名,在目录文件的block中找到对应文件的inode编号。
    2. 再通过inode编号,找到文件的inode。inode中包含文件的属性信息。
    3. 格式化输出文件名及各种属性。
  4. 修改文件:

    1. 打开文件,将文件加载到内存,并获取对应的文件描述符。
    2. 以写入为例,进程先将数据拷贝到缓冲区,再根据某种刷新策略将缓冲区中的数据刷新到文件描述符对应的磁盘文件。
    3. 在向磁盘写入的过程中,同样是先通过文件名,在目录文件的block中找到对应文件的inode编号。
    4. 再通过inode编号,找到文件的inode。最后将数据刷新到文件的data block。

为什么分区/块组有剩余空间但无法创建新文件?

因为块组中的inode和data block的大小和个数是固定的,有时会出现inode有空余但data block占满,或data block有空余但inode占满的现象。给人直观的感受就是明明该分区/块组有剩余空间,但无法创建新文件(inode占满),或文件无法进行写入(data block占满)。


三、软硬链接

在这里插入图片描述

3.1 创建文件的软硬链接

在这里插入图片描述

  1. 创建软链接的命令:ln -s filepath softlink
  2. 创建硬链接的命令:ln filepath hardlink
  3. 软硬链接的区别:软链接有独立的inode,是一个独立的文件;硬链接没有独立的inode,不是一个独立的文件。

3.2 软链接

  1. 软链接有独立的inode,是一个独立的文件。软链接的文件内容是目标文件的路径。

  2. 软链接相当于Windows系统下文件的快捷方式。

3.3 硬链接

  1. 硬链接没有独立的inode,不是一个独立的文件。他与目标文件共享同一个inode,其内容,属性与目标文件完全相同。

  2. 创建文件的硬链接,本质上就是在指定目录下建立了文件名和目标文件inode的映射关系,并没有创建新文件。简单来说,就是给目标文件起别名。

  3. 文件属性中的硬链接数表示与文件inode关联的文件名的数量。每创建一个硬链接,硬链接数就+1。

  4. 当我们删除文件时,如果文件的硬链接数大于1,就将硬链接数-1。如果文件的硬链接数等于1,才真正删除这个文件。

硬链接的作用:为目录文件取别名。

  1. ...其实就是目录文件的硬链接。. 表示当前目录,..表示上级目录

  2. 新创建的普通文件只有1个文件名与其inode关联,因此硬链接数为1。

  3. 新创建的目录文件硬链接数为2。与其inode关联的文件名有:目录名,目录中的当前目录.

  4. 在目录中每创建一个子目录都会使硬链接数+1,这是因为在每一个子目录中都有一个上级目录..

小技巧:不打开目录,只通过目录的硬链接数就能知道目录中有多少个子目录。用硬链接数-2即可。

unlink:用于删除普通文件的系统调用,实际是解除文件名和inode的链接关系

在这里插入图片描述

提示:unlink同时也是一个系统命令,可以用来删除一个普通文件。

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

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

相关文章

Amazon CodeWhisperer亚马逊云代码生成器idea体验使用

阿丹: 自从接触到微服务以来发现要写的代码越来越多了,之前一直面向ChatGPT来编程,今天找到了一个新的ai代码生成器。体验一下。安装的过程给兄弟们演示一下。 关键还是免费的。 连接如下:AI 代码生成器 - Amazon CodeWhisperer - AWS 查看…

记录第一篇被”华为开发者联盟鸿蒙专区 “收录的文章

记录第一篇被”华为开发者联盟鸿蒙专区 “社区收录的文章。 坚持写作的动力是什么? 是记录、分享,以及更好的思考 。

地理信息系统空间分析实验教程 第三版 第八章示例与练习 寻找最佳路径

寻找最佳路径 背景 随着社会经济的发展,公路的重要性日益提高。在一些交通欠发达的地区,公路 设迫在眉睫。如何根据实际地形情况设计出比较合理的公路,是一个值得研究的问题 目的 通过练习,熟悉 ArcGIS 栅格数据距离制图、表…

Docker搭建zookeeper

问题背景 前言 本文参考自:docker-compose快速搭建Zookeeper集群还有一种更加详细更加全面的部署方式:Docker之docker-compose一键部署Zookeeper集群,但笔者还未验证,先记录下来 搭建 安装docker-ce 此处不赘述 安装docker-co…

skywalking日志收集

文章目录 一、介绍二、添加依赖三、修改日志配置1. 添加链路表示traceId2. 添加链路上下文3. 异步日志 四、收集链路日志 一、介绍 在上一篇文章skywalking全链路追踪中我们介绍了在微服务项目中使用skywalking进行服务调用链路的追踪。 本文在全链路追踪的基础上&#xff0c…

小研究 - 基于 MySQL 数据库的数据安全应用设计(一)

信息系统工程领域对数据安全的要求比较高,MySQL 数据库管理系统普遍应用于各种信息系统应用软件的开发之中,而角色与权限设计不仅关乎数据库中数据保密性的性能高低,也关系到用户使用数据库的最低要求。在对数据库的安全性进行设计时&#xf…

vscode连接远程Linux服务器

文章目录 一、环境安装1.1 下载vscode1.2 下载vscode-sever 二、ssh链接2.1 安装Remote-SSH2.2 设置vscode ssh2.3 设置免密登录2.3.1 本地生成公私钥2.3.2 服务器端添加公钥 三、安装插件3.1 vscode安装插件3.1.1 在线安装插件3.1.2.1 下载插件3.1.2.2 安装插件 3.2 vscode-se…

SQL注入实操三(SQLilabs Less41-65)

文章目录 一、sqli-labs靶场1.轮子模式总结2.Less-41 stacked Query Intiger type blinda.注入点判断b.轮子测试c.获取数据库名称d.堆叠注入e.堆叠注入外带注入获取表名f.堆叠注入外带注入获取列名g.堆叠注入外带注入获取表内数据 3.Less-42 Stacked Query error baseda.注入点…

小学语文思维导图:如何写一篇好的作文

大家都知道,思维导图是一款非常高效的工具。我们利用思维导图不仅可以做读书笔记、还可以运用到很多具体细分的场景。今天我们就“如何利用思维导图写好一篇作文”和大家进行分享。 思维导图在写作文的过程中,可以帮助我们整理思路。提高效率。将混乱的内…

排序八卦炉之总复习

文章目录 1.总代码1.1Stack.h1.2Stack.c1.3Sort.h1.4Sort.c1.5Test.c 2.总结 1.总代码 点击 排序&#xff08;C&#xff09; 跳转码云获取完整代码 1.1Stack.h #pragma once #include <stdio.h> #include <assert.h> #include <stdlib.h> #include <st…

web前端html

文章目录 快捷方式一、html5的声明二、html5基本骨架 2.1 html标签 2.2 head标签 2.3 body和head同级 2.4 body标签 2.5 title标签 2.6 meta标签 三、标题标签介绍与应用 3.1 标题的介绍 3.2 标题标签位置摆放 3.3 标签之段落、换行、水平线 3.3 标签之图片 3.3.1 图…

【快应用】list组件如何区分滑动的方向?

【关键词】 list组件、滑动方向、scroll 【问题背景】 有cp反馈list这个组件在使用的时候&#xff0c;不知道如何区分它是上滑还是下滑。 【问题分析】 list组件除了通用事件之外&#xff0c;还提供了scroll、scrollbottom、scrolltop、scrollend、scrolltouchup事件&#x…

Spark官方调优三部曲之三:其它优化思路

前言 前面介绍了关于spark性能调优两个最重要的点: 数据序列化内存调优这两个方向都进行调优后,如果想进一步继续优化你的程序,可以参考下面的思路。 设置合理的并行度 除非将每个操作的并行级别设置得足够高,否则集群资源不会得到充分利用。Spark根据每个文件的大小自动…

【5G NR】逻辑信道、传输信道和物理信道的映射关系

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

微信开发之朋友圈自动点赞的技术实现

简要描述&#xff1a; 朋友圈点赞 请求URL&#xff1a; http://域名地址/snsPraise 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wId…

WSL安装

WSL安装 1.Microsoft store 安装 1.1 启动WSL功能 在【程序和功能 -> 启用或关闭 Windows 功能】中勾选【适用于 Linux 的 Windows 子系统】 1.2 Store中下载安装 在 Microsoft Store 中下载并安装需要的 Linux 发行版 2.不使用Store安装WSL 注&#xff1a;1.1也要…

Nios初体验之——Hello world!

文章目录 前言一、系统设计1、系统模块框图2、系统涉及到的模块1、时钟2、nios2_qsys3、片内存储&#xff08;onchip_rom、onchip_ram&#xff09;4、串行通信&#xff08;jtag_uart&#xff09;5、System ID&#xff08;sysid_qsys&#xff09; 二、硬件设计1、创建Qsys2、重命…

vue中vue-lazyload报错

1.问题&#xff1a; 说明&#xff1a;也就是版本不兼容&#xff0c;我安装的是vue2,因此需要 "vue-lazyload": "^1.2.6"或者更低 2.解决 npm i vue-lazyload1.2.6

第二季“数字强市建设体验团”活动感悟-张继群

目录 第二季“数字强市建设体验团”活动感悟-张继群 第二季“数字强市建设体验团”活动感悟-张继群 此次参观中山东安信木业、费县智慧城市运营中心、澳柯玛以及沂南双创科技园区给我留下深刻印象&#xff0c;我深深地感受到了现代科技与生活的紧密联系。我们临沂市智慧大数据…

js-3:DOM常见的操作有哪些?

1、DOM 文档对象模型&#xff08;DOM&#xff09;是HTML和XML文档的编程接口。 它提供了对文档的结构化的表述&#xff0c;并定义了一种方式&#xff0c;可以使从程序中对该结构进行访问&#xff0c;从而改变文档的结构&#xff0c;样式跟内容。 任何HTML和XML文档都可以用DOM表…