为什么两个目录的内容相同但大小却不同?

为什么两个目录的内容相同但大小却不同?

我有两个资源相同的虚拟机。有人能解释一下为什么下面的目录大小不同,尽管它们的内容相同吗?

VM1

root@vrni-platform:/usr/share/elasticsearch# ls -lah
total 560K
drwxr-xr-x   7 root root 4.0K Jul 29 13:59 .
drwxr-xr-x 141 root root 4.0K Jul 29 13:59 ..
drwxr-xr-x   2 root root 4.0K Jul 29 14:37 bin
drwxr-xr-x   9 root root 4.0K Jul 29 13:59 jdk
drwxr-xr-x   3 root root 4.0K Jul 29 13:59 lib
drwxr-xr-x  46 root root 4.0K Jul 29 13:59 modules
-rw-rw-r--   1 root root 523K May 28 16:35 NOTICE.txt
drwxr-xr-x   2 root root 4.0K May 28 16:35 plugins
-rw-r--r--   1 root root 8.0K May 28 16:35 README.asciidoc

VM2

root@vrni-platform:/usr/share/elasticsearch# ls -lah
total 568K
drwxr-xr-x   7 root root 4.0K Jul 28 13:50 .
drwxr-xr-x 141 root root 4.0K Jul 28 10:35 ..
drwxr-xr-x   2 root root 4.0K Jul 29 07:20 bin
drwxr-xr-x   9 root root 4.0K Jul 28 13:50 jdk
drwxr-xr-x   3 root root  12K Jul 28 13:50 lib
drwxr-xr-x  46 root root 4.0K Jul 28 10:35 modules
-rw-rw-r--   1 root root 523K May 28 16:35 NOTICE.txt
drwxr-xr-x   2 root root 4.0K May 28 16:35 plugins
-rw-r--r--   1 root root 8.0K May 28 16:35 README.asciidoc

VM2 中的大小为lib12K,而 VM1 中的大小为lib4K。

libVM1 中的内容

root@vrni-platform:/usr/share/elasticsearch/lib# ls -lah
total 26M
drwxr-xr-x 3 root root 4.0K Jul 29 13:59 .
drwxr-xr-x 7 root root 4.0K Jul 29 13:59 ..
-rw-r--r-- 1 root root  12M May 28 16:35 elasticsearch-7.7.1.jar
-rw-r--r-- 1 root root  18K May 28 16:35 elasticsearch-cli-7.7.1.jar
-rw-r--r-- 1 root root  44K May 28 16:35 elasticsearch-core-7.7.1.jar
-rw-r--r-- 1 root root  44K May 28 16:35 elasticsearch-geo-7.7.1.jar
-rw-r--r-- 1 root root  21K May 28 16:35 elasticsearch-launchers-7.7.1.jar
-rw-r--r-- 1 root root 6.4K May 28 16:35 elasticsearch-plugin-classloader-7.7.1.jar
-rw-r--r-- 1 root root  11K May 28 16:35 elasticsearch-secure-sm-7.7.1.jar
-rw-r--r-- 1 root root 135K May 28 16:35 elasticsearch-x-content-7.7.1.jar
-rw-r--r-- 1 root root 112K May 28 16:35 HdrHistogram-2.1.9.jar
-rw-r--r-- 1 root root 1.2M May 28 16:35 hppc-0.8.1.jar
-rw-r--r-- 1 root root 342K May 28 16:35 jackson-core-2.10.4.jar
-rw-r--r-- 1 root root  58K May 28 16:35 jackson-dataformat-cbor-2.10.4.jar
-rw-r--r-- 1 root root  89K May 28 16:35 jackson-dataformat-smile-2.10.4.jar
-rw-r--r-- 1 root root  46K May 28 16:35 jackson-dataformat-yaml-2.10.4.jar
-rw-r--r-- 1 root root 8.6K May 28 16:35 java-version-checker-7.7.1.jar
-rw-r--r-- 1 root root 865K May 28 16:35 jna-4.5.1.jar
-rw-r--r-- 1 root root 628K May 28 16:35 joda-time-2.10.4.jar
-rw-r--r-- 1 root root  77K May 28 16:35 jopt-simple-5.0.2.jar
-rw-r--r-- 1 root root 780K May 28 16:35 jts-core-1.15.0.jar
-rw-r--r-- 1 root root 258K May 28 16:35 log4j-api-2.11.1.jar
-rw-r--r-- 1 root root 1.6M May 28 16:35 log4j-core-2.11.1.jar
-rw-r--r-- 1 root root 1.7M May 28 16:35 lucene-analyzers-common-8.5.1.jar
-rw-r--r-- 1 root root 137K May 28 16:35 lucene-backward-codecs-8.5.1.jar
-rw-r--r-- 1 root root 3.4M May 28 16:35 lucene-core-8.5.1.jar
-rw-r--r-- 1 root root  89K May 28 16:35 lucene-grouping-8.5.1.jar
-rw-r--r-- 1 root root 205K May 28 16:35 lucene-highlighter-8.5.1.jar
-rw-r--r-- 1 root root 146K May 28 16:35 lucene-join-8.5.1.jar
-rw-r--r-- 1 root root  51K May 28 16:35 lucene-memory-8.5.1.jar
-rw-r--r-- 1 root root  97K May 28 16:35 lucene-misc-8.5.1.jar
-rw-r--r-- 1 root root 372K May 28 16:35 lucene-queries-8.5.1.jar
-rw-r--r-- 1 root root 374K May 28 16:35 lucene-queryparser-8.5.1.jar
-rw-r--r-- 1 root root 219K May 28 16:35 lucene-sandbox-8.5.1.jar
-rw-r--r-- 1 root root 303K May 28 16:35 lucene-spatial3d-8.5.1.jar
-rw-r--r-- 1 root root 236K May 28 16:35 lucene-spatial-extras-8.5.1.jar
-rw-r--r-- 1 root root 244K May 28 16:35 lucene-suggest-8.5.1.jar
-rw-r--r-- 1 root root 302K May 28 16:35 snakeyaml-1.26.jar
-rw-r--r-- 1 root root 201K May 28 16:35 spatial4j-0.7.jar
-rw-r--r-- 1 root root  51K May 28 16:35 t-digest-3.2.jar
drwxr-xr-x 4 root root 4.0K Jul 29 13:59 tools

libVM2 中的内容

root@vrni-platform:/usr/share/elasticsearch/lib# ls -lah
total 26M
drwxr-xr-x 3 root root  12K Jul 28 13:50 .
drwxr-xr-x 7 root root 4.0K Jul 28 13:50 ..
-rw-r--r-- 1 root root  12M May 28 16:35 elasticsearch-7.7.1.jar
-rw-r--r-- 1 root root  18K May 28 16:35 elasticsearch-cli-7.7.1.jar
-rw-r--r-- 1 root root  44K May 28 16:35 elasticsearch-core-7.7.1.jar
-rw-r--r-- 1 root root  44K May 28 16:35 elasticsearch-geo-7.7.1.jar
-rw-r--r-- 1 root root  21K May 28 16:35 elasticsearch-launchers-7.7.1.jar
-rw-r--r-- 1 root root 6.4K May 28 16:35 elasticsearch-plugin-classloader-7.7.1.jar
-rw-r--r-- 1 root root  11K May 28 16:35 elasticsearch-secure-sm-7.7.1.jar
-rw-r--r-- 1 root root 135K May 28 16:35 elasticsearch-x-content-7.7.1.jar
-rw-r--r-- 1 root root 112K May 28 16:35 HdrHistogram-2.1.9.jar
-rw-r--r-- 1 root root 1.2M May 28 16:35 hppc-0.8.1.jar
-rw-r--r-- 1 root root 342K May 28 16:35 jackson-core-2.10.4.jar
-rw-r--r-- 1 root root  58K May 28 16:35 jackson-dataformat-cbor-2.10.4.jar
-rw-r--r-- 1 root root  89K May 28 16:35 jackson-dataformat-smile-2.10.4.jar
-rw-r--r-- 1 root root  46K May 28 16:35 jackson-dataformat-yaml-2.10.4.jar
-rw-r--r-- 1 root root 8.6K May 28 16:35 java-version-checker-7.7.1.jar
-rw-r--r-- 1 root root 865K May 28 16:35 jna-4.5.1.jar
-rw-r--r-- 1 root root 628K May 28 16:35 joda-time-2.10.4.jar
-rw-r--r-- 1 root root  77K May 28 16:35 jopt-simple-5.0.2.jar
-rw-r--r-- 1 root root 780K May 28 16:35 jts-core-1.15.0.jar
-rw-r--r-- 1 root root 258K May 28 16:35 log4j-api-2.11.1.jar
-rw-r--r-- 1 root root 1.6M May 28 16:35 log4j-core-2.11.1.jar
-rw-r--r-- 1 root root 1.7M May 28 16:35 lucene-analyzers-common-8.5.1.jar
-rw-r--r-- 1 root root 137K May 28 16:35 lucene-backward-codecs-8.5.1.jar
-rw-r--r-- 1 root root 3.4M May 28 16:35 lucene-core-8.5.1.jar
-rw-r--r-- 1 root root  89K May 28 16:35 lucene-grouping-8.5.1.jar
-rw-r--r-- 1 root root 205K May 28 16:35 lucene-highlighter-8.5.1.jar
-rw-r--r-- 1 root root 146K May 28 16:35 lucene-join-8.5.1.jar
-rw-r--r-- 1 root root  51K May 28 16:35 lucene-memory-8.5.1.jar
-rw-r--r-- 1 root root  97K May 28 16:35 lucene-misc-8.5.1.jar
-rw-r--r-- 1 root root 372K May 28 16:35 lucene-queries-8.5.1.jar
-rw-r--r-- 1 root root 374K May 28 16:35 lucene-queryparser-8.5.1.jar
-rw-r--r-- 1 root root 219K May 28 16:35 lucene-sandbox-8.5.1.jar
-rw-r--r-- 1 root root 303K May 28 16:35 lucene-spatial3d-8.5.1.jar
-rw-r--r-- 1 root root 236K May 28 16:35 lucene-spatial-extras-8.5.1.jar
-rw-r--r-- 1 root root 244K May 28 16:35 lucene-suggest-8.5.1.jar
-rw-r--r-- 1 root root 302K May 28 16:35 snakeyaml-1.26.jar
-rw-r--r-- 1 root root 201K May 28 16:35 spatial4j-0.7.jar
-rw-r--r-- 1 root root  51K May 28 16:35 t-digest-3.2.jar
drwxr-xr-x 4 root root 4.0K Jul 28 10:35 tools

正如解释的那样这里在 Linux 中,目录的大小通常为 4K,其中包含指向目录中文件列表的链接。那么有人能告诉我为什么上述两种情况下报告的目录大小不同吗?

操作系统 - Ubuntu 16.04.6

答案1

VM1 和 VM2 中 lib 的大小是保存了名称和指定目录内容的 inode 数组的文件的大小。目录是一种特殊文件,具有自己的 inode。

这种类型(目录)的特殊文件预期大小为 4096 字节 - 4k 字节,但是,如果 shell 认为有必要、为了存储更多数据或者可能由于某些内部原因(这里似乎是这种情况),则预期大小可以增大到更大的。

中的一个ext4 的特性是当文件被删除时或者在 shell 决定将该大小扩展为超过 4096 之后,该大小不会减少。

我希望我能帮你阐明一些问题,尽管我也记不清楚全部细节。

相关内容