这是我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 块左右。