Ошибка ENOSPC
(«На устройстве не осталось места») будет вызвана в любой ситуации, когда данные или метаданные , связанные с операцией ввода-вывода, могут нигде не записывайся из-за недостатка места. Это не всегда означает дисковое пространство - это может означать физическое дисковое пространство, логическое пространство (например, максимальную длину файла), пространство в определенной структуре данных или адресном пространстве. Например, вы можете получить его, если в таблице каталогов нет места (vfat) или не осталось никаких инодов. Это примерно означает «я не могу найти, где это записать».
В частности, в Python это может происходить при любой операции записи ввода-вывода. Это может произойти во время f.write
, но также может произойти в open
, f.flush
и даже f.close
. То, где это произошло, дает важную подсказку по той причине, что это произошло - если это произошло в open
, не хватило места для записи метаданных для записи, если это произошло во время f.write
, f.flush
или f.close
недостаточно места на диске или превышен максимальный размер файла.
Если файловой системой в данном каталоге является vfat
, вы достигнете максимального размера файла примерно в то же время, что и вы. Предполагается, что предел составляет 2 ^ 16 записей каталога, но, если я правильно помню, некоторые другие факторы могут повлиять на него (например, для некоторых файлов требуется более одной записи).
Лучше всего избегать создания такого количества файлов в каталоге. Немногие файловые системы легко справляются с таким количеством записей каталога. Если вы не уверены, что ваша файловая система хорошо работает со многими файлами в каталоге, вы можете рассмотреть другую стратегию (например, создать больше каталогов).
P.S. Также не доверяйте оставшемуся дисковому пространству - некоторые файловые системы резервируют некоторое место для root, а другие просчитывают свободное пространство и дают вам число, которое просто не соответствует действительности.