[架构之路-232]:目标系统 - 纵向分层 - 操作系统 - 数据存储:文件系统存储方法汇总

目录

前言:

一、文件系统存储方法基本原理和常见应用案例:

二、Windows FAT文件系统

2.1 概述

三、Linux EXT文件系统

3.1 基本原理

3.2 索引节点表(Inode Table)

3.2.1 索引节点表层次结构

3.2.2 间接索引表的大小和表项个数

四、NFS文件系统


前言:

为了在以块为基本单位的硬盘上,管理和存储数据长度不定长的文件,且能够实现不连续存储(在硬盘上连续存储数据的要求抬高了,硬盘上很难保证有连续大块的存储空间),操作系统想了很多的办法,采用了很多算法和数据结构来达成此目的。

一、文件系统存储方法基本原理和常见应用案例:

操作系统的文件系统:解决的是数据数据在内存和硬盘中进行映射的方法。

下面将详细介绍每种存储方法的基本原理和常见应用案例:

  1. 随机存取存储(Random Access Storage):

    • 基本原理:随机存取存储方法将文件数据划分为块或扇区,并使用磁盘寻址技术实现对这些块的随机访问。每个块都有一个唯一的地址,可以通过地址直接访问块内的数据。
    • 应用案例:Windows操作系统中常用的NTFS文件系统采用了随机存取存储方法。NTFS通过索引节点表(MFT)来管理文件,使用簇(Cluster)作为数据存储的基本单位,支持高效的随机读写和快速定位。
  2. 连续存储(Contiguous Storage)://不常见,早期文件系统

    • 基本原理:连续存储方法将文件的数据连续地存储在磁盘上。文件在存储时被分配一段连续的物理空间,数据块按照顺序存储,形成一个连续的数据区域
    • 应用案例:早期的FAT文件系统和一些嵌入式设备常使用连续存储方法。这种方法对于传输速度要求较高的应用场景非常适用,例如音频和视频的播放器,因为可以连续读取文件数据以提供流畅的播放体验
  3. 链接表存储(Linked List Storage):

    • 基本原理:链接表存储方法使用链表结构来记录文件数据的存储位置。每个链表节点包含一部分文件数据和指向下一个节点的指针,通过遍历链表可以读取整个文件的数据。
    • 应用案例:许多UNIX和类UNIX系统使用的文件系统,如EXT系列(如EXT2、EXT3、EXT4)和XFS,采用了链接表存储方法。这种方法可以高效地管理不连续的文件存储,适用于支持大文件和灵活的文件分配的场景
  4. 文件分配表存储(File Allocation Table Storage):

    • 基本原理:文件分配表存储方法通过维护一个文件分配表(FAT)来记录磁盘上每个块的使用情况和链表关系。FAT表中的每个表项对应一个块,记录了该块的使用状态和下一个块的地址。
    • 应用案例:早期的FAT文件系统(如FAT16、FAT32)以及一些嵌入式设备中使用了文件分配表存储方法。这种方法简单且易于实现,适用于存储容量较小、对性能要求不高的应用场景。
  5. 索引节点存储(Indexed Node Storage):

    • 基本原理:索引节点存储方法使用索引节点(inode)来记录文件和目录的元数据,包括文件属性和数据的物理存储位置。通过索引节点,文件系统可以快速定位和访问文件的数据。
    • 应用案例:常见的UNIX和类UNIX系统(如Linux、Mac OS)所使用的文件系统,如EXT2/EXT3/EXT4、HFS+,采用了索引节点存储方法。索引节点结构允许快速访问和管理文件,适用于大型文件系统和复杂的数据结构
  6. 日志结构存储(Log-structured Storage):

    • 基本原理:日志结构存储方法通过将文件的修改操作以日志的形式记录下来,并按时间顺序追加到日志区域中。重放日志可以恢复文件系统的状态,实现高度的数据一致性和恢复能力。
    • 应用案例:ZFS(Zettabyte File System)是一种常见的日志结构存储的文件系统,在大规模存储和高可靠性要求的场景下被广泛使用。ZFS使用了写时复制(Copy-on-Write)技术和数据校验来保证数据的完整性和可靠性。

这些文件系统存储方法的应用案例说明了不同存储方法的特点和适用场景。根据需求和应用场景的不同,选择合适的存储方法对于文件系统的性能、可靠性和效率非常重要。

二、Windows FAT文件系统

2.1 概述

FAT(File Allocation Table)文件系统是一种使用在许多操作系统中的文件系统,如Windows中的FAT16、FAT32以及有些可移动存储设备和嵌入式系统中的FAT12。

以下是FAT文件系统的原理和数据结构的简要说明:

  1. 分区和引导扇区:FAT文件系统以分区的形式存在于存储设备上,每个分区的开头有一个引导扇区(Boot Sector),包含分区的基本信息和引导代码

  2. 文件分配表(FAT):FAT文件系统的核心是文件分配表(File Allocation Table),它是一个表格,用于记录文件在存储设备上的分配情况。每个表项记录着磁盘上的一个簇(Cluster)的状态,标识它的使用情况。

  3. 簇:FAT文件系统将存储设备分为一个个固定大小的簇(Cluster),每个簇由连续的扇区组成。FAT通过簇号来标识文件的存储位置,而不是直接使用物理磁盘块号

  4. 目录项:FAT文件系统使用目录项(Directory Entry)来存储文件和目录的元数据,包括文件名、扩展名、属性、起始簇号等等。目录项以目录的形式组织,每个目录的起始位置都有一个特殊的目录项(根目录项)作为入口。

  5. 文件分配:文件在FAT文件系统中分配的方式是通过在FAT表中标记簇的使用情况。文件的第一个簇号存储在目录项中,然后通过在FAT表中依次查找下一个簇号来确定文件的完整存储位置。

  6. 空闲空间管理:FAT文件系统通过在FAT表中标记空闲簇来管理可用空间。标记为“未使用”的表项表示该簇是可用的,标记为“已使用”的表项表示该簇已被分配给文件或目录。

这些是FAT文件系统的基本原理和数据结构。通过使用FAT表来跟踪和管理文件的存储位置,FAT文件系统能够支持文件的读取、写入和删除。不同版本的FAT文件系统(如FAT12、FAT16和FAT32)在文件分配表的结构和大小、簇大小等方面略有差异,但基本原理是相似的。

三、Linux EXT文件系统

3.1 基本原理

Linux EXT(Extended File System)文件系统的基本原理和数据结构是构建在磁盘块、索引节点(inode)和数据块上的。下面是关于EXT文件系统的基本原理和数据结构的简要说明:

  1. 基本原理:EXT文件系统是一个层次化的文件系统,通过块设备(如硬盘)来存储文件和目录。它将磁盘分为若干个块组(Block Group),每个块组包含了文件系统的关键组件:超级块组描述符表索引节点表数据块。其中最重要的是索引节点表。

  2. 超级块(Superblock):每个EXT文件系统都有一个超级块,存储文件系统的整体信息,如块设备的大小、块组数量、inode数量等等。它提供了文件系统的整体结构和配置信息。

  3. 组描述符表(Group Descriptor Table):组描述符表存储了每个块组的元数据信息,如空闲块数量、inode数量、位图地址等。它提供了块组级别的信息,帮助系统定位和管理块组。

  4. 索引节点表(Inode Table):EXT文件系统使用索引节点(inode)来记录文件的元数据信息,如文件大小、权限和时间戳等。每个文件和目录都有一个唯一的inode编号,通过inode可以快速地找到文件的元数据信息。

  5. 数据块(Data Block):数据块是用于存储文件的实际内容的区域。EXT文件系统使用不同大小的数据块,如4KB、8KB等,具体的块大小取决于文件系统的配置。文件的数据块通过inode中的指针链表来引用。

  6. 索引节点之间的关系:索引节点之间的关系是通过指针链表来建立的。一个索引节点中包含一组指针,指向数据块或其他索引节点。具体的指针链表结构有三级间接指针、二级间接指针和一级间接指针

EXT文件系统的数据结构使得系统可以高效地管理文件和目录,快速定位和读取文件的元数据和内容。同时,EXT文件系统还实现了一些高级特性,如日志功能(journaling)以提高文件系统的可靠性和恢复能力,以及扩展属性(extended attributes)等。

需要注意的是,EXT文件系统是在Linux平台上使用的,而其他操作系统可能使用不同的文件系统。因此,在跨平台使用时应注意文件系统的兼容性和可能存在的差异。

3.2 索引节点表(Inode Table)

3.2.1 索引节点表层次结构

索引节点表(Inode Table)是文件系统中的一个重要的数据结构,用于存储文件和目录的元数据信息。索引节点表的内容和层次结构如下:

  1. 索引节点(Inode):索引节点表中的每个条目对应一个文件或目录的数据,称为索引节点。每个索引节点包含了文件或目录的元数据信息和指向数据块的指针。

  2. 文件或目录的属性:每个索引节点记录了与文件或目录相关的属性,如文件大小、所有者和所属组、访问权限、时间戳(创建、修改、访问时间)等。

  3. 文件类型和权限:索引节点中存储的文件类型信息可以标识文件是普通文件、目录、符号链接等。同时,索引节点还记录了与文件或目录相关的权限信息,如读、写和执行权限。

  4. 数据块的指针/索引:索引节点中包含了指向文件数据块指针,用于快速定位和读取文件的实际内容指针的数量和类型取决于文件的大小

    a. 直接指针/索引:索引节点中通常包含一些(如N个)直接指向文件数据块的指针。例如,对于小文件,索引节点可能直接指向文件的数据块。N个直接索引指向的数据块的大小为N * BlockSize,如BlockSize=4K字节。

    b. 一级间接指针:对于较大的文件,索引节点可能包含一个一级间接指针,指向一个数据块,该数据块存储了更多的指针或索引,被称为一级间接索引块索引块的大小是操作系统指定的,通常与数据块的大小相同,如4K。一个间接所有指向的数据块的个数为4K/4Bye=1K个数据块,则指向的数据块的大小= 4K/4 *  4K = 1K * 4K = 4M, 即一个间接块使得数据块的大小扩展了1K倍数 =》4M字节。

    c. 二级间接指针:对于更大的文件,索引节点可能包含一个二级间接指针,指向一个二级索引块,该数据块存储了更多的一级间接指针,被称为二级间接索引块索引块的大小是操作系统指定的,通常与数据块的大小相同,如4K或1K。 一个二级块在一级块的基础之上又扩展了1K倍数,   每个二级间接指针代表的数据块的大小为:1K * 1K * 4K = 4G字节。

    d. 三级间接指针:对于非常大的文件,索引节点可能包含一个三级间接指针,指向一个数据块,该数据块存储了更多的二级间接指针索引块,被称为三级间接索引块索引块的大小是操作系统指定的,通常与数据块的大小相同,如4K。 一个三级块在二级块的基础之上又扩展了1K倍数,   每个二级间接指针代表的数据块的大小为:1K * 1K * 1K * 4K = 4T字节。

        通过索引节点表,文件系统可以按照层次结构组织和管理文件和目录的元数据信息。每个文件或目录对应一个索引节点,而索引节点中的指针链表(直接指针、间接指针和双重间接指针)指示了文件数据块的层次化结构。这种层次结构的设计提供了灵活性和效率,同时减少了索引节点表的大小和数据的存储开销,提高了文件系统的性能。

3.2.2 间接索引表的大小和表项个数

对于文件系统中的一级间接索引表(Single Indirect Index Table),它是一种用于扩展文件系统容量的指针结构。一级间接索引表存储了一级间接索引的指针,这些指针指向一级间接块。

一级间接索引表的内容可以描述为:

  1. 一级间接索引表条目:每个条目是一个指针,对应一个一级间接块。

  2. 一级间接块:一级间接索引表中的每个指针所指向的一级间接块是一个数据块,其中存储了多个指针。这些指针指向其他数据块,通常称为数据块指针。

  3. 数据块指针:一级间接块中的指针记录了文件分散存储在文件系统中的数据块的地址。通过这些指针,文件系统可以根据需要在存储介质上找到文件的相应数据块。

通过一级间接索引表的引入,文件系统可以处理比直接索引更大的文件,因为一级间接索引表存储了更多的指针,指向许多数据块。这进一步扩展了文件系统的存储容量和索引能力。

需要注意的是,一级间接索引表只是一种指针结构,其真正的内容是一级间接块。一级间接块中存储了数据块指针,这些指针才是实际用于查找和访问文件数据的关键。

总结而言,一级间接索引表在文件系统中用于扩展容量,存储了多个一级间接索引的指针。这些指针指向一级间接块,其中存储了数据块指针,提供了对大型文件的索引和访问能力。

一级间接块中的索引个数通常是由文件系统的设计和设置决定的。它取决于文件系统的块大小以及索引块中每个索引项所占用的空间大小。

在一个典型的文件系统中,一个数据块的大小是固定的,比如4KB或8KB。同时,每个索引项的大小也是确定的,通常是4字节或8字节,具体取决于文件系统的实现。以4KB索引块大小为例,每个索引项的大小为4直接,则索引项的个数为:4KB/4B = 1024 = 1K 个索引项。 

因此,计算一级间接块中索引的个数可以按照以下步骤进行:

  1. 确定每个索引项的大小:根据文件系统的实现,确定每个索引项所占用的空间大小。

  2. 确定一级间接块的大小:根据文件系统的块大小,确定一级间接块的大小。

  3. 计算索引的个数:一级间接块的大小除以每个索引项的大小,得到一级间接块中索引的个数。

需要注意的是,由于文件系统需要保留一些元数据信息,一级间接块中实际可用的索引项数量可能会略少于计算得到的索引个数。

文件系统设计人员在确定文件系统的块大小和索引项大小时,需要综合考虑文件系统的性能、存储效率和对大文件的支持能力等因素。大块和较大的索引项可以增加文件系统的容量和性能,但会带来存储空间的浪费;小块和较小的索引项可以提高存储空间利用率,但可能限制了文件系统的最大容量和大文件的支持能力。因此,文件系统设计者需要在权衡这些因素的基础上选择适当的块大小和索引项大小。

四、NFS文件系统

NFS(Network File System)文件系统的原理和数据结构主要涉及以下几个方面:

  1. 服务器和客户端交互:NFS采用客户端-服务器模型,其中NFS服务器存储文件和目录,并提供对这些文件和目录的远程访问。 客户端通过网络连接到NFS服务器,并通过特定的协议进行交互,如RPC(Remote Procedure Call)协议。

  2. 文件句柄(File Handle):在NFS中,文件和目录通过唯一的文件句柄进行标识。文件句柄是一个由服务器生成的固定大小的唯一标识符,用于识别特定的文件或目录。当客户端发送访问请求时,它将使用文件句柄来标识所需的文件或目录。

  3. NFS协议:NFS采用基于请求和响应的协议进行通信。客户端向服务器发送请求消息,包括操作类型(如读取、写入、创建、删除等),以及相关的参数,如文件句柄和偏移量等。服务器接收请求,并执行相应的操作,然后将结果封装为响应消息发送回客户端。

  4. 数据缓存:为了提高性能,NFS客户端采用了数据缓存机制。当客户端首次读取文件时,它会从服务器获取文件的内容,并将这些数据缓存在本地。这样,当下次需要访问相同的文件时,客户端可以直接从本地缓存中读取数据,而无需再次请求服务器。

  5. 权限和访问控制:NFS使用Unix/Linux样式的访问权限和安全机制来保护共享的文件和目录。服务器可以设置访问权限,例如所有权和权限位,以控制对文件的读写访问。客户端必须具有适当的权限才能执行访问操作。

  6. 锁定机制:NFS支持锁定(locking)机制,用于协调对同一文件的并发访问。为了避免并发冲突,客户端可以在读取或写入文件时,请求文件的锁定。服务器将根据锁定请求来协调访问,并确保文件的一致性和完整性。

  7. 挂载和导出:在NFS中,服务器上的文件和目录需要被导出(export),以便客户端可以挂载(mount)并访问它们。服务器上的导出定义了可以被哪些客户端挂载的共享资源以及响应的访问权限。

NFS的数据结构和实现涉及到文件句柄的生成和管理,客户端的缓存机制,服务器端的导出配置和请求处理等。这些机制和数据结构的设计旨在提供高效、可靠的文件共享体验,并确保共享操作的一致性和安全性。

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

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

相关文章

Java卷上天,可以转行干什么?

小刚是某名企里的一位有5年经验的高级Java开发工程师,每天沉重的的工作让他疲惫不堪,让他萌生出想换工作的心理,但是转行其他工作他又不清楚该找什么样的工作 因为JAVA 这几年的更新实在是太太太……快了,JAVA 8 都还没用多久&am…

鄙视测试,理解测试,成为测试

首先,其实题主的问题还是很实诚的,我刚开始做测试的时候其实也是这个心态,想转开发,也学习了很多的语言,个人觉得这是职业危机感的表现,挺好的,也相信题主不管去做开发和测试都会去不断的学习和…

SAP从入门到放弃系列之QM目录类别、代码组、选择集维护

目录 一、概念相关内容1.1 目录类别1.2 代码组和代码1.3 选择集和选择集代码 二、系统操作相关内容 一、概念相关内容 1.1 目录类别 目录类别是对定性数据的一种归纳,描述了业务的主题。根据PA的教材中表述,目录类型 0 - 9 和 A - O 由 SAP 定义&#…

深入浅出的介绍一下虚拟机VMware Workstation——part1

目录 VMware Workstation说明VMware Workstation的主要特点VMware Workstation安装VMware Workstation卸载 VMware Workstation说明 1、 虚拟机的软件在市面上有很多,目前功能强大且比较主流的虚拟机软件首选VMware 2、VMware是一个虚拟PC的软件,可以在…

什么是全员生产维护TPM?

在当今竞争激烈的市场环境中,企业不仅需要提高生产效率,同时也需要降低成本以保持竞争力。全员生产维护(Total Productive Maintenance,TPM)作为一种先进的生产管理方法,为企业提供了一种有效的方式来实现这…

【小沐学Python】Python实现Web图表功能(Dash)

文章目录 1、简介2、安装3、功能示例3.1 Hello World3.2 连接到数据3.3 可视化数据3.4 控件和回调3.5 设置应用的样式3.5.1 HTML and CSS3.5.2 Dash Design Kit (DDK)3.5.3 Dash Bootstrap Components3.5.4 Dash Mantine Components 4、更多示例4.1 Basic Dashboard4.2 Using C…

光伏发电预测(LSTM、CNN_LSTM和XGBoost回归模型,Python代码)

运行效果:光伏发电预测(LSTM、CNN_LSTM和XGBoost回归模型,Python代码)_哔哩哔哩_bilibili 运行环境库的版本 光伏太阳能电池通过互连形成光伏模块,以捕捉太阳光并将太阳能转化为电能。因此,当光伏模块暴露…

OpenCV4(C++) —— 图像数据类型转换和颜色模型转换

文章目录 一、图像数据类型转换二、颜色模型转换三、通道的分离和融合 一、图像数据类型转换 OpenCV中使用imread读取一张彩色图像时,默认采用的是BGR通道和整数类型(0-255,CV_8U)。 在某些情况下,会将整数类型(0-255)转换为浮点类型(0-1)&a…

VUE3技术报告

文章目录 node和webstorm基本概念1. Node.js2. npm3.Webpack4. Vue webstorm创建vue项目1. 通过npx create-vue创建vue项目2. 通过npx --package vue/cli vue创建vue项目 VUE3起步-创建应用-挂载应用1. createApp 创建函数&mount挂载应用2. 创建应用中的data选项3. methods…

docker搭建Jenkins及基本使用

1. 搭建 查询镜像 docker search jenkins下载镜像 docker pull jenkins/jenkins启动容器 #创建文件夹 mkdir -p /home/jenkins_home #权限 chmod 777 /home/jenkins_home #启动Jenkins docker run -d -uroot -p 9095:8080 -p 50000:50000 --name jenkins -v /home/jenkins_home…

微信如何防止被限制?一文了解原因和处理方法

微信引流频繁被限制加好友,是许多人在营销过程中遇到的一大难题。为了解决这一问题,我们需要先了解微信官方对好友添加的限制和政策。只有明确了这些规定,才能更有效地进行微信引流,提高营销效果。 为什么被限制? 为了…

网络层·IP协议

承接前文TCP协议-CSDN博客 简介 协议头格式 网段划分(重要) 划分方法 IP地址的数量限制(背景介绍) 私有IP地址和公网IP地址(提出解决思路) NAT技术(解决方法) 路由 网络层 在复杂的网络环境中确定一个合适的路径 IP协议 主机: 配有IP地址, 可以认为就是你的电脑; 路由器:…