Jupyter保存报错sqlite3.DatabaseError:数据库镜像损坏,求解及续算风险
问题
通过SSH连接两台由AFS共享存储的计算机,同时在两台设备上运行Jupyter Notebook,保存第一个笔记本时出现错误:Unexpected error while saving file: Untitled.ipynb database disk image is malformed。怀疑是对nbsignatures.db的并发写入导致,完整错误日志如下:
[W YYYY-MM-DD HH:MM:SS.SSS ServerApp] 500 PUT /api/contents/Untitled.ipynb?########## (127.0.0.1): Unexpected error while saving file: Untitled.ipynb database disk image is malformed [W YYYY-MM-DD HH:MM:SS.SSS ServerApp] wrote error: 'Unexpected error while saving file: Untitled.ipynb database disk image is malformed' Traceback (most recent call last): File "/nobackup/username/env_name/lib/python3.10/site-packages/jupyter_server/services/contents/filemanager.py", line 911, in save self.check_and_sign(nb, path) File "/nobackup/username/env_name/lib/python3.10/site-packages/jupyter_server/services/contents/manager.py", line 713, in check_and_sign self.notary.sign(nb) File "/nobackup/username/env_name/lib/python3.10/site-packages/nbformat/sign.py", line 477, in sign self.store.store_signature(signature, self.algorithm) File "/nobackup/username/env_name/lib/python3.10/site-packages/nbformat/sign.py", line 214, in store_signature if not self.check_signature(digest, algorithm): File "/nobackup/username/env_name/lib/python3.10/site-packages/nbformat/sign.py", line 241, in check_signature r = self.db.execute( sqlite3.DatabaseError: database disk image is malformed The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/nobackup/username/env_name/lib/python3.10/site-packages/tornado/web.py", line 1786, in _execute result = await result File "/nobackup/username/env_name/lib/python3.10/site-packages/jupyter_server/services/contents/handlers.py", line 266, in put await self._save(model, path) File "/nobackup/username/env_name/lib/python3.10/site-packages/jupyter_server/services/contents/handlers.py", line 191, in _save model = await ensure_async(self.contents_manager.save(model, path)) File "/nobackup/username/env_name/lib/python3.10/site-packages/jupyter_core/utils/__init__.py", line 189, in ensure_async result = await obj File "/nobackup/username/env_name/lib/python3.10/site-packages/jupyter_server/services/contents/largefilemanager.py", line 133, in save return await super().save(model, path) File "/nobackup/username/env_name/lib/python3.10/site-packages/jupyter_server/services/contents/filemanager.py", line 927, in save raise web.HTTPError(500, f"Unexpected error while saving file: {path} {e}") from e tornado.web.HTTPError: HTTP 500: Internal Server Error (Unexpected error while saving file: Untitled.ipynb database disk image is malformed) [E YYYY-MM-DD HH:MM:SS.SSS ServerApp] { "Host": "localhost:8080", "Accept": "*/*", "Referer": "http://localhost:8080/notebooks/Untitled.ipynb", "User-Agent": "Mozilla/5.0 (OS; CPU; rv:##.0) Gecko/######## Firefox/###.0" } [E YYYY-MM-DD HH:MM:SS.SSS ServerApp] 500 PUT /api/contents/Untitled.ipynb?########## (user_hash@127.0.0.1) ###.##ms referer=http://localhost:8080/notebooks/Untitled.ipynb
请问如何解决该问题?若我不保存该Jupyter Notebook,继续在其中进行计算是否会有问题?
解决方法
- 删除损坏的签名数据库:找到
nbsignatures.db文件(通常路径为~/.local/share/jupyter/nbsignatures.db),直接删除该文件。下次启动Jupyter时会自动重建新的数据库,可快速解决当前错误。 - 禁用笔记本签名功能:在Jupyter配置文件(
jupyter_server_config.py或jupyter_notebook_config.py)中添加以下配置,彻底关闭签名机制,从根源避免并发写入冲突:
若没有配置文件,可执行c.ContentsManager.signatures_enabled = Falsejupyter server --generate-config生成后再修改。 - 隔离签名数据库存储:确保两台机器的Jupyter使用独立的
nbsignatures.db文件,不要将该文件放在AFS共享目录下。可通过设置环境变量JUPYTER_DATA_DIR指向本地目录,让Jupyter将数据文件存储在本地而非共享存储中。
不保存继续计算的风险
- 短期计算不受影响:当前计算过程不会被保存错误干扰,Jupyter会将运行状态暂存于内存,只要服务器不重启、连接不中断,计算可正常进行。
- 数据丢失风险极高:一旦出现网络中断、服务器崩溃、Jupyter进程意外退出等情况,所有未保存的代码、运行结果、变量都会直接丢失,无法恢复。
- 工作进度无持久化记录:不保存的话,代码修改、分析步骤等内容没有持久化存储,后续回溯或继续工作会非常困难。
内容的提问来源于stack exchange,提问作者olivarb
相关产品推荐
相关产品推荐

