Jupyter笔记本:(操作错误('磁盘I/O错误',))

5

在运行现有的Jupyter笔记本文件时,我遇到了以下错误:

The history saving thread hit an unexpected error (OperationalError('disk I/O error',)).History will not be written to the database.

然而,尽管如此,在笔记本中剩余的代码在这之后能正常执行。但是,当我试图创建一个新的笔记本文件时,这个错误不让我创建它,我会收到以下错误:

Error while saving file: python_notebook_ollie/Untitled2.ipynb disk I/O error
Traceback (most recent call last):
  File "/work/ollie/muali/miniconda3/lib/python3.6/site-packages/notebook/services/contents/filemanager.py", line 421, in save
    self.check_and_sign(nb, path)
  File "/work/ollie/muali/miniconda3/lib/python3.6/site-packages/notebook/services/contents/manager.py", line 440, in check_and_sign
    self.notary.sign(nb)
  File "/work/ollie/muali/miniconda3/lib/python3.6/site-packages/nbformat/sign.py", line 449, in sign
    self.store.store_signature(signature, self.algorithm)
  File "/work/ollie/muali/miniconda3/lib/python3.6/site-packages/nbformat/sign.py", line 207, in store_signature
    if not self.check_signature(digest, algorithm):
  File "/work/ollie/muali/miniconda3/lib/python3.6/site-packages/nbformat/sign.py", line 241, in check_signature
    self.db.commit()
sqlite3.OperationalError: disk I/O error
[W 15:08:48.093 NotebookApp] Unexpected error while saving file: python_notebook_ollie/Untitled2.ipynb disk I/O error
[E 15:08:48.094 NotebookApp] {
  "Host": "localhost:15695",
  "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0",
  "Accept": "application/json, text/javascript, */*; q=0.01",
  "Accept-Language": "en-US,en;q=0.5",
  "Accept-Encoding": "gzip, deflate",
  "Referer": "http://localhost:15695/notebooks/python_notebook_ollie/Traj_case_study.ipynb",
  "Content-Type": "application/json",
  "X-Xsrftoken": "2|96ae1fed|bde68f8333dd4b46b900b02246747fa4|1520496687",
  "X-Requested-With": "XMLHttpRequest",
  "Content-Length": "19",
  "Cookie": "_xsrf=2|96ae1fed|bde68f8333dd4b46b900b02246747fa4|1520496687; username-localhost-15695=\"2|1:0|10:1520518043|24:username-localhost-15695|44:NjE5MWZlMWIzMjdmNGE2N2FlZmQ3NmE3NzRlNmNiZmQ=|8062f4c541e5dcef0d8b4a2d7e75cc59f1d27197ac4633b9da64b7bb94aae7a4\"",
  "Connection": "keep-alive"
}  

我尝试遵循这个答案并删除了history.sqlite文件,但是仍然出现磁盘I/O错误。
一些github上的帖子说基于NFS的挂载可能会创建一些问题,但在过去它一直正常工作,直到我升级了matplotlib软件包。我现在已经降级了该软件包,但仍无法摆脱这个错误。
编辑:打开.ipynb文件时终端显示的第一个错误是:
The signatures database cannot be opened; maybe it is corrupted or  

encrypted. You may need to rerun your notebooks to ensure that they are trusted to run Javascript. The old signatures database has been renamed to ~/.local/share/jupyter/nbsignatures.db.bak and a new one has been created.

我发现这个链接与错误相关。可能是因为在基于NFS的系统上sqlite锁定没有正常工作而导致了错误。另外,我猜测触发器是当我试图通过我的电脑创建一个隧道时,因此同一笔记本文件在2台机器上运行?尽管如此,我仍然不明白如何摆脱这个问题。 - Light_B
4个回答

5
我成功地解决了问题,现在分享一下我所做的事情。 我认为问题的原因是SQLite锁定在NFS文件系统上不可靠,可以在此链接中了解更多信息。
答案也在那里给出,我将在此详细说明步骤:
基本上,您需要创建一个新的ipython配置或修改现有的配置。配置文件名为ipython_config.py,可以在~/.ipython/profile_default中找到。
如果默认情况下不存在配置文件,则可以在主目录中键入以下内容来创建它。
ipython profile create 

这将会在 ~/.ipython/profile_default 下创建配置文件。 打开 ipython_config.py 并添加以下行:
c = get_config() #gets the configuration
c.HistoryManager.hist_file='/tmp/ipython_hist.sqlite' #changes history file writing to tmp folder

保存并重新打开内核,现在应该可以工作了。有关修改配置的更多详细信息,请单击此处。如果配置文件已经存在,则只需在终端中键入即可。
ipython --HistoryManager.hist_file='/tmp/ipython_hist.sqlite'

这也应该可以工作。


2
检查您的家庭磁盘配额,也许已经满了。
对于我来说,我在一个有限制的家庭配额服务器上运行jupyter。发现随着每天使用pip,~/.cache/pip变得非常大。也许我没有空间写入我的主目录。
所以我删除了~/.cache/pip,然后重新启动jupyter。一切正常。

1
我按照上述步骤进行操作,但不确定出了什么问题,但它完全瘫痪了Jupyter lab(print(“hello”)需要大约30秒才能呈现)。
在我的情况下,我认为最初的问题是由于历史记录损坏引起的(〜/ .ipython / profile_default / 有一个名为history-corrupt-*的文件,带有今天的时间戳)。 我通过删除Ankit的答案here中提到的〜/ .ipython / profile_default / history.sqlite来清除历史记录,并解决了问题。
注意:我还删除了上述过程中创建的config文件。

0
这可能解决问题。
pip cache purge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接