统计、块和扇区大小 - ext4

统计、块和扇区大小 - ext4

在阅读文件如何存储在文件系统中时,我创建了一个大小为 217 字节的测试文件。检查该文件的输出stat,我发现该文件占用了 8 个块。最初我认为当块大小为 4096 字节并且值Blocks:应该1代替 时,大小为 217 字节的文件不可能使用 8 个块8。然后我读了,并意识到该Blocks:值为文件占用的512字节空间的数量。并且由于块的最小大小为 4096 字节,因此即使大小为 2 字节的文件也会占用 8 个块(因为 4096/512 = 8)。

[root@server ~]# stat smallfile.txt
  File: `smallfile.txt'
  Size: 217             Blocks: 8          IO Block: 4096   regular file

我读过这里那:

“每个扇区存储固定数量的用户可访问数据,传统上硬盘驱动器 (HDD) 为 512 字节,CD-ROM 和 DVD-ROM 为 2048 字节。较新的 HDD 使用 4096 字节 (4 KiB) 扇区,众所周知作为高级格式 (AF)。”

我可以访问的所有系统都使用扇区大小为 512 字节的 HDD。所以我相信st_blocks(正如我给出的第二个和第三个超链接所解释的那样)与硬盘驱动器的扇区大小匹配?所以问题是:

  • 将来,如果我要在扇区大小为 4096 字节的 HDD 上拥有相同的 217 字节大小的文件,stat文件上的命令是否会显示Blocks: 1而不是Blocks: 8(since 4096/4096 = 1) ?
  • 或者st_blocks无论扇区大小如何,始终使用 512 字节作为单个最小单位?
  • 还是和VFS有关系?

答案1

您给出的链接明确指出:

st_blocks字段表示分配给文件的块数,以512字节为单位。

因此,无论使用什么底层设备,它们始终以 512 字节块为单位。该stat命令仅显示stat系统调用返回的内容。 512 字节块是一个历史性的东西,在 POSIX 中定义。例如比较这些:

$ ls -s smallfile.txt
4 smallfile.txt
$ env POSIXLY_CORRECT=1 ls -s smallfile.txt
8 smallfile.txt

GNUls默认以 1kB 块显示块,但当强制遵守 POSIX 时,它显示 512 字节块。

相关内容