在阅读文件如何存储在文件系统中时,我创建了一个大小为 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 字节块。