Для внутреннего хранения файла файловая система разбивает хранилище на блоки (по 4 Кб или 512 байт).
Содержимое 1-байтового файла всё равно занимает 4 КБ дискового пространства.
Поэтому есть размер файла:
ls -l file.c
df file.c
stat
Есть реальное использование диска файлом:
ls -ls file.c
du file.c
stat
Команда stat производит выборку данных из inode - структуры памяти, представляющей файл:
struct inode {
/* excluded content */
loff_t i_size; /* file size - размер файла ls -l */
struct timespec i_atime; /* access time */
struct timespec i_mtime; /* modification time */
struct timespec i_ctime; /* change time */
unsigned short i_bytes; /* bytes used (for quota) */
unsigned int i_blkbits; /* block size = 1 << i_blkbits */
blkcnt_t i_blocks; /* number of blocks used */
/* excluded content */
}
Количество inode ограничено и задается при создании файловой системы в случае с ext2fs).
Узнать число занятых inodes можно командой:
df -i
В случае превышения числа разрешенных файлов возникнет ошибка "disk quota exceeded" и сервер начнет тормозить. Соответственно, потребуется анализ занятого пространства (например, с помощью утилиты ncdu) и очистка лишних файлов.
Следовательно правильно учитывать реальное использование диска файлом с учетом размера занимаемых им блоков.
Кроме этого есть файлы, которые не сразу удаляются, а продолжают висеть в процессах с пометкой deleted
df их размер не отображает, а du, наоборот, указывает, что они есть.
Источники:
https://habr.com/ru/companies/flant/articles/354802/
https://rebrainme.com/webinars/linux-special-directories/
http://memoryhigh.ru/disk-quota-exceeded-ili-kak-ochistit-inodes-v-debian/
CISHost - c нами Вы познаете дзен!