上記のエラーの原因となっている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に関連付けられているany状況でトリガーされますスペース不足のため、操作をどこにも書き込めません。これは常にディスクスペースを意味するわけではありません。物理ディスクスペース、論理スペース(最大ファイル長など)、特定のデータ構造内のスペース、またはアドレススペースを意味する場合があります。たとえば、ディレクトリテーブル(vfat)にスペースがない場合、またはiノードが残っていない場合に取得できます。大まかに言うと、「これを書き留める場所が見つからない」ということです。
特にPythonでは、これは書き込みI/O操作で発生する可能性があります。 f.write
中に発生する可能性がありますが、open
、f.flush
、さらにはf.close
でも発生する可能性があります。 open
で発生した場合、f.write
、f.flush
、またはf.close
の間に発生した場合、エントリのメタデータを書き込むための十分なスペースがなかった場合、発生した場所は重大な手がかりを提供します。十分なディスク容量が残っているか、最大ファイルサイズを超えています。
指定されたディレクトリのファイルシステムがvfat
である場合、あなたが行ったのとほぼ同時に最大ファイル制限に達します。制限は2 ^ 16のディレクトリエントリと想定されていますが、正しく思い出せば、他のいくつかの要因が影響する可能性があります(たとえば、複数のエントリが必要なファイルもあります)。
ディレクトリに非常に多くのファイルを作成しないようにするのが最善です。非常に多くのディレクトリエントリを簡単に処理できるファイルシステムはほとんどありません。ファイルシステムがディレクトリ内の多くのファイルを適切に処理することが確実でない限り、別の戦略を検討できます(たとえば、ディレクトリをさらに作成します)。
追伸また、残りのディスクスペースを信頼しないでください。一部のファイルシステムはルート用に一部のスペースを予約し、他は空きスペースを誤って計算し、正しくない数値を提供します。
一時ファイルを削除してみてください
cd /tmp/
rm -r *
私の場合、df -iを実行すると、inodeの数がいっぱいになり、小さなファイルまたはフォルダーの一部を削除する必要があることがわかります。そうしないと、inodeがいっぱいになるとファイルやフォルダーを作成できなくなります。
あなたがしなければならないのは、フルスペースを占有していないが、iノードを埋める責任があるファイルまたはフォルダを削除することです。