You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS 8升级至Rocky Linux 9后SQLite提交报错:DBD::SQLite::db commit failed: disk I/O error

解决Rocky Linux 9下SQLite commit时的磁盘I/O错误

以下是针对该问题的排查和修复建议:

  • 检查SELinux上下文限制
    Rocky Linux 9的SELinux默认配置比CentOS 8更严格,即使文件权限正常,SELinux上下文不匹配也会触发I/O错误。

    1. 临时关闭SELinux测试:setenforce 0,重新运行系统验证是否还报错。
    2. 若临时关闭后问题解决,为SQLite文件设置正确的SELinux上下文:chcon -t sqlite_db_t /path/to/your/database.db
    3. 如需永久生效,执行semanage fcontext -a -t sqlite_db_t "/path/to/your/database.db",再运行restorecon -v /path/to/your/database.db
  • 验证文件系统挂载选项
    检查数据库文件所在分区的挂载参数,是否存在限制写入的配置:

    1. 执行mount查看分区挂载信息,确认没有ro(只读)、noexec等影响写入的参数。
    2. 若使用XFS文件系统,可尝试临时重新挂载分区:mount -o remount,rw /mount/point,测试是否恢复正常。
  • 核对SQLite及DBD::SQLite版本兼容性
    Rocky Linux 9自带的SQLite版本与CentOS 8差异较大,可能导致DBD::SQLite模块与系统SQLite库不兼容:

    1. 查看系统SQLite版本:sqlite3 --version
    2. 查看Perl的DBD::SQLite版本:perl -MDBD::SQLite -e 'print $DBD::SQLite::VERSION'
    3. 若版本不匹配,重新编译安装DBD::SQLite:cpanm DBD::SQLite(需提前安装编译依赖:gcc、make、sqlite-devel)
  • 检查数据库文件完整性
    系统升级过程中可能导致数据库文件损坏:

    1. 执行完整性检查:sqlite3 /path/to/database.db "PRAGMA integrity_check;"
    2. 若检查出错误,重建数据库:sqlite3 /path/to/database.db ".recover" > new_database.db,替换原文件后测试。
  • 验证目录读写权限及临时文件创建权限
    SQLite在commit时会在数据库文件同目录创建临时日志文件(如.db-journal或-wal文件),需确保目录有读写权限:

    1. 检查目录权限:ls -ld /path/to/directory,确认运行系统的用户对该目录有w权限。
    2. 手动在目录创建文件测试:touch /path/to/directory/test_file,确认可正常写入。
  • 尝试禁用WAL日志模式
    Rocky Linux 9的SQLite默认可能启用WAL模式,部分环境下存在兼容性问题:

    1. 进入SQLite交互模式修改日志模式:sqlite3 /path/to/database.db "PRAGMA journal_mode=DELETE;"
    2. 确认返回结果为delete后,重新运行系统测试commit功能。

内容的提问来源于stack exchange,提问作者fvlasie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:40:24