POSIX df
предлагает только блоки размером 1024 или 512 байт, поэтому ответ зависит от системы и, скорее всего, от файловой системы. (и я проигнорирую такие сложности, как перераспределение блоков и встроенные данные .)
Первое соображение - это концепция зарезервированных блоков , согласно спецификации счетчик свободных блоков, выводимый посредством df
, не будет включать зарезервированные блоки (обычно зарезервированные для корневых, но не всегда ).
(в основном) переносимый способ узнать без использования df
- использовать Gnu stat
, используя выбранный вами выходной формат:
$ stat -fc "%n type=%T freeblk=%f totalblk=%b blksz=%S" /tmp
/tmp type=ext2/ext3 freeblk=99136 totalblk=494123 blksz=4096
Вы можете использовать % a
(вместо % f
) для вывода эффективного количества свободных блоков (т. е. без учета зарезервированных блоков), которое df
использует в своих вычислениях.
Другие системы (* BSD) имеют различия во флагах и функциях форматирования stat
и могут работать только с файлами, но не с файловыми системами. stat
не является POSIX (это оболочка для функций POSIX stat ()
и statvfs ()
), версия GNU (в coreutils package) вполне переносим.
С файловыми системами на основе ext2 / 3/4 вы можете как root (или, точнее: с доступом для чтения к узлу блочного устройства) выгрузить эту информацию с помощью tune2fs
:
# tune2fs -l /dev/sda3
tune2fs 1.42.8 (20-Jun-2013)
Filesystem volume name:
Last mounted on: /var/spool
Filesystem UUID: 7b9d93dd-1322-4f54-a302-a0799f4518fb
Filesystem magic number: 0xEF53
[...]
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 7651328
Block count: 30588854
Reserved block count: 305888
Free blocks: 30060629
Free inodes: 7651317
First block: 0
Block size: 4096
Fragment size: 4096
[...]
Этот метод работает независимо от того, файловая система смонтирована или нет.
На самом деле решение было размещено на AskFedora пользователем @johanh:
LANG=en_US.UTF8 dbus-run-session -- gnome-shell --display-server --wayland