У файловой системы два независимых ресурса, и кончиться может любой — даже когда второго с избытком.
На машине обычно работает несколько файловых систем: у корня / своя, у учебного тома — своя, собранная в файле-образе. Каждая ведёт учёт сама, поэтому df спрашивают про путь, куда пишет программа.
Содержимое файлов файловая система хранит в блоках — кусках одинакового размера. df -h считает блоки: Size — всего, Used — занято, Avail — доступно обычному пользователю. Резерв для root в Avail уже не входит.
Кроме содержимого, у файла есть описание: владелец, права, время изменения, адреса блоков. Оно хранится в inode — отдельной записи на каждый файл и каталог. Имени в inode нет: имя держит каталог, в записи «имя → номер inode».
Число inode в ext4 задаётся при создании файловой системы и потом не растёт. Новый файл, даже пустой, забирает один свободный inode. Свободных нет — файл не создаётся, и система пишет ту же No space left on device.
| Ресурс | На что расходуется | Чем проверить |
|---|---|---|
| блоки | содержимое файлов | df -h ПУТЬ, столбец Avail |
| inode | каждый файл и каталог, даже пустой | df -i ПУТЬ, столбец IFree |
Сотни пустых файлов исчерпают inode при свободных блоках, один огромный файл займёт все блоки одним inode. На обычных дисках inode — сотни тысяч; на учебном томе их нарочно 256, чтобы нехватка наступала за секунды.
В упражнении служба снова не может записать отчёт, но том собран в другом состоянии.
Что кончилось на этот раз
Служба снова не может записать отчёт в /mnt/lab-data. Попробуй записать строку в report.txt, потом сравни для тома df -h и df -i.