
Я много искал и не нашел 1K-blocks
значения в команде df (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
Блок 1K в GNU coreutils df(1) означает 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 }
Подводя итог, официальным источником в этом и каждом случае является исходный код.