Что означает ошибка disk I/O error
Ошибка disk I/O error (ошибка ввода-вывода диска) означает, что ядро Linux не смогло прочитать или записать данные на блочное устройство, например /dev/sda, /dev/nvme0n1 или их разделы. В логах и консоли обычно отображается текст вроде:
end_request: I/O error, dev sda, sector 12345678
Buffer I/O error on device sda1, logical block 123456
Ошибка появляется при доступе к файлам, монтировании разделов или запуске программ, требующих чтения/записи. Система может перевести файловую систему в режим «только чтение» или зависнуть при интенсивных операциях ввода-вывода.
Причины возникновения
- Повреждённые сектора (bad blocks) на диске или SSD, из-за которых контроллер не может прочитать или записать данные.
- Нарушение целостности файловой системы: повреждённые метаданные, битые иноды или разрушённые журналы (например, после внезапного отключения питания).
- Проблемы с оборудованием: неисправный кабель SATA/USB, плохой контакт, перегрев диска или выход из строя контроллера.
- Ошибки планировщика ввода-вывода или нехватка ресурсов (например, исчерпание очередей или тайм-ауты при работе по сети через iSCSI/NFS).
- Некорректное извлечение съёмных носителей или принудительное размонтирование во время активных операций записи.
Способы решения
Способ 1: Собрать логи и определить проблемное устройство
Узнайте, с каким устройством связана ошибка. Просмотрите последние сообщения ядра:
dmesg | grep -i 'error\|I/O\|fail'
journalctl -k --since '1 hour ago' | grep -i 'error\|I/O'
Найдите строки с указанием устройства, например sda, nvme0n1 или их разделов. Это поможет точнее направить дальнейшие проверки.
Способ 2: Проверить состояние диска через SMART
Если диск поддерживает SMART, запросите его атрибуты:
sudo smartctl -a /dev/sdX
sudo smartctl -t short /dev/sdX
Обратите внимание на:
- Reallocated_Sector_Ct — переназначенные сектора;
- Current_Pending_Sector — сектора, ожидающие замены;
- Offline_Uncorrectable — неисправимые ошибки.
Если счётчики растут, возможно, диск требует замены.
Способ 3: Проверить и восстановить файловую систему
Отмонтируйте раздел, если он был смонтирован:
sudo umount /dev/sdXY
Запустите проверку с автоматическим исправлением:
sudo fsck -y /dev/sdXY
Если fsck сообщает о повреждённом суперблоке, используйте резервный. Для ext2/3/4 сначала узнайте доступные суперблоки:
sudo mke2fs -n /dev/sdXY
Затем восстановите, указав резервный суперблок, например 32768:
sudo fsck -y -b 32768 /dev/sdXY
Способ 4: Проверить диск на битые сектора
Поиск и маркировка битых блоков может вернуть доступ к данным. Для ext2/3/4 используйте badblocks в режиме чтения (безопасно, но долго):
sudo badblocks -v /dev/sdXY > /tmp/badblocks.txt
Затем добавьте найденные блоки в таблицу плохих секторов файловой системы:
sudo fsck -l /tmp/badblocks.txt /dev/sdXY
Для других ФС используйте встроенные утилиты (например, xfs_repair для XFS), но учтите, что XFS не поддерживает badblocks напрямую — в первую очередь полагайтесь на замену диска при аппаратных сбоях.
Способ 5: Временно перемонтировать в режиме только чтения и спасти данные
Если диск нестабилен, но вам нужны данные, перемонтируйте раздел в режиме только чтения:
sudo mount -o remount,ro /dev/sdXY /точка/монтирования
Скопируйте важные данные на здоровый носитель:
sudo rsync -a /точка/монтирования/ /путь/к/резервному/диску/
После копирования отмонтируйте раздел и приступайте к проверке или замене диска.
Профилактика
- Регулярно проверяйте SMART-атрибуты дисков с помощью
smartctlи настраивайте уведомления при росте критических счётчиков. - Используйте ИБП или источники бесперебойного питания, чтобы избежать внезапных отключений, особенно для серверов.
- Не отключайте питание или извлекайте съёмные носители во время активных операций записи.
- Периодически создавайте резервные копии важных данных и проверяйте их на читаемость.
- Следите за температурой дисков (через
smartctl -Aилиhddtemp) и обеспечивайте достаточное охлаждение.