导致:IOError:[Errno 28]设备上没有剩余空间:磁盘上有很多空间的’../results/32766.html’

前端之家收集整理的这篇文章主要介绍了导致:IOError:[Errno 28]设备上没有剩余空间:磁盘上有很多空间的’../results/32766.html’前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在运行一个导致上述错误Python脚本.这个不寻常的事情是这个脚本在不同的机器上运行,没有任何问题.

不同的是在机器上导致我正在写入外部硬盘驱动器的问题.为了使事情甚至这个脚本,这个脚本已经在问题机器上运行,并且已经写入了超过30,000个文件.

一些相关信息(导致错误代码):

nPage = 0
while nPage != -1:
    for d in data:
        if len(d.contents) > 1:
            if '<script' in str(d.contents):
                l = str(d.contents[1])
                start = l.find('http://')
                end = l.find('>',start)
                out = get_records.openURL(l[start:end])
                print COUNT

                with open('../results/'+str(COUNT)+'.html','w') as f:
                    f.write(out)
                COUNT += 1

    nPage = nextPage(mOut,False)

我写的目录:

10:32@lorax:~/econ/estc/bin$ll ../
total 56
drwxr-xr-x 3 boincuser boincuser  4096 2011-07-31 14:29 ./
drwxr-xr-x 3 boincuser boincuser  4096 2011-07-31 14:20 ../
drwxr-xr-x 2 boincuser boincuser  4096 2011-08-09 10:38 bin/
lrwxrwxrwx 1 boincuser boincuser    47 2011-07-31 14:21 results -> /media/cavalry/server_backup/econ/estc/results//
-rw-r--r-- 1 boincuser boincuser 44759 2011-08-09 10:32 test.html

证明有足够的空间:

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

我尝试过的一些事情:

>将写入的路径更改为直接位置,而不是通过链接
>重新启动机器
>卸载并重新安装驱动器

解决方法

在任何情况下,ENOSPC(“设备上剩余空间”)错误都将被触发,因为缺少空间,任何地方无法将I / O操作的数据或元数据写入相关数据或元数据.这并不总是意味着磁盘空间 – 它可能意味着物理磁盘空间,逻辑空间(例如最大文件长度),特定数据结构或地址空间中的空间.例如,如果目录表(vfat)中没有空格,或没有剩余的任何索引节点,您可以获取它.它大概意味着“我找不到写下来的地方”.

特别是在Python中,这可能发生在任何写I / O操作中.它可能在f.write期间发生,但它也可能发生在open,f.flush甚至f.close上.发生的地方提供了一个至关重要的线索,因为它的确 – 如果发生在开放的时候,没有足够的空间来写入条目的元数据,如果它发生在f.write,f.flush或f.close那里没有足够的磁盘空间,或者您已超过最大文件大小.

如果给定目录中的文件系统是vfat,那么您将在与之相同的时间内达到最大文件限制.该限制应该是2 ^ 16个目录条目,但是如果我正确地回忆一些其他因素可能会影响它(例如一些文件需要多个条目).

最好避免在目录中创建这么多文件.很少的文件系统很容易处理这么多的目录条目.除非您确定文件系统与目录中的许多文件兼容,否则可以考虑另一策略(例如创建更多目录).

附:还不要相信剩余的磁盘空间 – 一些文件系统为root保留一些空间,而其他文件系统会计算可用空间,并给出一个不正确的数字.

猜你在找的HTML相关文章