Ответ 1
Как оказалось, лучшим решением для меня было просто переформатировать диск. После переформатирования все эти проблемы больше не были проблемой.
Я запускаю Python script, который вызывает указанную выше ошибку. Самое необычное, что этот script работает на другой машине и не имеет проблем.
Разница в том, что на машине возникают проблемы, которые я пишу на внешний жесткий диск. Чтобы сделать вещи еще более странными, этот script запущен на проблемной машине и уже написал более 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:[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
Доказательство достаточно места:
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
Некоторые вещи, которые я пробовал:
Как оказалось, лучшим решением для меня было просто переформатировать диск. После переформатирования все эти проблемы больше не были проблемой.
Ошибка ENOSPC
( "Нет места на устройстве" ) будет срабатывать в любой ситуации, когда данные или метаданные, связанные с операцией ввода-вывода, не могут быть записаны нигде из-за нехватки места. Это не всегда означает дисковое пространство - это может означать физическое дисковое пространство, логическое пространство (например, максимальная длина файла), пространство в определенной структуре данных или адресное пространство. Например, вы можете получить его, если в таблице каталога нет (vfat), или нет никаких inode слева. Это примерно означает "Я не могу найти, где записать это".
В частности, в Python это может произойти при любой операции ввода-вывода ввода. Это может произойти во время f.write
, но это также может произойти на open
, на f.flush
и даже на f.close
. Там, где это произошло, жизненно важно понять причину, по которой это произошло - если это произошло на open
, было недостаточно места для записи метаданных для записи, если это произошло во время f.write
, f.flush
или f.close
недостаточно места на диске или вы превысили максимальный размер файла.
Если файловая система в указанном каталоге vfat
, вы достигнете максимального предела файла примерно в то же время, что и вы. Предел должен быть 2 ^ 16 записей каталога, но если я правильно напомню, некоторые другие факторы могут повлиять на него (например, некоторые файлы требуют более одной записи).
Лучше было бы избежать создания большого количества файлов в каталоге. Несколько файловых систем с легкостью обрабатывают так много записей в каталоге. Если вы не уверены, что ваша файловая система имеет дело со многими файлами в каталоге, вы можете рассмотреть другую стратегию (например, создать больше каталогов).
P.S. Также не доверяйте оставшемуся дисковым пространствам - некоторые файловые системы резервируют некоторое пространство для root, а другие ошибочно вычисляют свободное пространство и дают вам число, которое просто неверно.
Попробуйте удалить временные файлы
cd /tmp/
rm -r *
В моем случае, когда я запускаю df -i, он показывает, что у меня заполнено число inode, а затем мне нужно удалить некоторые небольшие файлы или папки. В противном случае это не позволит нам создавать файлы или папки после заполнения inode.
Все, что вам нужно сделать, это удалить файлы или папки, которые не занимают все пространство, но отвечают за заполнение inode.
запустите "export TEMPDIR =/someDir", где некоторый каталог является допустимым каталогом, отличным от /tmp. Запустите это в командной строке перед запуском команды python. В моем случае это "pip install rasa [spacy]", который ранее не работал.
Команда экспорта позволяет вам временно использовать указанный каталог в качестве временного каталога.