我正在运行一个导致上述错误的Python脚本。不寻常的是,这个脚本运行在不同的机器上,没有问题。
不同的是,在导致我写入外部硬盘时出现问题的计算机上。更奇怪的是,这个脚本在问题机器上运行,已经写了30000多个文件。
一些相关信息(导致错误的代码):
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
我试过的一些事情:
尝试删除临时文件
当与I/O操作相关联的数据或元数据由于缺少空间而无法写入任何位置时,
ENOSPC
(“设备上没有剩余空间”)错误将在任何情况下触发。这并不总是意味着磁盘空间——它可能意味着物理磁盘空间、逻辑空间(例如最大文件长度)、特定数据结构中的空间或地址空间。例如,如果目录表(vfat)中没有空间,或者没有任何索引节点,则可以获取它。大致意思是“我找不到写这件事的地方”。特别是在Python中,任何写I/O操作都可能发生这种情况。它可以发生在
f.write
期间,但也可以发生在open
、f.flush
甚至f.close
上。它发生的位置为它发生的原因提供了一个重要的线索-如果它发生在open
上,则没有足够的空间为条目写入元数据,如果它发生在f.write
、f.flush
或f.close
期间,则没有足够的磁盘空间,或者您已经超过了最大文件大小。如果给定目录中的文件系统是
vfat
,那么您将在达到最大文件限制的同时达到最大文件限制。限制应该是2^16个目录条目,但如果我正确地回忆起来,其他一些因素可能会影响它(例如,某些文件需要多个条目)。最好避免在一个目录中创建这么多文件。很少有文件系统能轻松地处理这么多目录项。除非您确定您的文件系统能够很好地处理目录中的许多文件,否则您可以考虑另一种策略(例如创建更多目录)。
另外,p.S.也不信任剩余的磁盘空间——一些文件系统为根用户保留了一些空间,而另一些文件系统错误地计算了可用空间,并给了你一个不正确的数字。
对我来说最好的解决办法就是重新格式化硬盘。一旦重新格式化,所有这些问题就不再是问题了。
相关问题 更多 >
编程相关推荐