在阅读文件如何存储在文件系统中时,我创建了一个大小为 217 字节的测试文件。检查stat
这个文件的输出,我看到这个文件占用了8个块。最初我认为,当块大小为 4096 字节且值Blocks:
应1
为8
. 然后我读了this,this和this,并意识到该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
Run Code Online (Sandbox Code Playgroud)
我在这里读到:
“每个扇区存储固定数量的用户可访问数据,传统上硬盘驱动器 (HDD) 为 512 字节,CD-ROM 和 DVD-ROM 为 2048 字节。较新的 HDD 使用 4096 字节 (4 KiB) 扇区,这是众所周知的作为高级格式 (AF)。”
我可以访问使用过的扇区大小为 512 字节的 HDD 的所有系统。所以我相信st_blocks
(如我给出的第二个和第三个超链接所解释的)与硬盘驱动器的扇区大小相匹配?所以问题是:
stat
命令会显示Blocks: 1
而不是Blocks: 8
(since 4096/4096 = 1) 吗?st_blocks
无论扇区大小如何,都将始终使用 512 字节作为单个最小单位?您明确给出的链接说明:
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
Run Code Online (Sandbox Code Playgroud)
ls
默认情况下,GNU以 1kB 的块显示块,但当强制遵守 POSIX 时,它显示 512 字节的块。