与 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。