美文网首页
文件系统和磁盘工作原理

文件系统和磁盘工作原理

作者: wayyyy | 来源:发表于2022-02-20 02:39 被阅读0次

文件系统

  • 磁盘为系统提供了最基本的持久化存储
  • 文件系统则在磁盘的基础上,提供了一个用于管理文件的树状结构。
索引节点和目录项

Linux 文件系统为每个文件都分配两个数据结构,索引节点和目录项。它们主要用来记录文件的元信息和目录结构。

  • 索引节点
    简称为 inode,用来记录文件的元数据,比如 inode 编号、文件大小、访问权限、修改日期、数据的位置等。索引节点和文件一一对应,它跟文件内容一样,都会被持久化存储到磁盘中。

    # df -ih /
    Filesystem     Inodes IUsed IFree IUse% Mounted on
    /dev/vda1        3.2M   97K  3.1M    4% /
    
  • 目录项
    简称为 dentry,用来记录文件的名字、索引节点指针以及与其他目录项的关联关系。多个关联的目录项,就构成了文件系统的目录结构。不过,不同于索引节点,目录项是由内核维护的一个内存数据结构,所以通常也被叫做目录项缓存。

image.png
虚拟文件系统

目录项、索引节点、逻辑块以及超级块,构成了 Linux 文件系统的四大基本要素。
不过,为了支持各种不同的文件系统,Linux 内核在用户进程和文件系统的中间,又引入了一个抽象层,也就是虚拟文件系统 VFS(Virtual File System)。

image.png

这些文件系统,要先挂载到 VFS 目录树中的某个子目录(称为挂载点),然后才能访问其中的文件。


机械磁盘工作原理
  • 磁头
    读取磁盘表面磁方向和改变其方向,每个盘面有一个磁头,它极其贴近地悬浮在盘面上,但是绝对不与盘面接触,否则会损坏磁头和盘面;

  • 磁道
    磁道是单个盘面上的同心圆

  • 柱面
    在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面。

  • 扇区
    磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区(Sector)。扇区是读写磁盘最基本的单位。


    image.jpg
  • 寻道时间
    为了访问数据,第一步是:将磁头移动到目标的磁道之上。

  • 旋转延时
    一旦磁头到达了正确的磁道,就必须等待要访问的扇区转动到读写头下面,该等待时间称为旋转延时。
    平均时延通常是磁盘转档一周时间的一半。

  • 传输时间
    即传输一块数据所需要的时间。

机械磁盘的最小读写单位是扇区,一般大小为 512 字节。如果每次都读写 512 字节这么小的单位的话,效率很低。所以,文件系统会把连续的扇区或页,组成逻辑块,然后以逻辑块作为最小单元来管理数据。常见的逻辑块的大小是 4KB。

通用块层

在 Linux 中,磁盘实际上是作为一个块设备来管理的。虚拟文件系统 VFS 类似,为了减小不同块设备的差异带来的影响,Linux 通过一个统一的通用块层,来管理各种不同的块设备。

通用块层,其实是处在文件系统和磁盘驱动中间的一个块设备抽象层:

  • 第一个功能跟虚拟文件系统的功能类似。向上,为文件系统和应用程序,提供访问块设备的标准接口;向下,把各种异构的磁盘设备抽象为统一的块设备,并提供统一框架来管理这些设备的驱动程序。

  • 第二个功能,通用块层还会给文件系统和应用程序发来的 I/O 请求排队,并通过重新排序、请求合并等方式,提高磁盘读写的效率。

    对 I/O 请求排序的过程,也就是我们熟悉的 I/O 调度:

    • None
      它完全不使用任何 I/O 调度器,对文件系统和应用程序的 I/O 其实不做任何处理,常用在虚拟机中(此时磁盘 I/O 调度完全由物理机负责)。
    • NOOP
      是最简单的一种 I/O 调度算法。它实际上是一个先入先出的队列,只做一些最基本的请求合并,常用于 SSD 磁盘。
    • CFQ
      也被称为完全公平调度器,是现在很多发行版的默认 I/O 调度器,它为每个进程维护了一个 I/O 调度队列,并按照时间片来均匀分布每个进程的 I/O 请求。
    • DeadLine
      分别为读、写请求创建了不同的 I/O 队列,可以提高机械磁盘的吞吐量,并确保达到最终期限(deadline)的请求被优先处理。DeadLine 调度算法,多用在 I/O 压力比较重的场景,比如数据库等。

I/O栈

可以把 Linux 存储系统的 I/O 栈,由上到下分为三个层次,分别是文件系统层、通用块层和设备层。这三个 I/O 层的关系如下图所示:


image.png

根据这张 I/O 栈的全景图,可以更清楚地理解,存储系统 I/O 的工作原理:

  • 文件系统层,包括虚拟文件系统和其他各种文件系统的具体实现。它为上层的应用程序,提供标准的文件访问接口;对下会通过通用块层,来存储和管理磁盘数据。

  • 通用块层,包括块设备 I/O 队列和 I/O 调度器。它会对文件系统的 I/O 请求进行排队,再通过重新排序和请求合并,然后才要发送给下一级的设备层。

  • 设备层,包括存储设备和相应的驱动程序,负责最终物理设备的 I/O 操作。

存储系统的 I/O ,通常是整个系统中最慢的一环;所以, Linux 通过多种缓存机制来优化 I/O 效率。比如说:
为了优化文件访问的性能,会使用页缓存、索引节点缓存、目录项缓存等多种缓存机制,以减少对下层块设备的直接调用。
同样,为了优化块设备的访问效率,会使用缓冲区,来缓存块设备的数据。

相关文章

  • 文件系统和磁盘工作原理

    文件系统 磁盘为系统提供了最基本的持久化存储 文件系统则在磁盘的基础上,提供了一个用于管理文件的树状结构。 索引节...

  • 文件系统和磁盘工作原理

    文件系统 磁盘为系统提供了最基本的持久化存储 文件系统则在磁盘的基础上,提供了一个用于管理文件的树状结构。 索引节...

  • Linux性能优化实战——磁盘I/O调优

    前言 本文基于文件系统和磁盘I/O工作原理,通过典型I/O问题分析,总结磁盘I/O调优的一般套路。 问题描述:文件...

  • 基础篇:Linux 磁盘I/O是怎么工作的(下)

    上一节我们学习了 Linux 磁盘 I/O 的工作原理,并了解了由文件系统层、通用块层和设备层构成的 Linux ...

  • 关于 Linux 网络,你必须知道这些

    我们一起学习了文件系统和磁盘 I/O 的工作原理,以及相应的性能分析和优化方法。接下来,我们将进入下一个重要模块—...

  • linux入门之文件系统操作与磁盘管理

    基本概念 linux的文件系统,主要包括了linux磁盘分区和目录、挂载基本原理、文件存储结构、常见目录。 什么是...

  • 文件系统原理分析

    参考链接 《FAT文件系统原理》 为什么引入文件系统? 因为磁盘上面不仅要存放文件数据本身,还需要有对这些数据进行...

  • 磁盘工作原理

    1. 存储原理简述:   硬盘是在硬质盘片(一般是铝合金,以前 IBM 也尝试过使用玻璃)上涂敷薄薄的一层铁磁性材...

  • 3 Linux 磁盘与文件系统管理

    1 认识 Linux 文件系统 Linux 最传统的磁盘文件系统使用的是 ext2 1.1 磁盘组成与分区 磁盘组...

  • 2019-10-19

    Mac 上“磁盘工具”中可用的文件系统格式Mac 上的“磁盘工具”支持多种文件系统格式:Apple 文件系统 (A...

网友评论

      本文标题:文件系统和磁盘工作原理

      本文链接:https://www.haomeiwen.com/subject/unklaltx.html