В чем разница между выводом
cat /proc/sys/fs/inode-nr
и
df -i
Оба задокументированы при возврате количества используемых inodes, но они возвращают явно не связанные числа.
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 954448 464 953984 1% /dev
tmpfs 956943 1 956942 1% /dev/shm
/dev/xvda1 1310720 272395 1038325 21% /
/dev/xvdb1 1966080 26278 1939802 2% /tmp
tmpfs 956943 1 956942 1% /hdd1/mnt/data
$ cat /proc/sys/fs/inode-nr
199563 122925
/proc/sys/fs/inode-nr
показывает данные об индексных дескрипторах в оперативной памяти (кеше ядра), сначала выделенных на данный момент, а затем свободных. Ядро использует inodes для многих вещей, а не только для файлов. Например, сетевые сокеты тоже идентифицируются индексными дескрипторами.
Видеть https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/sysctl/fs.txt :
Файл inode-nr содержит первые два элемента из состояния inode, поэтому мы перейдем к этому файлу ...
Inode-state содержит три фактических числа и четыре фиктивных. Фактические числа в порядке появления: nr_inodes, nr_free_inodes и preshrink.
Nr_inodes обозначает количество индексов, выделенных системой, это может быть немного больше, чем inode-max, потому что Linux выделяет им одну страницу за раз.
Nr_free_inodes представляет количество свободных индексных дескрипторов (?), А предварительное сжатие не равно нулю, когда nr_inodes> inode-max и системе необходимо сократить список индексных дескрипторов вместо того, чтобы выделять больше.
df -i
показывает inodes на диске, поэтому все, что каждая файловая система может делать со своим конкретным набором inodes.
Таким образом, оба набора чисел всегда будут оставаться не связанными друг с другом.