Sto eseguendo uno Python che causa l'errore sopra. La cosa insolita è che questo script è in esecuzione su una macchina diversa e non ha problemi.
La differenza è che sulla macchina sta causando i problemi che sto scrivendo su un disco rigido esterno. Per rendere le cose ancora più strane, questo script è stato eseguito sulla macchina problematica e ha già scritto oltre 30.000 file.
Alcune informazioni rilevanti (il codice che causa l'errore):
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)
La directory in cui sto scrivendo:
10:[email protected]:~/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
Prova che c'è abbastanza spazio:
10:[email protected]:~/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
Alcune cose che ho provato:
Si scopre che la soluzione migliore per me qui è stata semplicemente riformattare l'unità. Una volta riformattati, tutti questi problemi non erano più problemi.
L'errore ENOSPC
("Spazio vuoto sul dispositivo") verrà attivato nella situazione qualsiasi in cui i dati o i metadati associati a un I/O l'operazione non può essere scritta da nessuna parte a causa della mancanza di spazio. Questo non significa sempre spazio su disco - potrebbe significare spazio fisico su disco, spazio logico (ad es. Lunghezza massima del file), spazio in una determinata struttura di dati o spazio di indirizzi. Ad esempio, puoi ottenerlo se non c'è spazio nella tabella delle directory (vfat) o non ci sono inode. Significa approssimativamente "Non riesco a trovare dove scrivere questo".
Soprattutto in Python, ciò può accadere su qualsiasi operazione di I/O di scrittura. Può succedere durante f.write
, ma può succedere anche su open
, su f.flush
e anche su f.close
. Dove è successo fornisce un indizio vitale per la ragione per cui è successo: se è successo su open
non c'era abbastanza spazio per scrivere i metadati per la voce, se è successo durante f.write
, f.flush
o f.close
non c'era abbastanza spazio su disco o hai superato la dimensione massima del file.
Se il filesystem nella directory specificata è vfat
, raggiungi il limite massimo di file nello stesso momento in cui lo hai fatto. Il limite dovrebbe essere 2 ^ 16 voci della directory, ma se ricordo bene alcuni altri fattori possono influenzarlo (ad esempio alcuni file richiedono più di una voce).
Sarebbe meglio evitare di creare così tanti file in una directory. Pochi filesystem gestiscono facilmente così tante voci di directory. A meno che tu non sia sicuro che il tuo filesystem gestisca bene molti file in una directory, puoi prendere in considerazione un'altra strategia (ad es. Creare più directory).
Post scriptum Inoltre, non fidarti dello spazio su disco rimanente: alcuni file system riservano spazio per root e altri calcolano erroneamente lo spazio libero e ti danno un numero che non è vero.
Prova a eliminare i file temporanei
cd /tmp/
rm -r *
Nel mio caso, quando eseguo df -i mi mostra che il mio numero di inode è pieno e quindi devo eliminare alcuni dei piccoli file o cartelle. Altrimenti non ci consentirà di creare file o cartelle quando gli inode saranno pieni.
Tutto quello che devi fare è eliminare i file o le cartelle che non hanno occupato tutto lo spazio ma sono responsabili del riempimento degli inode.