linux - 存储管理

news2025/4/13 17:38:30

1.了解硬件 -- 磁盘

硬盘有机械硬盘(HDD)和固态硬盘(SDD)

接下来,主要以机械磁盘为例(更具代表性,在linux系统层面,无论是机械磁盘还是固态硬盘,文件的读取和写入都iNode(索引节点)管理文件的元数据和实际数据块)

1.盘片(Platter) - 存储数据: 是硬盘的存储介质,通常由铝合金或玻璃材料制成,并且涂有一层薄薄的磁性材料。硬盘的每个盘片都是圆形的,并且水平堆叠在一起(多盘结构)。每个盘片的表面都有两面都能用来存储数据,顶部和底部都配有读写磁头。
2.磁道 (Track)- 数据的物理组织方式:是硬盘盘片表面的一圈圈同心圆,它们是数据存储的物理路径。每个盘片都被划分为多个磁道,这些磁道从盘片的内圈向外圈辐射排列。磁头在读取或写入数据时,会定位到特定的磁道。
3.扇区(Sector)- 数据存储的最小单位:是硬盘磁道上的最小数据存储单元。每个扇区通常包含 512 字节或 4KB 的数据。硬盘在每个磁道上将数据划分成多个扇区,所有的数据都是通过这些扇区进行管理和存储的。
4.磁头(Read/Write Head)- 读取和写入数据:是硬盘的关键部件,负责在盘片的表面读取和写入数据。硬盘通常每个盘片都有两个磁头(一个用于盘片的上面,另一个用于盘片的下面),这些磁头通过 悬臂臂(actuator arm) 安装在盘片上方或下方的轨道上。
​​​​5.主轴(Spindle)- 驱动磁盘旋转:是硬盘的旋转轴,用于支撑所有的盘片,并使它们按一定速度旋转。硬盘的盘片通过主轴连接在一起,并由主轴电机驱动旋转。硬盘的转速(通常以 RPM(每分钟转数)为单位)直接影响磁盘的性能。常见的转速有 5400 RPM、7200 RPM、10000 RPM 和 15000 RPM。转速越高,数据读取速度也越快。
6.磁头定位器 (Actuator) - 精确控制磁头的位置:是一种驱动机制,用于精确控制磁头在盘片上的位置。它通过一个电磁装置,移动磁头在盘片上方和下方的不同磁道之间。磁头定位器通常由一个 磁臂(actuator arm) 和一个 伺服电机(voice coil motor, VCM) 组成。

2.CHS寻址 

 

CHS(Cylinder-Head-Sector) 寻址方式通过柱面(磁道)、磁头和扇区的组合来定位硬盘上的数据。

CHS 寻址方式的工作原理:

  1. 柱面(Cylinder):硬盘通常有多个盘片,每个盘片都有上面和下面两个磁头。一个柱面由相同位置的多个磁头组成。例如,如果硬盘有 4 个盘片,则每个柱面上会有 4 个磁道(一个磁头对应一个磁道)。

  2. 磁头(Head):每个盘片面上有一个磁头,磁头定位器(Actuator)控制磁头的位置。当需要访问某个特定的磁道时,磁头定位器将磁头移动到目标磁道。

  3. 扇区(Sector):每个磁道上被划分为若干个扇区,通常每个扇区的大小是 512 字节。扇区是数据的最小存储单元。

CHS 寻址的具体示例:

假设我们有一个硬盘,分成以下结构:

  • 磁盘有 4 个磁盘面(即 4 个磁头)。
  • 每个磁道上有 20 个扇区。
  • 硬盘共有 200 个磁道。

CHS 寻址 下,如果我们需要访问第 5 个柱面、使用第 2 个磁头,并且访问第 10 个扇区,那么我们需要的参数就是:

  • Cylinder:第 5 个柱面(第 5 个磁道组),表示硬盘中相同位置的所有磁头(例如,磁头 1, 磁头 2, ...)。
  • Head:第 2 个磁头,指向第二个盘片。
  • Sector:第 10 个扇区。

因此,C=5, H=2, S=10 对应于硬盘中的具体数据位置。

3.LBA寻址 

CHS 寻址的局限性:

  • 寻址空间有限:由于硬盘物理结构的限制,CHS 寻址方式能够支持的最大磁道数、磁头数和扇区数是有限的。例如,某些早期硬盘的 CHS 地址空间有限制,不能超出某个值(例如最大 1024 柱面,16 个磁头和 63 个扇区),这限制了硬盘的最大容量。
  • 不适应大容量硬盘:随着硬盘容量的增加,CHS 寻址方式无法满足更大硬盘的寻址需求,因此它逐渐被 LBA(Logical Block Addressing) 取代。LBA 采用线性地址模式,不依赖于物理结构,支持更大的硬盘容量。

CHS 寻址方式的替代方式:

由于 CHS 寻址方式存在局限性,LBA(Logical Block Addressing) 寻址方式被广泛采用。LBA 使用单一的逻辑块编号来表示硬盘上的每个数据块,消除了柱面、磁头、扇区之间的物理结构映射,使得硬盘可以支持更大的存储容量。

我们可以将磁头进行编号(0.1.2.3......),将盘片想象成磁带的卷起来的样子,磁带是可以拉直,盘片我们虽然无法物理将其拉成直线,但是将其抽象成一条直线。多个盘片,可以根据磁头编号,依次将其排列。为了管理这条直线,可以用线性数组的形式将其管理,而每个数组的大小就是扇区的大小。

LBA(Logical Block Addressing,逻辑块寻址)是一种硬盘存储设备的数据寻址方式,它将硬盘的数据视为一个逻辑上的连续块,而不是依赖于物理位置(如柱面、磁道和扇区)。在LBA方式下,硬盘上的每个数据块都有一个唯一的逻辑地址(LBA),这一地址用于标识存储数据的物理位置。

主要特点:

  1. 逻辑地址:LBA采用的是一个单一的连续数字地址,这个地址从0开始,表示硬盘上的第一个数据块。
  2. 简化管理:LBA隐藏了磁盘的物理结构(柱面、磁道、扇区),操作系统和应用程序通过LBA进行存取,简化了磁盘管理和数据存取。
  3. 扇区为基本单位:LBA通常是以扇区为单位进行寻址,通常一个扇区为512字节。

工作原理:

在LBA寻址中,操作系统或应用程序通过LBA地址指定某个数据块,硬盘控制器则负责将逻辑地址转换为物理位置。硬盘内部有一个映射表,负责将LBA地址映射到具体的磁道和扇区。

优点:

  • 透明性:用户和操作系统不需要关心硬盘的物理结构,LBA将硬盘视为一个大块存储区域。
  • 简化操作:硬盘控制器负责管理物理结构的转换,简化了数据读写操作。

LBA方式常见于现代硬盘(HDD)和固态硬盘(SSD)中,是硬盘与操作系统之间最常用的数据寻址方式

照上图,如果我们想找第28888扇区在那个磁头的那个柱面

每个盘片有1w扇区:28888 / 10000 = 2     在2号磁头
每个盘片有20磁道:8888 % 20 = 8            第8磁道 
每个磁道有500扇区:8888 / 20 =  444        第444扇区

通过LBA将磁盘抽象为很长的线性数组,以特定算法将(如上)将LBA转换为我们的CHS进行我们物理寻址。

4.文件系统

了解了硬件和寻址方式,那么这么大的物理内存,我们应该怎么管理呢,四个字“分而治之”。

假设我们有1T内存,我们如何管理呢。

4.1 分区

假设硬盘分为 C盘D盘E盘,具体的分区方式根据操作系统、用途、数据存储需求等因素而有所不同。下面是一种常见的分区方式:

1. C盘(系统盘)

  • 大小:通常分配硬盘的前几十GB(例如:100GB - 200GB),以确保操作系统和基础应用有足够的空间。
  • 内容
    • 操作系统:包括操作系统本身(如Windows、Linux等),操作系统的核心文件和系统目录(如Windows中的C:\Windows)。
    • 系统文件:包括系统启动所需的引导加载程序(例如MBR/GPT分区表)和其他低级别的操作系统文件。
    • 系统应用:包括操作系统自带的应用程序,如Windows自带的计算器、资源管理器、控制面板等。
    • 注册表(Windows)或配置文件(Linux):操作系统的配置信息。
    • 用户配置文件:如操作系统用户的桌面配置、默认文档位置等。

2. D盘(数据盘)

  • 大小:可以分配硬盘的剩余空间的中间部分,假设大约500GB(可以根据需求调整)。
  • 内容
    • 用户数据:包括所有用户生成的数据,如文档、图片、视频、音乐等。
    • 应用程序数据:安装的第三方应用程序的支持文件、数据库文件、缓存文件等。比如,安装在D盘的软件可能会在该分区创建文件夹用于存储应用配置文件、用户数据、日志等。
    • 游戏文件:如果用户在该盘安装游戏,游戏的数据和文件(例如安装包、游戏存档、DLC等)将存储在该分区中。
    • 下载目录:通常会将浏览器下载的文件、临时安装包等存放在此分区。

3. E盘(备份盘或媒体文件盘)

  • 大小:剩余空间的最后一部分,假设为300GB(可以根据需求调整)。
  • 内容
    • 备份文件:包括操作系统的备份、个人文件的备份以及其他重要数据的备份文件。
    • 媒体文件:包括大容量的文件,如视频、音频文件、图片库等。用户通常会将不常用但需要存档的文件存放在此分区。
    • 镜像文件:操作系统或硬盘的镜像文件(例如系统恢复点、磁盘映像等)也可以存储在此分区。

4. 隐藏分区(或系统恢复分区)

  • 大小:通常为几十GB(如30GB - 100GB),该分区通常会被操作系统隐藏,不会直接显示在资源管理器中。
  • 内容
    • 操作系统恢复工具:存放系统恢复和重装所需的文件。Windows中通常会有一个恢复分区,其中包含Windows恢复环境(Windows RE)和一些系统修复工具。
    • 制造商工具:一些厂商会预装特定的工具和恢复映像,用于恢复出厂设置。

5. 其他可能的分区

  • Linux系统分区(如果使用Linux)

    • 在Linux中,操作系统通常会有多个分区,如:
      • /(根分区):包含所有操作系统文件。
      • /home:存储用户文件和个人数据。
      • swap:交换分区,用于虚拟内存。
      • /boot:存储启动文件。
    • 这些分区可以根据需要进行划分。
  • 磁盘加密分区

    • 如果使用加密(例如BitLocker、LUKS等),可能会有专门的加密分区或加密管理区域,用于存储加密的操作系统文件或用户数据。

总结:

在1TB的硬盘上,操作系统通常会将硬盘分为多个分区(如C盘、D盘、E盘等),每个分区根据不同的使用场景包含不同的内容:

  1. C盘:操作系统和系统应用程序。
  2. D盘:用户数据和第三方应用程序的文件。
  3. E盘:备份文件、媒体文件等。
  4. 隐藏分区:系统恢复文件和工具。

硬盘的具体分区方式可以根据用户的需求(如数据管理、操作系统使用等)进行调整。

4.2 BLock group

每个区里面又有许多BLock group,在文件系统的设计中,block group(块组)是文件系统的一种管理单位,主要用于高效组织和存储文件数据。块组(block group)是由若干个数据块(data blocks)和一些辅助数据结构(如inode表、超块等)组成的逻辑单元,用于管理文件的存储、访问和文件元数据的维护。

  1. 超级块(Superblock)

    • 存储整个文件系统的信息,比如文件系统的大小、块大小、文件系统的状态等。通常,超级块在整个文件系统中有多个副本。
  2. 块位图(Block Bitmap)

    • 用于跟踪哪些数据块已被分配,哪些是空闲的。每个块组都有一个块位图,通过它,操作系统能够快速查找可用的空闲块。
  3. inode位图(Inode Bitmap)

    • 用于管理inode(索引节点)的分配情况。inode包含文件的元数据,如文件的所有者、权限、时间戳、数据块的位置等。
  4. inode表(Inode Table)

    • 该表存储了该块组中所有文件的inode。每个文件都有一个对应的inode,其中存储着该文件的所有信息,但不包括文件的名称。文件的名称通常在目录结构中管理。
  5. 数据块(Data Blocks)

    • 实际存储文件内容的数据块。每个数据块通常是固定大小(如4KB),文件内容存储在这些数据块中。
  6. 目录表(Directory Block)

    • 用于存储目录结构。一个目录文件实际上是一个特殊类型的文件,它的内容是指向文件或子目录的链接。目录文件也存储在数据块中,包含文件名和其对应的inode编号

如何通过Block Group管理文件?

每个块组的作用是管理一部分磁盘空间,并保持与该部分相关的文件系统信息。具体来说,通过以下方式来管理文件:

  1. 分配块:当文件被创建或扩展时,操作系统会查找块组中未被使用的空闲数据块。如果一个块组中的数据块已满,文件系统会尝试在其他块组中找到空闲块。

  2. 分配inode:每当创建新文件时,操作系统会为该文件分配一个inode。在EXT4文件系统中,inode表存储在每个块组内,每个块组有自己的inode表,记录了该组内所有文件的inode信息。

  3. 优化局部性:块组的设计能够优化数据的局部性。即,相关文件(尤其是同一目录下的文件)通常会被分配到同一个块组中,这有助于减少磁盘寻址时的开销,从而提高文件系统的性能。

  4. 块组内的分配与回收:当文件删除时,相应的inode和数据块会被回收到块组的空闲区。操作系统会更新块位图和inode位图,以反映最新的磁盘空间状态。

  5. 平衡使用:通过块组管理,操作系统能够确保硬盘各个区域的空间得到均匀使用,避免某些区域过度分配,而其他区域则没有被有效利用。这也有助于提升文件系统的性能和可扩展性。

举个例子:EXT4文件系统

假设有一个1TB的硬盘,分配了一个EXT4文件系统。EXT4文件系统会将硬盘分割成多个块组,每个块组可能包含数千个数据块、inode以及其它辅助信息(如块位图、inode位图等)。

  • 如果一个文件被创建,它的inode会被分配到一个块组中的inode表,并且文件的内容会被存储在该块组中的数据块中。
  • 当一个文件扩展时,新的数据块可能会被分配到当前块组的空闲区域,也有可能被分配到另一个块组,具体取决于磁盘的空闲空间状态。
  • 当文件被删除,inode和数据块会被回收,重新标记为可用,供新文件使用。

优点和挑战:

优点:

  • 局部性优化:通过将相关文件存储在同一块组中,能够减少磁盘寻址的开销,提高读写性能。
  • 高效的空间管理:块组内的位图帮助操作系统快速判断哪些块和inode是空闲的,从而高效地分配磁盘空间。
  • 容错性:文件系统在每个块组内保留多个副本(如超级块的副本),如果某个块组出现损坏,文件系统仍可以恢复。

挑战:

  • 块组大小和分配策略:块组的大小设置对文件系统的性能有重要影响。如果块组太小,可能会增加管理开销;如果块组太大,可能会导致磁盘碎片和性能下降。
  • 块组间的负载不均衡:如果某些块组使用过度而其他块组空闲,可能会导致文件系统的性能不均衡。

总结

在现代的文件系统中,块组(Block Group)是一种重要的管理单位,尤其在EXT4等文件系统中。它通过将硬盘分成多个块组,管理文件数据的存储、访问以及元数据的组织。每个块组包含数据块、inode表、位图等信息,从而实现高效的空间管理和文件访问。通过这种设计,文件系统能够优化磁盘的使用,提高性能,并减少磁盘碎片。

注:在linux中文件属性和文件是分开存储的

如何通过文件属性找到文件?

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

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

相关文章

打造高效的HIS与DAT文件解析工具

在工业数据采集和存储中,HIS 和 DAT 文件是非常常见的二进制数据格式。然而,解析这些固定块大小的二进制文件并将其转换为易读的 CSV 格式并非易事。本文将深入讲解如何使用 Python 和 PyQt5 打造一款图形化工具,轻松解析和转换这些文件&…

设计模式-装饰器模式(结构型)与责任链模式(行为型)对比,以及链式设计

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1.装饰器模式1.1概念1.2作用1.3应用场景1.4特点1.5类与对象关系1.6实现 2责任链模式2.1概念2.2作用2.3应用场景2.4特点2.5类与对象关系2.6实现 3.对比总结 前言…

【JavaEE】网络(2)

一、网络编程套接字 1.1 基础概念 【网络编程】指网络上的主机,通过不同的进程,以编程的方式实现网络通信;当然,我们只要满足进程不同就行,所以即便是同一个主机,只要是不同进程,基于网络来传…

题海拾贝:力扣 141.环形链表

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、题…

SEC_ASA 第二天作业

拓扑 按照拓扑图配置 NTP&#xff0c;Server端为 Outside路由器&#xff0c;Client端为 ASA&#xff0c;两个设备的 NTP传输使用MD5做校验。&#xff08;安全 V4 LAB考点&#xff09; 提示&#xff1a;Outside路由器作为 Server端要配置好正确的时间和时区&#xff0c;ASA防…

IDEA 未启用lombok插件的Bug

项目中maven已引用了lombok依赖&#xff0c;之前运行没有问题的&#xff0c;但有时启动会提示&#xff1a; java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled. Your processor is: com.sun.proxy.$Proxy8 Lombok support…

markdown入门

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

知识库系统,集成neo4j,集成activiti工作流,集成es全文检索,知识图谱血缘关系,nlp知识库

一、项目介绍 一款全源码&#xff0c;可二开&#xff0c;可基于云部署、私有部署的企业级知识库云平台&#xff0c;一款让企业知识变为实打实的数字财富的系统&#xff0c;应用在需要进行文档整理、分类、归集、检索、分析的场景。 为什么建立知识库平台&#xff1f; 助力企业…

AI技术架构:从基础设施到应用

人工智能&#xff08;AI&#xff09;的发展&#xff0c;正以前所未有的速度重塑我们的世界。了解AI技术架构&#xff0c;不仅能帮助我们看懂 AI 的底层逻辑&#xff0c;还能掌握其对各行业变革的潜力与方向。 一、基础设施层&#xff1a;AI 技术的坚实地基 基础设施层是 AI 技…

钉钉机器人消息推送类型案例

CSDN 目录展示 目录 钉钉机器人消息推送1- 文本text类型推送代码案例推送结果参数说明 2- 链接Link类型推送代码案例推送结果参数说明 3- Markdown类型推送代码案例1推送结果1推送代码案例2推送结果2推送代码案例2 (版本2)推送结果2(版本2)参数说明 4- 整体跳转ActionCard类型…

6_Sass 选择器函数 --[CSS预处理]

Sass 提供了一系列的选择器函数&#xff0c;用于操作和组合CSS选择器。这些函数可以帮助你更灵活地创建样式规则&#xff0c;并且可以减少重复代码。以下是几个常用的选择器函数及其用法&#xff1a; 1. selector-append($selector1, $selector2...) selector-append($select…

Wireshark如何查看数据包时间间隔

1.如果数据包量不大&#xff0c;抓包本身也不大&#xff0c;建议从绝对时间判断&#xff0c;打开wireshark软件&#xff0c;并点开相应要分析的抓包文件。 进入到最上方菜单<视图>,在弹出菜单选择时间显示格式&#xff0c;再在右侧菜单中选择自捕获经过的秒数。 这样就可…

jvm内存优化方式

1. JVM&#xff08;Java Virtual Machine&#xff09;&#xff1a; • 定义&#xff1a;Java虚拟机&#xff0c;是运行Java字节码的抽象计算机。 • 内存管理&#xff1a;负责内存的分配和回收&#xff0c;是JVM内存优化的核心。 2. 堆&#xff08;Heap&#xff09;&#xff1a…

【AI日记】24.12.13 kaggle 比赛 2-3 大扫除、断舍离、自己做饭

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加&#xff1a;kaggle 比赛 Regression with an Insurance Dataset参考&#xff1a;kaggle 回归类入门比赛 House Prices - Advanced Regression Techniques内容&#xff1a;构建自己的EDA&#xff08…

antdv-<a-button>中属性的使用

UI组件库&#xff08;User Interface Component Library&#xff09;是一种预先构建好的、可重用的用户界面元素集合&#xff0c;旨在帮助开发者更快速、更简便地构建用户界面。这些组件通常包括按钮、表单、导航栏、模态框等&#xff0c;能够提供一致的外观和交互风格&#xf…

Nodejs架构

Node.js 是一个开源的 JavaScript 运行时环境&#xff0c;旨在运行可扩展的应用程序。 Node.js 允许开发人员使用 JavaScript 编写服务器端脚本代码。此外&#xff0c;Node.js 具有能够异步 I/O 的事件驱动架构。它基于 Google Chrome 的 V8 引擎构建&#xff0c;用于开发I/O 密…

对于《穿越火线》和《欢乐升级》游戏的理解

对于《穿越火线》的理解与感受 《穿越火线》&#xff08;CrossFire&#xff09;是一款承载了许多玩家青春记忆的经典FPS游戏。在初次接触这款游戏时&#xff0c;它给我的第一感觉是紧张刺激且极具沉浸感。无论是团队竞技的快节奏对抗&#xff0c;还是爆破模式中步步为营的策略…

Vite快速构建Vue教程

步骤 1: 初始化项目目录 创建一个名为 projects 的文件夹&#xff0c;作为存放所有 Vite 项目的根目录。这个文件夹将容纳多个独立的 Vite 项目。 步骤 2: 创建 Vite 项目 右键点击 projects 文件夹并选择“在此处打开终端”或使用您偏好的代码编辑器&#xff08;如 VSCode&…

springboot429校运会管理系统(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装校运会管理系统软件来发挥其高效地信息处理的作用&#xff…

深度学习实验十四 循环神经网络(1)——测试简单循环网络的记忆能力和梯度爆炸实验

目录 一、数据集构建 1.1数据集的构建函数 1.2加载数据集并划分 1.3 构建Dataset类 二、模型构建 2.1嵌入层 2.2SRN层 2.3模型汇总 三、模型训练 3.1 训练指定长度的数字预测模型 3.2 损失曲线展示 四、模型评价 五、修改 附完整可运行代码 实验大体步骤&#x…