jos*_*osh 29 python filesystems hard-drive
我正在运行导致上述错误的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)
Run Code Online (Sandbox Code Playgroud)
我正在写的目录:
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
Run Code Online (Sandbox Code Playgroud)
证明有足够的空间:
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
Run Code Online (Sandbox Code Playgroud)
我试过的一些事情:
Ros*_*ron 44
该ENOSPC错误("左设备上没有空间")将在触发任何在该数据或情况的元数据与I/O操作相关联,不能在任何地方,因为缺乏空间写下来.这并不总是意味着磁盘空间 - 它可能意味着物理磁盘空间,逻辑空间(例如最大文件长度),特定数据结构或地址空间中的空间.例如,如果目录表(vfat)中没有空格或者没有任何inode,则可以获取它.它大致意味着"我找不到写下来的地方".
特别是在Python中,这可能发生在任何写入I/O操作上.它可能发生在f.write,但它也可能发生在open,f.flush甚至发生f.close.它发生的地方提供了一个至关重要的线索 - 如果它发生在open那里没有足够的空间来写入条目的元数据,如果它发生在期间f.write,f.flush或者f.close没有足够的磁盘空间或你已经超出了最大文件大小.
如果给定目录中的文件系统是vfat您在大约同一时间达到最大文件限制.限制应该是2 ^ 16个目录条目,但是如果我没记错的话,其他一些因素会影响它(例如,某些文件需要多个条目).
最好避免在目录中创建这么多文件.很少有文件系统能够轻松处理这么多目录条目.除非您确定文件系统处理目录中的许多文件,否则您可以考虑另一种策略(例如,创建更多目录).
PS也不信任剩余的磁盘空间 - 一些文件系统为root保留了一些空间,而其他文件系统错误地计算了可用空间并给你一个不正确的数字.
小智 12
尝试删除临时文件
cd /tmp/
rm -r *
Run Code Online (Sandbox Code Playgroud)
jos*_*osh 10
事实证明,对我来说最好的解决方案是重新格式化驱动器.一旦重新格式化,所有这些问题都不再是问题.
sudo du -x -h / | sort -h | tail -40/tmp或文件夹中删除。/home/user_name/.cache你可以通过运行来做到这一点sudo rm -R /path/to/folder步骤 2 概述了要从中删除的相当常见的文件夹 (/tmp和/home/user_name/.cache)。如果您在运行第一个命令时得到其他结果,显示您有大量内存正在其他地方使用,我建议从这些位置删除时要更加谨慎。
就我而言,当我运行df -i 时,它显示我的 inode 数已满,然后我必须删除一些小文件或文件夹。否则,一旦 inode 已满,我们将无法创建文件或文件夹。
您所要做的就是删除尚未占用全部空间但负责填充 inode 的文件或文件夹。