【问题标题】:Historical perspective to Linux FilesystemsLinux 文件系统的历史视角
【发布时间】:2009-05-23 22:19:16
【问题描述】:

Jonathan Leffler 在问题"How can I find the Size of some specified files?" 中的评论发人深省。我会把它分成几部分进行分析。

  1. -- 文件存储在页面上;

  2. 你通常会得到更多的空间 使用比该计算给出的 因为一个 1 字节的文件(通常)占用 一页(可能是 512 字节)。

  3. 该 确切的值会有所不同 - 它更容易 第 7 版 Unix 文件的日子 系统(即使在那时也不是微不足道的

4-5。如果你想考虑 所引用的间接块 inode 以及原始数据块)。

关于零件的问题

  1. “页面”的定义是什么?
  2. 为什么在事后思考的“一页(可能 512 字节)”中出现“可能”这个词?
  3. 为什么在“第 7 版 Unix 文件系统”中测量精确大小更容易?
  4. “间接阻塞”的定义是什么?
  5. 如何通过“inode”和“原始数据块”这两件事获得引用?

出现的历史问题

我。莱弗勒所说的历史背景是什么?

二。有 定义随着时间而改变?

【问题讨论】:

    标签: linux filesystems history


    【解决方案1】:
    1. 我认为他的意思是块而不是页,块是文件系统上的最小可寻址单元。

    2. 块大小可以变化

    3. 不知道为什么,但可能是文件系统接口暴露了 api 允许更精确的测量。

    4. 间接块是指针引用的块

    5. inode 占用空间(块),就像原始数据一样。这就是作者的意思。

    【讨论】:

      【解决方案2】:

      与 Wikipedia 页面的往常一样,Block (data storage) 提供了丰富的信息,尽管它非常热衷于链接所有关键字。

      computing(特别是数据传输和data storage)中,块是bytesbits 的序列,具有标称长度(块大小)。据说这样结构化的数据被阻止了。将数据放入块的过程称为阻塞。阻塞用于促进接收数据的计算机程序对数据流的处理。阻塞的数据通常一次读取整个块。在将数据存储到 9 磁道 magnetic tape、旋转介质(例如 floppy diskshard disksoptical discs 和 NAND flash memory)时,几乎普遍采用阻塞。

      大多数file systems 都基于block device,这是abstraction 的级别,hardware 负责存储和检索指定的数据块,尽管文件系统中的块大小可能是物理块大小。在经典文件系统中,单个块可能只包含单个file 的一部分。由于internal fragmentation,这会导致空间效率低下,因为文件长度通常不是块大小的倍数,因此最后一个文件块将保持部分空。这将创建slack space,平均每个文件半个块。一些较新的文件系统试图通过称为block suballocationtail merging 的技术来解决这个问题。

      对经典的Unix File System也有一个合理的概述。

      传统上,硬盘几何结构(磁盘本身的块布局)一直是CHS

      • 磁头:每个(一侧)盘片上的磁性读写器;可以进出以访问不同的气缸
      • 圆柱体:当盘片旋转时从头部下方穿过的轨道
      • 扇区:在圆柱体的一部分上连续存储的恒定大小的数据量;驱动器可以处理的最小数据单位

      CHS 现在用的不多,因为

      • 硬盘不再使用每个柱面的固定扇区数。通过使用每个扇区的恒定弧长而不是恒定旋转角度将更多数据压缩到盘片上,因此外圆柱上的扇区比内圆柱上的扇区多。
      • 根据 ATA 规范,驱动器的每个磁头不得超过 216 个柱面、24 个磁头和 28 个扇区每缸;对于 512B 扇区,这是 128GB 的​​限制。通过 BIOS INT13,无论如何都无法通过 CHS 访问超过 7.88GB 的​​任何内容。
      • 为了向后兼容,较大的驱动器仍声称具有 CHS 几何结构(否则 DOS 将无法启动),但获取任何较高的数据都需要使用 LBA 寻址。
      • CHS 甚至在 RAID 或非旋转介质上都没有意义。

      但是由于历史原因,这影响了块大小:因为扇区大小几乎总是 512B,所以文件系统块大小一直是 512B 的倍数。 (有一个movement 正在介绍具有 1kB 和 4kB 扇区大小的驱动器,但兼容性看起来相当痛苦。)

      一般而言,在存储许多小文件时,较小的文件系统块大小会减少浪费的空间(除非使用尾部合并等高级技术),而较大的块大小可减少外部碎片并在大磁盘上具有较低的开销。文件系统块大小通常是 2 的幂,低于块设备的扇区大小,高于操作系统的页面大小。

      page size 因操作系统和平台而异(对于 Linux,也可能因配置而异)。与块大小一样,较小的块大小会减少内部碎片,但需要更多的管理开销。 4kB 页面大小在 32 位平台上很常见。

      现在,开始描述间接块。在 UFS 设计中,

      • inode 描述了一个文件。
      • 在 UFS 设计中,一个 inode 可以保存的指向数据块的指针数量非常有限(少于 16 个)。具体数字在派生的实现中似乎有所不同。
      • 对于小文件,指针可以直接指向组成文件的数据块。
      • 对于较大的文件,必须有间接指针,它指向一个只包含更多指向块的指针的块。这些可能是指向属于文件的数据块的直接指针,或者如果文件非常大,它们可能是更间接的指针。

      因此,当使用间接指针时,文件所需的存储量可能大于包含其数据的块。

      并非所有文件系统都使用这种方法来跟踪属于文件的数据块。 FAT 只使用一个文件分配表,它实际上是一个巨大的链表系列,许多现代文件系统使用extents

      【讨论】:

      • 看起来很有希望,我需要一些时间来研究它。
      猜你喜欢
      • 2011-10-11
      • 2014-10-10
      • 2015-08-07
      • 2018-05-03
      • 1970-01-01
      • 2010-10-07
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多