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

文件系统

文件分为:

  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.mzph.cn/news/25670.shtml

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

相关文章

华为发布数字资产继承功能

在华为开发者大会2023(HDC.Together)上,华为常务董事、终端BG CEO、智能汽车解决方案BU CEO余承东正式发布了数字资产继承功能,HarmonyOS提供了安全便捷的数字资产继承路径。 在鸿蒙世界中,我们每个人在每台设备、应用…

复原 IP 地址——力扣93

文章目录 题目描述回溯题目描述 回溯 class Solution{public:static constexpr int seg_count=4<

第6集丨Vue 江湖 —— Class 与 Style 样式绑定

目录 一、class绑定1.1 字符串1.2 数组1.3 对象1.4 完整案例 二、style绑定2.1 案例2.2 效果 操作元素的 class 列表和内联样式是数据绑定的一个常见需求。因为它们都是 attribute&#xff0c;所以我们可以用 v-bind 处理它们&#xff1a;只需要通过表达式计算出字符串结果即可…

Typescript - 索引签名

目录 1&#xff0c;什么是索引签名1&#xff0c;js 中使用对象的属性2&#xff0c;ts 中的索引签名3&#xff0c;扩展索引签名定义的类型 2&#xff0c;与 Record 对比3&#xff0c;遇到的问题1&#xff0c;索引 key 的类型问题&#xff0c;keyof2&#xff0c;索引 key 的类型问…

uni-app:实现表格多选及数据获取

效果&#xff1a; 代码&#xff1a; <template><view><scroll-view scroll-x"true" style"overflow-x: scroll; white-space: nowrap;"><view class"table"><view class"table-tr"><view class&quo…

mysql高级三:sql性能优化+索引优化+慢查询日志

内容介绍 单表索引失效案例 0、思考题&#xff1a;如果把100万数据插入MYSQL &#xff0c;如何提高插入效率 &#xff08;1&#xff09;关闭自动提交&#xff0c;只手动提交一次 &#xff08;2&#xff09;删除除主键索引外其他索引 &#xff08;3&#xff09;拼写mysql可以执…

Typescript中的元组与数组的区别

Typescript中的元组与数组的区别 元组可以应用在经纬度这样明确固定长度和类型的场景下 //元组和数组类似&#xff0c;但是类型注解时会不一样//元组赋值的类型、位置、个数需要和定义的类型、位置、个数完全一致&#xff0c;不然会报错。 // 数组 某个位置的值可以是注解中的…

新能源电车交流充电桩控制主板的安全性维度

你是否想过&#xff0c;交流充电桩主板的安全性有多重要?它不仅关乎充电设备的寿命&#xff0c;还关乎电网的安全。今天我们就来探讨一下&#xff0c;如何从多个维度保证交流充电桩主板的安全性。 首先&#xff0c;交流充电桩主板采用多重安全保护技术&#xff0c;可以有效地保…

SM2算法的抗侧信道攻击

SM2 算法中底层模块抗侧信道 标量乘 ( [ k ] G [k]G [k]G) 运算过程中需要用到大量的倍点运算与点加运算。传统倍点运算与点加运算之间由于需要的运算次数不同&#xff0c;功耗存在明显区别&#xff0c;攻击者可以通过功耗波形特征分析密钥信息。传统算法如下图所示&#xff1a…

11. 使用tomcat中碰到的一些问题

文章目录 问题一&#xff1a;Tomcat的startup.bat启动后出现乱码问题二&#xff1a;一闪而退之端口占用问题三&#xff1a;非端口问题的一闪而退问题四&#xff1a;服务器的乱码和跨域问题问题五: 在tomcat\webapps\下创建文件夹为什么tomcat重启就会丢失问题六&#xff1a;Tom…

【C++】AVL(平衡二叉搜索树)树的原理及实现

文章目录 一、引言 二、AVL树的概念 三、AVL树的插入 3、1 AVL树的简单插入 3、2 旋转分类 3、2、1 新节点插入较高右子树的右侧&#xff1a;左单旋 3、2、2 新节点插入较高左子树的左侧&#xff1a;右单旋 3、2、3 新节点插入较高左子树的右侧&#xff1a;左右双旋&#xff08…

数据库执行新增时,字段写值错乱/字段值写反了 的问题

今天给表加了个字段&#xff0c;执行新增后查看表&#xff0c;发现数据库执行新增完成后&#xff0c;字段写值错乱了&#xff0c;表现为这两个字段的值写反了↓↓↓↓↓↓ 排查了xml中所有赋值的地方&#xff0c;全都没有问题 字段与属性的通用映射&#xff1a; <resultMap…

【已解决】Java 中使用 ES 高级客户端库 RestHighLevelClient 清理百万级规模历史数据

&#x1f389;工作中遇到这样一个需求场景&#xff1a;由于ES数据库中历史数据过多&#xff0c;占用太多的磁盘空间&#xff0c;需要定期地进行清理&#xff0c;在一定程度上可以释放磁盘空间&#xff0c;减轻磁盘空间压力。 &#x1f388;在经过调研之后发现&#xff0c;某服务…

编织人工智能:机器学习发展历史与关键技术全解析

文章目录 1. 引言1.1 机器学习的定义1.2 重要性和应用场景重要性应用场景 2. 机器学习的早期历史2.1 初期理论与算法感知机决策树 2.2 早期突破支持向量机神经网络初探 3. 21世纪初期的发展3.1 集成学习方法随机森林XGBoost 3.2 深度学习的崛起卷积神经网络&#xff08;CNN&…

css-4:元素水平垂直居中的方法有哪些?如果元素不定宽高呢?

1、背景 在开发中&#xff0c;经常遇到这个问题&#xff0c;即让某个元素的内容在水平和垂直方向上都居中&#xff0c;内容不仅限于文字&#xff0c;可能是图片或其他元素。 居中是一个非常基础但又是非常重要的应用场景&#xff0c;实现居中的方法存在很多&#xff0c;可以将这…

Spring IOC

◆ 传统Javaweb开发的困惑 ◆ IoC、DI和AOP思想提出 ◆ Spring框架的诞生 Spring | Home IOC控制反转&#xff1a;BeanFactory 快速入门 package com.xiaolin.service.Impl;import com.xiaolin.dao.UserDao; import com.xiaolin.service.UserService;public class UserServic…

Intel 4工艺太难了!酷睿Ultra终于突破5GHz

无论是14nm还是10nm&#xff0c;Intel这些年的新工艺都有一个通性&#xff1a;刚诞生的时候性能平平&#xff0c;高频率都上不去&#xff0c;只能用于笔记本移动端(分别对应5代酷睿、10代酷睿)&#xff0c;后期才不断成熟&#xff0c;比如到了13代酷睿就达到史无前例的6GHz。 接…

【Linux】守护进程

1 相关概念 1.1 守护进程的概念 守护进程也叫做精灵进&#xff0c;是运行在后台的一种特殊进程。它独立于控制终端并且可以周期性的执行某种任务或者处理某些发生的事件。 守护进程是非常有用的进程&#xff0c;在Linux当中大多数服务器用的就是守护进程。比如&#xff0c;web…

前端 select 标签如何创建下拉菜单?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 代码示例⭐ 代码讲解⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏…

【网络基础知识铺垫】

文章目录 1 :peach:计算机网络背景:peach:1.1 :apple:网络发展:apple: 2 :peach:协议:peach:2.1 :apple:协议分层:apple:2.2 :apple:OSI七层模型:apple:2.3 :apple:TCP/IP模型:apple:2.4 :apple:TCP/IP模型与操作系统的关系:apple: 3 :peach:网络传输基本流程:peach:4 :peach:网…