Свободные блоки есть, а сервису писать некуда
Свободные блоки есть, а сервису писать некуда Сервис работает под непривилегированным пользователем и получает ошибку записи. GNU df показывает Avail = 0, хотя полный счётчик свободных блоков ещё положительный. На ext4 такую разницу может объяснять резерв блоков. Проверка состоит из двух шагов. 1. Найдите файловую систему реального пути записи. Уточните путь в конфигурации приложения и сопоставьте его с монтированием. Ниже — вымышленный пример; для своего сервиса подставьте фактические значения: systemctl cat myapp.service findmnt -T /var/lib/myapp # TARGET SOURCE FSTYPE OPTIONS # / /dev/mapper/vg0-applv ext4 rw,relatime Unit-файл помогает разобраться в запуске сервиса, но путь записи может находиться в конфигурации самого приложения. Если сервис изолирован, отдельно проверьте, что он и администратор видят одинаковые пути и монтирования. Иначе показания для одноимённого пути могут относиться к другой файловой системе. 2. Сравните свободные и доступные блоки для этого пути. Avail в GNU df опирается на f_bavail — доступные непривилегированным пользователям блоки. f_bfree показывает все свободные блоки. Их можно получить через statvfs; для перевода в байты нужен f_frsize: df -h /var/lib/myapp # фрагмент вывода: Avail = 0, Mounted on = / python3 - <<'PY' import os s = os.statvfs('/var/lib/myapp') print('f_frsize =', s.f_frsize) print('f_bfree =', s.f_bfree) print('f_bavail =', s.f_bavail) PY # f_frsize = 4096 # f_bfree = 393216 # f_bavail = 0 В примере свободно 393216 × 4096 = 1610612736 байт, то есть 1,5 GiB. Доступных обычному процессу блоков нет. Положительный f_bfree поэтому не означает, что сервис сможет продолжить запись. И даже положительный f_bavail не гарантирует успешное создание файла: причины отказа могут быть другими. Настроенный резерв можно посмотреть без изменения параметров ФС. Команда читает суперблок и не меняет настройки раздела: sudo tune2fs -l /dev/mapper/vg0-applv # фрагмент вывода: # Block count: 20971520 # Reserved block count: 1048576 Здесь зарезервировано 5 % общего числа блоков. Размер резерва — настройка, а не текущий остаток свободного места. Доступ к нему зависит от настроек ФС и привилегий процесса; формула «резерв только для root» слишком груба. Развилка простая: если сервис пишет на другой раздел, сначала исправьте объект диагностики. Если путь и ФС совпадают, разбирайте разницу f_bfree и f_bavail и условия отказа. Сам резерв ещё не доказывает причину конкретной ошибки записи. Типичная ошибка — сразу чистить файлы или уменьшать резерв. Это не подтверждает ни фактический путь, ни причину отказа и может затронуть нужные данные или служебные нужды ФС. Сохраните эти два шага для диагностики. Чтение показаний файловой системы в контексте работающего сервиса — полезная практика для обучения администрированию Linux. #Linux #ext4 #Диагностика #УЦФОРС