Подтвердить что ты не робот

Python вызывает: IOError: [Errno 28] На устройстве нет места: '../results/32766.html' на диске с большим количеством места

Я запускаю 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

Некоторые вещи, которые я пробовал:

  • Изменение пути записи к прямому местоположению вместо перехода по ссылке
  • Перезагрузка машины
  • Отключение и повторная установка накопителя
4b9b3361

Ответ 1

Как оказалось, лучшим решением для меня было просто переформатировать диск. После переформатирования все эти проблемы больше не были проблемой.

Ответ 2

Ошибка ENOSPC ( "Нет места на устройстве" ) будет срабатывать в любой ситуации, когда данные или метаданные, связанные с операцией ввода-вывода, не могут быть записаны нигде из-за нехватки места. Это не всегда означает дисковое пространство - это может означать физическое дисковое пространство, логическое пространство (например, максимальная длина файла), пространство в определенной структуре данных или адресное пространство. Например, вы можете получить его, если в таблице каталога нет (vfat), или нет никаких inode слева. Это примерно означает "Я не могу найти, где записать это".

В частности, в Python это может произойти при любой операции ввода-вывода ввода. Это может произойти во время f.write, но это также может произойти на open, на f.flush и даже на f.close. Там, где это произошло, жизненно важно понять причину, по которой это произошло - если это произошло на open, было недостаточно места для записи метаданных для записи, если это произошло во время f.write, f.flush или f.close недостаточно места на диске или вы превысили максимальный размер файла.

Если файловая система в указанном каталоге vfat, вы достигнете максимального предела файла примерно в то же время, что и вы. Предел должен быть 2 ^ 16 записей каталога, но если я правильно напомню, некоторые другие факторы могут повлиять на него (например, некоторые файлы требуют более одной записи).

Лучше было бы избежать создания большого количества файлов в каталоге. Несколько файловых систем с легкостью обрабатывают так много записей в каталоге. Если вы не уверены, что ваша файловая система имеет дело со многими файлами в каталоге, вы можете рассмотреть другую стратегию (например, создать больше каталогов).

P.S. Также не доверяйте оставшемуся дисковым пространствам - некоторые файловые системы резервируют некоторое пространство для root, а другие ошибочно вычисляют свободное пространство и дают вам число, которое просто неверно.

Ответ 3

Попробуйте удалить временные файлы

cd /tmp/
rm -r *

Ответ 4

В моем случае, когда я запускаю df -i, он показывает, что у меня заполнено число inode, а затем мне нужно удалить некоторые небольшие файлы или папки. В противном случае это не позволит нам создавать файлы или папки после заполнения inode.

Все, что вам нужно сделать, это удалить файлы или папки, которые не занимают все пространство, но отвечают за заполнение inode.

Ответ 5

запустите "export TEMPDIR =/someDir", где некоторый каталог является допустимым каталогом, отличным от /tmp. Запустите это в командной строке перед запуском команды python. В моем случае это "pip install rasa [spacy]", который ранее не работал.

Команда экспорта позволяет вам временно использовать указанный каталог в качестве временного каталога.