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

yas*_*sar 5 linux filesystems

以下是我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: -
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,文件系统的块大小是 4kb,文件分配了 8 个块,但它的大小只有 184 字节。为什么一个文件需要 8 个块,而只有 1 个块就足够了?

ZaB*_*ZaB 0

如您所见,IO 块又名文件系统块是 4kB

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

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

你会看到 fdisk 和 Windows 分区工具最近从磁盘开头偏移分区兆字节的原因......以防万一它错误检测介质块大小(NAND 写入大小等),它至少在某种程度上是最佳的,即不写入 4kB块跨越 2x 128kB NAND 芯片左右。