database system_error ai_generated partial

sqlite3.DatabaseError: disk I/O error

ID: database/sqlite-disk-i-o-error

Also available as: JSON · Markdown · 中文
75%Fix Rate
86%Confidence
1Evidence
2024-09-05First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
SQLite 3.40 active
SQLite 3.41 active
SQLite 3.42 active
Python 3.11 active
Python 3.12 active

Root Cause

SQLite encountered a filesystem-level read or write failure, often due to disk corruption, insufficient permissions, or a full filesystem.

generic

中文

SQLite遇到了文件系统级别的读取或写入失败,通常是由于磁盘损坏、权限不足或文件系统已满。

Official Documentation

https://www.sqlite.org/rescode.html#ioerr

Workarounds

  1. 70% success Check filesystem health using fsck (Linux) or chkdsk (Windows). Example: sudo fsck /dev/sda1 or chkdsk C: /f. Then attempt to recover the database using sqlite3 .recover.
    Check filesystem health using fsck (Linux) or chkdsk (Windows). Example: sudo fsck /dev/sda1 or chkdsk C: /f. Then attempt to recover the database using sqlite3 .recover.
  2. 85% success If the error is due to permissions, ensure the SQLite process has write access to the database file and its directory. Example: chmod 664 /path/to/database.db && chown www-data:www-data /path/to/database.db
    If the error is due to permissions, ensure the SQLite process has write access to the database file and its directory. Example: chmod 664 /path/to/database.db && chown www-data:www-data /path/to/database.db
  3. 75% success Use SQLite's built-in integrity check and repair: sqlite3 database.db "PRAGMA integrity_check;" then backup and restore: sqlite3 database.db ".backup backup.db"
    Use SQLite's built-in integrity check and repair: sqlite3 database.db "PRAGMA integrity_check;" then backup and restore: sqlite3 database.db ".backup backup.db"

中文步骤

  1. Check filesystem health using fsck (Linux) or chkdsk (Windows). Example: sudo fsck /dev/sda1 or chkdsk C: /f. Then attempt to recover the database using sqlite3 .recover.
  2. If the error is due to permissions, ensure the SQLite process has write access to the database file and its directory. Example: chmod 664 /path/to/database.db && chown www-data:www-data /path/to/database.db
  3. Use SQLite's built-in integrity check and repair: sqlite3 database.db "PRAGMA integrity_check;" then backup and restore: sqlite3 database.db ".backup backup.db"

Dead Ends

Common approaches that don't work:

  1. Delete the database file and recreate it from scratch. 90% fail

    This causes data loss and does not address the underlying disk issue; the new file may also get corrupted if the root cause persists.

  2. Increase the SQLite cache size to reduce disk writes. 80% fail

    Cache size adjustments do not fix physical disk I/O errors; they only affect performance, not reliability.