Python causant: IOError: [Errno 28] Aucun espace disponible sur le périphérique: '../results/32766.html' sur le disque avec beaucoup d'espace
Je suis en cours d'exécution d'un script en Python qui est à l'origine de l'erreur ci-dessus. L'insolite, c'est qu'un script est en cours d'exécution sur une machine différente, et est ne pas avoir de problèmes.
La différence est que sur la machine qui est à l'origine du problème je suis en train d'écrire sur un disque dur externe. Pour rendre les choses encore plus étranges de ce script est exécuté sur la machine et déjà écrit plus de 30 000 fichiers.
Certaines informations pertinentes (Le code qui est à l'origine de l'erreur):
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)
Le répertoire que je suis en train d'écrire à:
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
Preuve qu'il ya assez d'espace:
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
Certaines choses que j'ai essayé:
- Changer la trajectoire de l'écriture à l'emplacement au lieu de passer par le lien
- Le redémarrage de la machine
- Démonter et re-montage du lecteur
- Quel type de système de fichiers est
/media/cavalry
? Vous pourriez peut-être poster la ligne de/proc/mounts
. Vous êtes tout simplement en train d'i-noeuds? - Il serait utile si vous avez inclus plein traceback (sur la ligne à laquelle l'erreur s'est produite?), types de systèmes de fichiers et gratuit inode count (
df -i
). Dans ce cas, je soupçonne que le système de fichiers estvfat
et vous avez dépassé le nombre maximal de fichiers dans un répertoire. - voir que le nom de fichier est 32766 - que nombre déclenche des alarmes 🙂 btw, vous devez déplacer votre commentaire réponses
- 32766 + "." + ".." pour 32768 des entrées du répertoire. Hmm...
- Oui il n'y a pas plus d'inodes. Intéressant. Rosh si vous postez votre commentaire à la réponse que je puisse les énumérer que le choix. Mais je me demande aussi ce que je peux faire pour remédier à cela et où je peux obtenir un peu plus d'informations sur les inodes dans le système vfat. Merci!
- Ok, je voulais poster ce avec le dernier commentaire:<br>système de fichiers Inodes Utilisée IFree IUse% Monté sur <br>/dev/sdc10 0 0 0 - /médias/de la cavalerie<br> Semble étrange que l'on dit il n'y a pas des Inodes à tous. Est certainement vfat:<br>/dev/sdc10 /media/cavalerie vfat rw,nosuid,nodev,noexec,relatime,uid=1001,gid=1001,fmask=0113,dmask=0000,allow_utime=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
Vous devez vous connecter pour publier un commentaire.
La
ENOSPC
("Aucun espace disponible sur le périphérique") s'est déclenché dans tout situation dans laquelle les données ou les métadonnées associé à une opération d'e/S ne peut pas être écrit nulle part à cause du manque d'espace. Ce n'est pas toujours synonyme d'espace disque – cela pourrait signifier physique de l'espace disque, logiques de l'espace (par exemple, les limites de la longueur du fichier), l'espace d'une certaine structure de données ou de l'adresse de l'espace. Par exemple, vous pouvez l'obtenir si il n'y a pas d'espace dans le répertoire de table (vfat) ou il n'y a pas tout les inodes de gauche. Il est à peu près signifie “je ne trouve pas où écrire cela”.Particulièrement en Python, cela peut se produire sur toutes les e/S en écriture opération. Il peut arriver au cours de
f.write
, mais il peut aussi arriver suropen
, surf.flush
et même surf.close
. Où c'est arrivé fournit un indice vital pour la raison qu'il n' – si c'est arrivé suropen
il n'y avait pas assez d'espace pour écrire les métadonnées pour l'entrée, si c'est arrivé au cours def.write
,f.flush
ouf.close
il n'y avait pas assez d'espace disque ou vous avez dépassé la taille de fichier maximale.Si le système de fichiers d'un répertoire donné est
vfat
vous avais atteint le maximum de la limite de fichier à la même époque que vous avez fait. La limite est censé être 2^16 entrées de répertoire, mais si je me souviens bien de certains autres facteurs peuvent l'affecter (par exemple, certains fichiers nécessitent plus d'une entrée).Il serait préférable d'éviter de créer trop de fichiers dans un répertoire. Quelques systèmes de fichiers à gérer donc de nombreuses entrées de répertoire avec la facilité. Sauf si vous êtes certain que votre système de fichiers occupe bien avec beaucoup de fichiers dans un répertoire, vous pouvez envisager une autre stratégie (par exemple, créer plusieurs répertoires).
P. S. Aussi ne font pas confiance au reste de l'espace disque – certains systèmes de fichiers réserve de l'espace pour les racines et autres mésestimer l'espace libre et de vous donner un nombre qui n'est tout simplement pas vrai.
%env JOBLIB_TEMP_FOLDER=/tmp
dans le Python portable et everythin amende. Je ne sais pas si c'est utile ou si quelqu'un peut s'étendre.Essayez de supprimer les fichiers temp
cd
suivie parrm
Il s'avère la meilleure solution pour moi, ici, a été de tout reformater le disque. Une fois reformaté tous ces problèmes n'étaient plus des problèmes.
Dans mon cas, lorsque je lance df -je il me montre que mon nombre d'inodes sont pleines et puis je dois supprimer certains des petits fichiers ou des dossiers. Sinon, il ne nous permettra pas de créer des fichiers ou des dossiers une fois que les inodes obtenez complet.
Tout ce que vous avez à faire est de supprimer des fichiers ou des dossiers qui n'a pas pris l'intégralité de l'espace, mais est responsable de remplir les inodes.