Назад | Перейти на главную страницу

Как проверить, почему запись не удалась?

Если я должен был отлаживать службу на машине и определил, что запись не выполняется, как я мог бы проверить, почему запись не удалась?

Я знаю, что системный вызов в C вернет -1, и тогда мы можем проверить, какая константа int errno содержит (EINVAL,и т.д.). Однако, если я не могу это проверить, как мне проверить причину ошибки? Будет ли в этом случае dmesg показывать мне ошибку на уровне блочного устройства?

Если сбой записи был связан с ошибкой ввода-вывода диска и, следовательно, с отказавшим диском, то вы, скорее всего, найдете сообщения об ошибках от ядра в dmesg вывод.

Но если таких симптомов нет, следует сначала исключить самые простые объяснения:

  • Авторизован ли процесс для выполнения операции записи, которую он пытается выполнить? Другими словами, есть ли у него разрешение на запись в объект, который он пытается написать? Если используется SELinux, также проверьте журнал аудита в /var/log/audit/ каталог.
  • Файловая система заполнена?
  • Нет ли в файловой системе свободных индексных дескрипторов (применимо только к файловым системам без динамического создания индексных дескрипторов, например к семейству ext2 / ext3 / ext4)?