IOError: Kein Speicherplatz mehr auf dem Gerät - welches Gerät?
Bin ich den Upload einer kleinen Datei (8.5 Mb) auf eine Flasche test-server.
Wenn das hochladen der Datei abgeschlossen, meldet der server:
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/wtforms/form.py",
line 212, in __call__
return type.__call__(cls, *args, **kwargs)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/flask_wtf/form.py", line 49, in __init__
formdata = request.form
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/local.py",
line 338, in __getattr__
return getattr(self._get_current_object(), name)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/utils.py",
line 71, in __get__
value = self.func(obj)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/wrappers.py",
line 484, in form
self._load_form_data()
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/flask/wrappers.py",
line 165, in _load_form_data
RequestBase._load_form_data(self)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/wrappers.py",
line 356, in _load_form_data
mimetype, content_length, options)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/formparser.py",
line 193, in parse
content_length, options)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/formparser.py",
line 99, in wrapper
return f(self, stream, *args, **kwargs)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/formparser.py",
line 210, in _parse_multipart
form, files = parser.parse(stream, boundary, content_length)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/formparser.py",
line 520, in parse
return self.cls(form), self.cls(files)
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/datastructures.py",
line 373, in __init__
for key, value in mapping or ():
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/formparser.py",
line 518, in <genexpr>
form = (p[1] for p in formstream if p[0] == 'form')
File "/home/ubuntu/.virtualenvs/eco_app/lib/python2.7/site-packages/werkzeug/formparser.py",
line 494, in parse_parts
_write(ell)
IOError: [Errno 28] No space left on device
Nun, der server hat auch genügend freien Speicherplatz - über 3Gb.
Habe ich mir angeschaut, die Werkzeug github repo zu versuchen, herauszufinden, die Lage, das Werkzeug zu schreiben versucht, kann aber nicht, es aufzuspüren.
Habe ich auch überprüft tempfile.gettempdir() die gibt /var/tmp als temporären Datei-Verzeichnis, aber dieser Ordner ist praktisch leer, so dass ich nicht denke, dass das ist der Lage, die Schaffung der Frage.
Wie ich finde, das Gerät hat kein Platz?
- Haben Sie versucht, läuft
df -h
noch? - Yep. Das ist, wie ich weiß, dass es genügend freien Speicherplatz zur Verfügung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
@Tom Hunt ' s Kommentar auf dem richtigen Weg war.
Dieser unix-SE Antwort erklärt was passiert.
Ich gemounteten /tmp-Verzeichnis und folgte Nitesh Vorschlag:
und jetzt der Upload richtig funktioniert.
Wenn du eine shell auf dem server, versuchen Sie
df -h
und suchen Sie alle Einträge, die zeigenUse%
von 100%, oderAvail
weniger als die Dateigröße.Werkzeug speichert Dateien über einer bestimmten Größe im temp-Verzeichnis mit
tempfile.TemporaryFile()
, aber berücksichtigen, dass diese Dateien sind nicht verknüpfte für die Sicherheit. Sie sehen Sie nicht in der directory aufgelistet.tempfile.gettempdir()
ist die richtige Methode der Bestimmung des Verzeichnisses verwendet.Ihre
/var/tmp
Verzeichnis ist wahrscheinlich so konfiguriert, für eine kleinere partition. Überprüfen Sie mitdf -h
um zu sehen, ob die partition noch genügend Platz übrig. Sie müssen auch prüfen, für frei inodes, mitdf -i
.Könnte es auch sein, dass ein Prozess (vielleicht deine) hängt an solchen unverknüpfte Dateien zu lange und der Raum wurde nicht an das Betriebssystem zurückgegeben noch. Sie können überprüfen, für Prozesse, die auf halten, um gelöschte Dateien mit:
oder
/etc/fstab
zu zeigen, wie es sein kann, beschränkt?default_stream_factory
Haken hier. Sie können versuchen und sehen, wie groß eintempfile.TemporaryFile()
Objekt, das Sie erstellen können, eine interaktive Python-Eingabeaufforderung, aber an diesem Punkt ist dies ein server-Problem, nicht ein Python-Problem.Versuchen
df -i
, vielleicht gibt es keine freien inodes.EDIT:
weitere option ist, finden werkzeug pid, lass es sein, 777,
strace -p 777 &> /tmp/strace_log
No space left on device
Nachricht, es wird so sein wiewrite(1, "blah blah ..."..., 57) = -1 ENOSPC (No space left on device)
erste argument zu schreiben ist ein file-descriptoropen(... = X
syscall , dass X ist ein file-descriptor, der wird scheitern "schreiben" syscall SchrittZiemlich umständlich, ich weiß, aber das ist das Debuggen.