Input/output error в журнале службы
Сообщение Input/output error (номер 5, EIO) означает, что операция с устройством не удалась на уровне ядра. Это одна из немногих ошибок, которые требуют срочного внимания: чаще всего за ней стоит умирающий носитель.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Ошибки носителя
Битые блоки, отказ контроллера, перегрев. Ядро сообщает об ошибках чтения или записи, а службы видят EIO.
-
Отвалился сетевой ресурс
При обрыве связи с сетевым хранилищем операции с файлами возвращают EIO. Точка монтирования при этом может выглядеть смонтированной.
-
Повреждена файловая система
После аварийных выключений метаданные могут быть несогласованы. Ядро переводит раздел в режим только для чтения, а операции дают EIO.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Записи ядра: там видно устройство и сектор.
journalctl -k -b --no-pager | grep -i "I/O error" | tail -20Общая оценка состояния диска.
sudo smartctl -H /dev/sdaПоследние сообщения ядра с временными метками.
dmesg -T | tail -30Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Битые блоки, отказ контроллера, перегрев. Ядро сообщает об ошибках чтения или записи, а службы видят EIO.
- Как проверить
-
Посмотрите записи ядра и состояние диска.
journalctl -k -b --no-pager | grep -iE "I/O error|medium error|ata[0-9]|nvme" | tail -20 sudo smartctl -H -A /dev/sda 2>/dev/null | head -20
- Как исправить
- Снимите копию данных на другой носитель и замените диск. Продолжать работу на диске с ошибками — терять данные.
- Почему происходит
- При обрыве связи с сетевым хранилищем операции с файлами возвращают EIO. Точка монтирования при этом может выглядеть смонтированной.
- Как проверить
-
Посмотрите монтирования и доступность сервера.
findmnt -t nfs4,nfs,cifs ping -c2 сервер-хранилища
- Как исправить
- Восстановите связь и перемонтируйте ресурс. Для устойчивости используйте мягкое монтирование с таймаутами.
- Почему происходит
- После аварийных выключений метаданные могут быть несогласованы. Ядро переводит раздел в режим только для чтения, а операции дают EIO.
- Как проверить
-
Посмотрите записи ядра о файловой системе.
journalctl -k -b --no-pager | grep -iE "ext4-fs error|xfs.*corrupt|remount" | tail
- Как исправить
- Проверьте файловую систему при размонтированном разделе. До проверки не пишите на раздел.
Пример вывода
Ошибки чтения с диска. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
kernel: blk_update_request: I/O error, dev sda, sector 123456789 op 0x0:(READ) flags 0x0
kernel: EXT4-fs warning (device sda2): ext4_end_bio:342: I/O error 10 writing to inode 131074
myapp[4100]: fatal: read /var/lib/myapp/data.db: input/output error
Связанные ошибки
- Read-only file system в журнале службы Служба не может писать: файловая система только для чтения. Разбор: параметры изоляции unit, монтирование ro, ошибки файловой системы.
- fsck failed: проверка файловой системы остановила загрузку Проверка файловой системы при загрузке завершилась неудачей. Как прочитать причину, запустить проверку вручную и что делать с корневым разделом.
- signal=BUS (status=7/BUS) в systemd Процесс службы завершён сигналом BUS: ошибка доступа к памяти, часто из-за усечённого файла в отображении или заполненного диска.
- Disk quota exceeded для службы Место на разделе есть, а запись отклоняется: исчерпана дисковая квота пользователя или группы.
- Docker: no space left on device при запуске контейнеров Раздел с /var/lib/docker заполнен образами и слоями. Как посчитать занятое и что можно удалить безопасно.
- Elasticsearch: индексы переведены в режим только для чтения Elasticsearch блокирует запись при нехватке места: пороги watermark. Как снять блокировку правильно.
- MySQL: InnoDB не запускается после аварийного завершения Ошибки InnoDB при старте: повреждение страниц, несовпадение журнала, режим принудительного восстановления.
- MySQL: журнал двоичных изменений заполнил диск Место кончилось из-за binlog: не настроена очистка, отстала репликация, слишком большой срок хранения.
Источники
- read(2): ошибка EIO
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Наблюдалось на диске с битыми блоками в тестовой среде.