В ext-файловых системах может случиться так: df -h показывает много свободного места, но создать файл нельзя. Причина в том, что закончились inode.
Что такое inode
Файл в Linux состоит из данных и его описания. Данные лежат в блоках, а описание в inode. В inode хранятся права, владелец и номера блоков с данными.
Посмотреть inode файла:
ls -li
Почему место может закончиться при свободных гигабайтах
Свободное место и количество inode это разные вещи. Ext2/3/4 создают inode один раз при форматировании. Один файл -> один inode.
Проверка:
df -h # место
df -i # inode
Типичная ситуация:
df -h → свободно 20G
df -i → 0 свободных inode
Свободные блоки есть, а inode закончились, получается новый файл создать нельзя.
Что делать
Понять, что именно упёрлось: место или inode. Если упёрлось в inode, вариантов немного. На ext увеличить их нельзя. Только удалить мелкие файлы или переделать файловую систему.
Резервные блоки ext
Ext по умолчанию скрывает около 5% места под root. Иногда это десятки гигабайт.
Посмотреть:
tune2fs -l /dev/sdX1 | grep 'Reserved block'
Временно отключить:
sudo tune2fs -m 0 /dev/sdX1
Вывод
Если прод внезапно перестал писать, а df -h показывает свободное место — сразу смотри df -i. Чаще всего именно inode закончились первыми. В xfs и btrfs такая ситуация почти не встречается, потому что inode там создаются динамически, а не заранее.
LinuxCamp | #storage
