I/O error, dev sda, sector N: ошибка носителя
Ошибка ввода-вывода на устройстве — сообщение о том, что носитель не выполнил операцию. Служба получает отказ, файловая система может перейти в режим только для чтения, а данные в этом месте под вопросом. Это тот случай, когда сначала спасают данные, а потом разбираются.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Носитель отказывает
Растущее число ошибок и переназначенных секторов означает, что диск на исходе.
-
Файловая система перешла в режим только для чтения
При ошибках записи файловая система защищается: дальнейшая запись запрещается, и службы падают на попытке записать что угодно.
-
Проблема в пути к диску, а не в диске
Кабель, контроллер или путь к хранилищу дают те же ошибки при исправном носителе.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Ошибки устройств за текущую загрузку.
journalctl -k -b --no-pager | grep -iE "I/O error|ata[0-9]|nvme" | tail -20Состояние носителя по внутренним счётчикам.
sudo smartctl -H -A /dev/sda 2>/dev/null | head -20Режимы монтирования: не перешло ли что-то в чтение.
findmnt -o TARGET,SOURCE,OPTIONSРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Растущее число ошибок и переназначенных секторов означает, что диск на исходе.
- Как проверить
-
Посмотрите ошибки и состояние диска.
journalctl -k -b --no-pager | grep -iE "I/O error|Medium Error" | tail sudo smartctl -A /dev/sda 2>/dev/null | grep -iE "reallocated|pending|error"
- Как исправить
- Снимите копию данных и замените диск. Попытки продолжать работу увеличивают потери.
- Почему происходит
- При ошибках записи файловая система защищается: дальнейшая запись запрещается, и службы падают на попытке записать что угодно.
- Как проверить
-
Посмотрите режим монтирования.
findmnt -o TARGET,SOURCE,OPTIONS / | head journalctl -k -b --no-pager | grep -i "read-only" | tail
- Как исправить
- Перемонтирование для записи помогает лишь до следующей ошибки. Сначала носитель, потом проверка файловой системы, и только потом запуск служб.
- Почему происходит
- Кабель, контроллер или путь к хранилищу дают те же ошибки при исправном носителе.
- Как проверить
-
Посмотрите сообщения контроллера.
journalctl -k -b --no-pager | grep -iE "ata[0-9]|link is slow|failed command" | tail -15
- Как исправить
- Проверьте соединение и контроллер. Сообщения о сбросе канала указывают на путь, а не на носитель.
Пример вывода
Ошибка чтения с последующим переходом в режим только для чтения. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
kernel: blk_update_request: I/O error, dev sda, sector 1250263728 op 0x1:(WRITE) flags 0x800
kernel: EXT4-fs error (device sda2): ext4_journal_check_start:83: Detected aborted journal
kernel: EXT4-fs (sda2): Remounting filesystem read-only
postgresql[1200]: PANIC: could not write to file "pg_wal/000000010000000000000023": Input/output error
Связанные ошибки
- Input/output error в журнале службы Ошибка ввода-вывода: проблемы носителя, отвалившийся сетевой ресурс, повреждённая файловая система. Что проверять срочно.
- Файловая система перешла в режим только для чтения на ходу Служба работала и вдруг перестала писать: ядро перемонтировало раздел после ошибки. Срочные действия.
- Массив в состоянии degraded: выпал диск Программный массив работает без одного диска: служба работает, запас надёжности исчерпан.
- task blocked for more than 120 seconds Ядро сообщает о процессе, зависшем в ожидании ввода-вывода дольше двух минут. Служба при этом не отвечает и не убивается.
- Elasticsearch: max virtual memory areas vm.max_map_count is too low Elasticsearch отказывается стартовать из-за заниженного vm.max_map_count. Как поднять значение и закрепить его.
- File corrupted or uncleanly shut down, renaming and replacing Журнал повреждён после жёсткой перезагрузки: что означает сообщение и когда нужно вмешательство.
- Function not implemented в контейнере Ошибка 38 при системном вызове: вызов запрещён фильтром или отсутствует в окружении. Разбор для контейнеров.
- Hardware Error / EDAC: ошибки памяти в журнале Ядро сообщает об ошибках памяти. Что считать безобидным, а что поводом менять модуль.
Где встречается чаще всего
Источники
- smartctl(8): состояние носителей
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено ошибками ввода-вывода на тестовом устройстве.