为什么块数乘以块大小与文件大小不匹配?

为什么块数乘以块大小与文件大小不匹配?

这是我stat在 Linux 中对文件发出命令时得到的结果:

yasar@yasar-laptop ~/myscripts/sysprog $ LC_ALL=C stat error.c
  File: 'error.c'
  Size: 184         Blocks: 8          IO Block: 4096   regular file
Device: 804h/2052d  Inode: 103650221   Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   yasar)   Gid: (  100/   users)
Access: 2012-04-23 17:10:28.117455882 +0300
Modify: 2012-04-21 22:18:59.967686183 +0300
Change: 2012-04-21 22:19:00.001019336 +0300
 Birth: -

如您所见,文件系统的块大小为 4kb,文件分配了 8 个块,但其大小只有 184 字节。为什么一个文件占用 8 个块,而一个块就足够了?

答案1

$ echo a > a

文件“a”现在包含两个字节,一个“a”和一个换行符。

$ stat -c "%b %B %s" a
16 512 2

分配了 16 个块,每个块大小为 512 字节。这是文件系统跟踪的最小空间量。

答案2

文件系统 ext4 为每个文件分配至少 4k。磁盘上有 8 个块(512 字节)。这里有一个很好的解释https://stackoverflow.com/questions/1346807/how-does-stat-command-calculate-the-blocks-of-a-file

答案3

如你所见,IO 块(又称文件系统块)为 4kB

这意味着文件分配八个 512 字节块

(这让我想知道如果我们拥有具有 4kB 物理块大小的现代磁盘会发生什么)

并且您会看到 fdisk 和 windows 分区工具最近从磁盘起始处按兆字节偏移分区的原因......以防万一它错误检测媒体块大小(NAND 写入大小等)它至少是某种程度上最优的,即不会在 2x 128kB NAND 芯片上写入 4kB 块左右。

相关内容