df 中的 1K 块是什么,以及如何计算使用百分比?

df 中的 1K 块是什么,以及如何计算使用百分比?

我搜索了很多,没有找到1K-blocksdf 命令(gnu)的含义,但我计算了一下,认为它等于1K Byte?有官方解释吗?

那么如何计算Used Percentage

例如:

tankywoo@gentoo-jl::~/ » df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/sda3                     15G  5.9G  8.2G  42% /

tankywoo@gentoo-jl::~/ » df
Filesystem                  1K-blocks    Used Available Use% Mounted on
/dev/sda3                    15481840 6163320   8532088  42% /

在我的本地机器中,我知道有reserved space

已使用量为 6163320,可用量为 8532088,因此:

我认为Used%应该是 (15481840-8532088)/15481740 = 44.88%,而不是 42%。

那么如何得到结果呢42%

答案1

GNU coreutils df(1) 中的 1K 块表示 1024 字节。通过快速查看 GNU coreutils 版本 8.13 源代码可以确认:

964   if (human_output_opts == -1)
965     {
966       if (posix_format)   
967         {
968           human_output_opts = 0;
969           output_block_size = (getenv ("POSIXLY_CORRECT") ? 512 : 1024);
970         }
971       else             
972         human_options (getenv ("DF_BLOCK_SIZE"),
973                        &human_output_opts, &output_block_size);
974     }

如您所见,默认输出块大小为 1024,除非POSIXLY_CORRECT设置了环境变量。

计算使用百分比时,当底层文件系统支持保留空间/块(大多数都支持)时,df(1)会从可用空间中减去为 root 用户保留的空间/块:

529   if (known_value (total) && known_value (available_to_root))
530     {
531       used = total - available_to_root;
532       negate_used = (total < available_to_root);
533     }

总而言之,在这种情况下以及每种情况下的官方权威都是源代码。

相关内容