0

Jonathan Leffler 在“如何找到某些指定文件的大小?”问题中的评论 是发人深省的。我将它分成几部分进行分析。

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

  2. 您通常最终使用的空间比计算给出的更多,因为 1 字节文件(通常)占用一页(可能 512 字节)。

  3. 确切的值各不相同 - 在第 7 版 Unix 文件系统的日子里它更容易(尽管即使在那时也不是微不足道的)

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

关于零件的问题

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

出现的历史问题

一、莱弗勒所说的历史背景是什么?

二、定义是否随着时间而改变?

4

2 回答 2

3
  1. 我认为他的意思是块而不是页面,块是文件系统上的最小可寻址单元。

  2. 块大小可以变化

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

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

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

于 2009-05-23T22:27:17.503 回答
2

与 Wikipedia 页面一样,Block(数据存储)虽然过于热衷于链接所有关键字,但信息量很大。

计算(特别是数据传输和数据存储)中,块是一系列字节,具有标称长度(块大小)。据说这样结构化的数据被阻止了。将数据放入块的过程称为阻塞。阻塞用于促进接收数据的计算机程序对数据流的处理。阻塞的数据通常一次读取整个块。在将数据存储到 9 磁道磁带、软盘硬盘光盘和 NAND闪存等旋转介质时,几乎普遍采用阻塞。

大多数文件系统都基于块设备,这是负责存储和检索指定数据块的硬件的抽象级别,尽管文件系统中的块大小可能是物理块大小的倍数。在经典文件系统中,单个块可能只包含单个文件的一部分。由于内部碎片,这会导致空间效率低下,因为文件长度通常不是块大小的倍数,因此最后一个文件块将保持部分空。这将创建slack space,平均每个文件半个块。一些较新的文件系统试图通过称为块子分配尾部合并

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

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

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

如今,CHS 的使用并不多,因为

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

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

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

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

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

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

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

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

于 2009-05-24T16:40:01.907 回答