块大小和集群大小之间的差异


20

我有一个关于块大小和集群大小的问题。关于我所读到的内容,我假设以下内容:

  • 块大小是一个块的物理大小,通常为512字节。没有办法改变这一点。
  • 群集大小是操作系统可以读取和写入的最小块大小。如果我创建一个新的文件系统(例如ext3),则可以使用开关-b指定此最小块大小。几乎所有程序(例如dumpe2fs,mke2fs)都使用块大小作为群集大小的名称。

如果我得到以下输出:

$ stat test
File: `test'
Size: 13            Blocks: 4          IO Block: 2048   regular file
Device: 700h/1792d  Inode: 15          Links: 1

大小是实际空间(以字节为单位),块是物理使用的块(每个块为512字节)并且IO块与创建FS时指定的块大小有关是否正确?

Answers:


26

我认为您很困惑,可能是因为您已经阅读了一些使用不同术语的文档。甚至在文件系统文献中,“块大小”和“群集大小”之类的术语也没有通用含义。

文件系统

对于ext2ext3,情况相对简单:每个文件占用一定数量的。给定文件系统上的所有块都具有相同的大小,通常为1024、2048或4096字节之一。一个文件大小在N个块加一个字节与N + 1个块之间,占N + 1个块。该块大小是您使用指定的大小mke2fs -b。没有单独的集群概念。

特别是MS-DOS和Windows的早期版本使用的FAT文件系统具有类似的简单空间分配。ext2称为块,FAT称为;概念是相同的。

一些文件系统具有更复杂的分配方案:它们具有固定大小的块,但是可以使用同一块存储一个以上文件的最后几个字节。这被称为块子分配ReiserfsBtrfs做到了,但ext3甚至ext4都不这样做。

实用工具

Unix实用程序通常使用“块”一词来表示任意大小的单位,通常为512字节或1kB。此用法与任何特定的文件系统或磁盘硬件无关。从历史上看,之所以出现512B块,是因为当时的磁盘和文件系统通常以512B块的形式进行操作,但是现代用法是任意的。传统的unix实用程序和接口有时仍使用512B块,尽管现在通常首选1kB块。您需要检查每个实用程序的文档,以了解其使用的块大小(有些具有开关,例如在Linux上du -Bdf -B在Linux上)。

在GNU / Linux stat实用程序中,该blocks数字是文件使用的512B块数。该IO Block图是文件输入输出的首选大小,原则上无关紧要,但通常表示底层文件系统的块大小(如果要调用它,则为集群大小)。在这里,您有一个13字节的文件,它在ext3文件系统上占据一个块,块大小为2048;因此,该文件占用4 512字节单位(被称为“块” stat)。

磁碟

大多数磁盘都提供一个界面,该界面将磁盘显示为一堆扇区。磁盘只能写入或读取整个扇区,而不能写入单个位或字节。大多数硬盘具有512字节的扇区,尽管几年前开始出现4kB扇区的磁盘。

磁盘扇区大小与文件系统块大小不直接相关,但是将块设为扇区总数可以提高性能。

¹ 例外:稀疏文件可节省空间。


2
感谢您的澄清。我之所以来到这里,是因为Windows的ext2fsd工具引起了这种混乱。他们的命令行选项开始:“用法:mke2fs [-c | -l文件名] [-b块大小] [-C群集大小] ...”嗯,您看到的是块大小和群集大小...
Bernhard Hiller 2016年

我也想知道mke2fs的块大小和集群大小之间有什么区别。有人知道吗 ?
X.LINK

1
@ X.LINK在手册页中进行了解释。集群大小由bigalloc功能使用,如果我理解正确,它可以更快地访问大型文件,但会浪费更多的存储空间。
吉尔斯(Gillles)“所以-别再邪恶了”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.