risposta-alla-domanda-sullo-sviluppo-web-bd.com

Python causa: IOError: [Errno 28] Nessuno spazio sul dispositivo: '../results/32766.html' sul disco con molto spazio

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:

  • Modifica del percorso della scrittura nella posizione diretta anziché passare attraverso il collegamento
  • Riavvio della macchina
  • Smontaggio e rimontaggio dell'unità
25
josh

Si scopre che la soluzione migliore per me qui è stata semplicemente riformattare l'unità. Una volta riformattati, tutti questi problemi non erano più problemi.

8
josh

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.

41
Rosh Oxymoron

Prova a eliminare i file temporanei

cd /tmp/
rm -r *
12
user309866

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.

2
ARKhan