Python导致:IOError:[Errno 28]设备上没有剩余空间:'/results/32766.html';在具有大量空间的磁盘上
我正在运行导致上述错误的Python脚本。不寻常的是,这个脚本运行在不同的机器上,没有任何问题 区别在于,在导致问题的机器上,我正在向外部硬盘驱动器写入数据。为了让事情变得更奇怪,这个脚本已经在有问题的机器上运行,并且已经编写了30000多个文件 一些相关信息(导致错误的代码): 证明有足够的空间:Python导致:IOError:[Errno 28]设备上没有剩余空间:'/results/32766.html';在具有大量空间的磁盘上,python,filesystems,hard-drive,Python,Filesystems,Hard Drive,我正在运行导致上述错误的Python脚本。不寻常的是,这个脚本运行在不同的机器上,没有任何问题 区别在于,在导致问题的机器上,我正在向外部硬盘驱动器写入数据。为了让事情变得更奇怪,这个脚本已经在有问题的机器上运行,并且已经编写了30000多个文件 一些相关信息(导致错误的代码): 证明有足够的空间: 10:38@lorax:~/econ/estc/bin$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1
10:38@lorax:~/econ/estc/bin$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.0G 5.3G 3.3G 63% /
none 495M 348K 495M 1% /dev
none 500M 164K 500M 1% /dev/shm
none 500M 340K 500M 1% /var/run
none 500M 0 500M 0% /var/lock
none 9.0G 5.3G 3.3G 63% /var/lib/ureadahead/debugfs
/dev/sdc10 466G 223G 244G 48% /media/cavalry
我尝试过的一些事情:
- 将写入路径更改为直接位置,而不是通过链接
- 重新启动机器
- 卸下并重新安装驱动器
f.write
期间发生,但也可以在open
上、在f.flush
上甚至在f.close
上发生。它发生的位置为它发生的原因提供了重要线索–如果它发生在open
上,没有足够的空间为条目写入元数据,如果它发生在f.write
、f.flush
或f.close
期间,则没有足够的磁盘空间,或者您已经超过了最大文件大小
如果给定目录中的文件系统是vfat
,那么您将在大约相同的时间达到最大文件限制。限制应该是2^16个目录条目,但是如果我没有记错的话,其他一些因素可能会影响它(例如,一些文件需要多个条目)
最好避免在一个目录中创建这么多文件。很少有文件系统能够轻松地处理如此多的目录条目。除非你确信文件系统能很好地处理目录中的许多文件,否则你可以考虑另一种策略(例如创建更多的目录)。
另外,不要相信剩余的磁盘空间——有些文件系统为root用户保留了一些空间,而另一些文件系统错误地计算了可用空间,并给出了一个不正确的数字 事实证明,对我来说,最好的解决方案就是重新格式化驱动器。重新格式化后,所有这些问题都不再是问题。尝试删除临时文件
cd /tmp/
rm -r *
在我的例子中,当我运行df-I时,它会显示我的索引节点已满,然后我必须删除一些小文件或文件夹。否则,一旦inode变满,它将不允许我们创建文件或文件夹 您只需删除尚未占用全部空间但负责填充索引节点的文件或文件夹。运行“export TEMPDIR=/someDir”,其中someDir是除/tmp以外的有效目录。 在运行python命令之前,在提示符下运行此命令。在我的例子中,是“pip安装rasa[spacy]”,这是早些时候失败的 export命令允许您将指定的目录临时用作temp dir
sudo du-x-h/| sort-h | tail-40
/tmp
或/home/user\u name/.cache
文件夹占用大量内存,请从这些文件夹中删除。您可以通过运行sudorm-R/path/to/folder
步骤2概述了要删除的常见文件夹(
/tmp
和/home/user\u name/.cache
)。如果在运行第一个命令时返回其他结果,显示您在其他位置使用了大量内存,我建议在从这些位置删除时要更加小心。我遇到了类似的问题。上面删除/tmp目录的解决方案对我很有用
我将/tmp目录移动到用户的主目录,并使用pip install--user…
命令执行TMPDIR环境设置,而不是使用默认的/tmp位置,在该位置服务帐户可能没有完全访问权限(如果遵循最佳实践,并且没有使用sudo安装Python软件包)
我在上面遇到了空间不足的问题,正如上面的回答中提到的,这很可能是因为创建了太多文件/目录,而实际上并没有耗尽卷存储空间。我的解决方案是删除/home/$USER/tmp目录,并在每次连续部署管道运行时重新创建它
rm-rf/tmp
什么样的文件系统是/media/cavalry
?也许您可以发布/proc/mounts
中的相关行。您只是用完了inode吗?如果您包含完整的回溯(错误发生在哪一行?),文件系统类型和空闲inode计数(df-i
),这将非常有用。在这种情况下,我怀疑文件系统是vfat
,并且您已经超过了目录中的最大文件数。@Rosh-+1-请注意文件名是32766-该数字会引发警报:)顺便说一句,对于32768个目录条目,您应该将注释移到answers32766+“+”。嗯…@Rosh是的,没有更多的索引节点了。有趣。Rosh如果你把你的评论贴到一个答案上,我可以把它列为选择。但我也在想我能做些什么来纠正这个问题,从哪里可以获得更多关于vfat系统中inode的信息。谢谢首先,这是在“开放”线上发生的。第二,我想用我的最后一句话来发表这篇文章:文件系统Inodes IUsed IFree IUse%Mounted on/dev/sdc10
10:38@lorax:~/econ/estc/bin$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.0G 5.3G 3.3G 63% /
none 495M 348K 495M 1% /dev
none 500M 164K 500M 1% /dev/shm
none 500M 340K 500M 1% /var/run
none 500M 0 500M 0% /var/lock
none 9.0G 5.3G 3.3G 63% /var/lib/ureadahead/debugfs
/dev/sdc10 466G 223G 244G 48% /media/cavalry
cd /tmp/
rm -r *