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

执行SQLite VACUUM时报错database or disk full(13) 求助

SQLite VACUUM报错“磁盘满(13)”的排查与解决
  • 检查文件系统预留空间
    多数Linux文件系统(如ext4)会为root用户预留5%的磁盘空间,普通用户无法访问这部分资源。可通过以下命令查看并调整:

    • 查看预留配置:tune2fs -l /dev/your-disk-device | grep 'Reserved block count'
    • 调整预留比例(比如改为1%):tune2fs -m 1 /dev/your-disk-device
  • 确认临时文件实际占用
    VACUUM操作所需临时空间可能大于原数据库体积,因为它会生成完整的数据库副本,再加上日志等额外开销。可通过以下方式验证:

    1. 找到sqlite3进程PID:ps aux | grep sqlite3
    2. 查看临时文件大小:lsof -p [进程PID] | grep /run/media/ghostdog/data/datadir
  • 排查磁盘真实可用空间

    • 检查是否存在已删除但未释放的文件(被进程占用):lsof | grep deleted,若有则重启对应进程释放空间
    • 用du -sh /run/media/ghostdog/data/统计目录实际占用,对比df -kh的结果,确认空间计算是否一致
  • 调整VACUUM的临时文件策略

    • 若临时目录问题无法解决,可尝试不指定SQLITE_TMPDIR,让SQLite在数据库所在目录生成临时文件(需确保原目录有足够空间)
    • 执行VACUUM前设置WAL模式,减少空间需求:
      PRAGMA journal_mode = WAL;
      VACUUM;
      
  • 替代方案:导出再导入数据
    对于超大数据库,直接用导出导入替代VACUUM,避免临时文件空间瓶颈:

    # 导出数据库内容到SQL文件
    sqlite3 database.db .dump > backup.sql
    # 创建新数据库并导入数据
    sqlite3 new_database.db < backup.sql
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:12:11