#Что означает ошибка
disk I/O error
Ошибка ввода-вывода: нехватка места, проблемы диска или сетевая ФС. Проверьте место, права и целостность PRAGMA integrity_check.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет места | df -h или df -i показывает заполненный том | Освободить место без удаления файлов базы |
| Сетевая ФС | База открыта на NFS/SMB, записи и блокировки нестабильны | Использовать локальный диск сервера |
| Сбой диска | Журнал ОС фиксирует I/O-ошибки устройства | Сохранить данные и проверить накопитель |
| Права на temp | Каталог не позволяет создать журнальный файл | Проверить права сервисной учётной записи |
#Пошаговое решение
- Остановите запись и сделайте безопасную копию
SQLITE_IOERRозначает проблему обращения к файлу или устройству, а не обязательно порчу схемы. Если приложение пишет в базу, сначала остановите его штатно и убедитесь, что нет активных подключений. Сделайте резервную копию согласованным способом: через SQLite API backup или команду.backup backup.dbв утилитеsqlite3при доступной базе. В режиме WAL не копируйте один файл.db, игнорируя соседний-wal: в нём могут оставаться неподтверждённые в основном файле страницы. - Проверьте место, файловую систему и праваНа Linux откройте терминал сервера и выполните
df -hиdf -iдля проверки свободных блоков и inode; командойls -ldпроверьте права каталога с базой, потому что SQLite создаёт рядом временные и журнальные файлы. На Windows откройте Проводник → «Этот компьютер» и проверьте свободное место на нужном диске и доступность каталога для учётной записи службы. Если системный журнал фиксирует I/O-ошибки или SMART сообщает сбои, прекратите запись и сначала спасайте данные. - Проверьте целостность на копии и устраните источникНа рабочей копии выполните
sqlite3 backup.db "PRAGMA integrity_check;"— нормальный выводok. При ошибках не запускайте бесконтрольное восстановление на единственной базе: проверьте последнюю рабочую резервную копию, состояние носителя и версию SQLite. На сетевых и синхронизируемых каталогах файловые блокировки могут работать ненадёжно; при возможности перенесите базу на локальный диск сервера, согласовав остановку приложения и путь подключения. - Верните приложение к работе с контролем результатаПосле устранения нехватки места или неисправного хранилища запустите приложение и повторите чтение и запись небольшой тестовой записи, не нарушающей структуру данных. Если
disk I/O errorповторяется, соберите расширенный код SQLite (SQLITE_IOERR_*), точное имя файла, путь, журналы ОС и сведения о файловой системе. Не удаляйте вручную-wal,-shmи файл базы для «исправления».
#Если проблема осталась
Если «SQLite: disk I/O error» повторяется, сохраните время, состояние подключения и точный текст ошибки. Не меняйте сразу несколько настроек — иначе станет трудно понять, какое действие повлияло на результат.