linux: ls -l中的文件大小比du得到的大是怎么回事?

查看kafka某topc下的文件

[root@localhost TOPIC_QUEUE_ID-0]# ls -l
total 2932
-rw-r--r-- 1 root root 10485760 Oct 30 2017 00000000000003771019.index
-rw-r--r-- 1 root root 2985451 Oct 30 2017 00000000000003771019.log
-rw-r--r-- 1 root root 10485756 Oct 26 2017 00000000000003771019.timeindex
[root@localhost TOPIC_QUEUE_ID-0]# du -m 00000000000003771019.log
3 00000000000003771019.log
[root@localhost TOPIC_QUEUE_ID-0]# du -m 00000000000003771019.index
1 00000000000003771019.index
[root@localhost TOPIC_QUEUE_ID-0]# du -k 00000000000003771019.index
8 00000000000003771019.index
[root@localhost TOPIC_QUEUE_ID-0]# du -k 00000000000003771019.log
2920 00000000000003771019.log

index文件在ls -l下是10M,在du -k下才8KB
怎么回事?

阅读 2.8k
1 个回答

因为你看到的是稀疏文件

比如虚拟机的硬盘文件,就是一种典型的稀疏文件。而kafka的官方文档也说了,日志文件就是创建一个稀疏文件,比如下面的内容就摘自于官方文档:

PROPERTY DEFAULT DESCRIPTION
log.index.size.max.bytes 10 * 1024 * 1024 The maximum size in bytes we allow for the offset index for each log segment. Note that we will always pre-allocate a sparse file with this much space and shrink it down when the log rolls. If the index fills up we will roll a new log segment even if we haven't reached the log.segment.bytes limit.

注意官方文档的描述,每个log segment就是预先创建的稀疏文件

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题