plu*_*uck 28 filesystems ext3 terminology block-device
我有一个关于块大小和簇大小的问题。关于我所读到的内容,我假设如下:
如果我有以下输出:
$ stat test
File: `test'
Size: 13 Blocks: 4 IO Block: 2048 regular file
Device: 700h/1792d Inode: 15 Links: 1
Run Code Online (Sandbox Code Playgroud)
大小是以字节为单位的实际空间,块是物理使用的块(每个 512 字节),IO 块与创建 FS 时指定的块大小有关,这是否正确?
Gil*_*il' 33
我认为您很困惑,可能是因为您阅读了使用不同术语的多个文档。诸如“块大小”和“集群大小”之类的术语没有通用含义,即使在文件系统文献的上下文中也是如此。
对于ext2或ext3,情况比较简单:每个文件占用一定数量的块。给定文件系统上的所有块都具有相同的大小,通常是 1024、2048 或 4096 字节之一。大小在 N 个块加一个字节和 N+1 个块之间的文件¹占用 N+1 个块。该块大小是您指定的大小mke2fs -b。没有单独的集群概念。
MS-DOS 和早期版本的 Windows 尤其使用的FAT文件系统具有类似的简单空间分配。ext2 称为块,FAT 称为簇;这个概念是一样的。
一些文件系统有更复杂的分配方案:它们有固定大小的块,但可以使用同一个块来存储多个文件的最后几个字节。这称为块子分配;Reiserfs和Btrfs 能做到,但 ext3 甚至 ext4 都不能。
Unix 实用程序通常使用“块”一词来表示任意大小的单元,通常为 512 字节或 1kB。这种用法与任何特定的文件系统或磁盘硬件无关。从历史上看,512B 块的出现是因为当时的磁盘和文件系统经常以 512B 块运行,但现代用法只是随意的。传统的 unix 实用程序和接口有时仍然使用 512B 块,尽管现在通常首选 1kB 块。您需要检查每个实用程序的文档以了解它使用的块大小(有些具有开关,例如du -B或df -B在 Linux 上)。
在 GNU/Linuxstat实用程序中,该blocks数字是文件使用的 512B 块数。该IO Block数字是文件输入输出的首选大小,原则上无关,但通常表示底层文件系统的块大小(或集群大小,如果您想这样称呼它)。在这里,您有一个 13 字节的文件,它在 ext3 文件系统上占据一个块,块大小为 2048;因此文件占用 4 512 字节单元(称为“块” stat)。
大多数磁盘都提供一个界面,将磁盘显示为一组扇区。磁盘只能写入或读取整个扇区,而不能写入或读取单个位或字节。大多数硬盘都有 512 字节的扇区,尽管 4kB 扇区的磁盘几年前开始出现。
磁盘扇区大小与文件系统块大小没有直接关系,但将一个块作为整数个扇区对性能更好。
¹ 例外:稀疏文件节省空间。