Автор Тема: [РЕШЕНО] "На устройстве закончилось место", но место ещё есть  (Прочитано 5838 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн yura3d

  • Пользователь
  • *
  • Сообщений: 27
Здравствуйте!
Есть сервер, который работает под управлением Debian 7, аптайм уже почти год. ;D
На сервере есть PHP-скрипт, который запускается по крону и скачивает из Интернета определённые картинки. В последнее время в логах стали изредка проскакивать такие ошибки:
PHP Warning:  imagejpeg(): Unable to open '/home/<...>/photos/1d1fa0efd91aa5eae8e4f9c2d7bc29ff_1.jpg' for writing: На устройстве кончилось место in /home/<...>/parser.php on line 236
Функция PHP imagejpeg() используется для сохранения обработанной скриптом картинки. Как видно из лога, ей не удаётся открыть файл для записи.

Свободное место на разделе есть:
df
Файловая система                                       1K-блоков Использовано  Доступно Использовано% Cмонтировано в
rootfs                                                  48061320     17281660  28338240           38% /
udev                                                       10240            0     10240            0% /dev
tmpfs                                                    3298632          252   3298380            1% /run
/dev/disk/by-uuid/027cdb93-855b-464d-8b4c-b3aab7450c05  48061320     17281664  28338236           38% /
tmpfs                                                       5120            0      5120            0% /run/lock
tmpfs                                                    8159460            0   8159460            0% /run/shm
/dev/sda3                                              905143328    459956668 399208036           54% /home

Ах да, в папке с картинками о-о-о-очень много файлов. Но свободные иноды у раздела есть:
df -i
Файловая система                                         Iнодов IИспользовано IСвободно IИспользовано% Cмонтировано в
rootfs                                                  3055616        135004   2920612             5% /
udev                                                    4121801           355   4121446             1% /dev
tmpfs                                                   4123290           284   4123006             1% /run
/dev/disk/by-uuid/027cdb93-855b-464d-8b4c-b3aab7450c05  3055616        135004   2920612             5% /
tmpfs                                                   4123290             2   4123288             1% /run/lock
tmpfs                                                   4123290             2   4123288             1% /run/shm
/dev/sda3                                              57475072       7903194  49571878            14% /home

Такое происходит очень редко, в остальных 999 случаев из 1000 картинка нормально сохраняется. Подскажите, пожалуйста, куда копать?
« Последнее редактирование: 22 Сентября 2014, 17:45:45 от yura3d »
 

yura_n

  • Гость
Файловую систему проверяли?
 

Оффлайн yura3d

  • Пользователь
  • *
  • Сообщений: 27
Файловую систему проверяли?
Пока нет, на этом же разделе размещается сайт, который должен работать.
Постараюсь ночью отмонтировать раздел и проверить.
 

Оффлайн yura3d

  • Пользователь
  • *
  • Сообщений: 27
Пока нет, на этом же разделе размещается сайт, который должен работать.
Постараюсь ночью отмонтировать раздел и проверить.
Здравствуйте. Вроде бы появилась информация по возникшей ситуации. fsck ошибок не нашёл, зато я заметил, что в syslog при каждой ошибочной операции создания файла появляется такая запись:
kernel: [26787.684771] EXT4-fs warning (device sda3): ext4_dx_add_entry:1548: Directory index full!Насколько я понял, проблема в том, что файлов в папке очень много. Где-то мне писали, что у ext4 есть ограничение на 31998 файлов в одной папке. Правда ли это? Получается, единственным решением проблемы будет так переписать скрипт, чтобы он сохранял картинки в разные папки (например, группировал их по дате создания) ?
 

Оффлайн endru

Насколько я понял, проблема в том, что файлов в папке очень много. Где-то мне писали, что у ext4 есть ограничение на 31998 файлов в одной папке.
нагло врут! проверил у себя:
ls -l /srv/samba/shared/small_pic/ | wc -l
43622

в ext3 было ограничение: "для каталога нельзя создать более 32000 подкаталогов"
« Последнее редактирование: 19 Сентября 2014, 12:55:19 от Endru »
 

Оффлайн qupl

Цитата: wiki про ext4
Поднято ограничение на число вложенных каталогов. ext3 (без использования патчей) позволяла размещать в одном каталоге не более 32 000 подкаталогов (до 65 535, если изменить константы ядра).

Оффлайн yura3d

  • Пользователь
  • *
  • Сообщений: 27
нагло врут! проверил у себя:
Спасибо за информацию. У меня вообще при запуске такого подсчёта ls просто виснет и всё. Сейчас не стал её килять, может за час-другой чего-нибудь и насчитает. :(
Не могу понять, или там действительно так много файлов, или есть какие-то ошибки. ???
Гугление на тему "ext4 directory index full" ничего не дало, кроме того, что такие ошибки встречаются и люди о них пишут. Решений (кроме советов не хранить много файлов в одной папке) нет.

Есть ещё вопрос. Хочу снова проверить раздел, но сервер уже отправил в дата-центр, а проблемная папка как раз хранится на разделе с точкой монтирования /home, который просто так отмонтировать нельзя. Доступ к серверу сейчас есть только по SSH. Есть ли какая-нибудь возможность как-то загрузить систему без монтирования /home? Например, перезагрузиться в single user mode (какая команда?) или закомментировать этот раздел в fstab (не будет ли в таком случае ошибок при загрузке ОС из-за отсутствия /home?)

=== (Отредактировано) ===
ls насчитало-таки за 20 минут 7768184 файлов. :o
« Последнее редактирование: 19 Сентября 2014, 13:42:01 от yura3d »
 

Оффлайн ogost

при таком количестве файлов в одной папке стандартные утилиты командной строки, например, ls, rm, mv, cp и прочие, начинают тупить. выход - использовать например find с ключом -exec, -delete. у этого способа есть и свои недостатки. есть так же другие способы, они легко гуглятся.
и да, не нужно хранить слишком много файлов в одной папке, редактируйте свой скрипт.


lsof /home покажет какие процессы работают с данным разделом. прибивайте их по мере надобности, и отмонтируйте /home.

Оффлайн yura3d

  • Пользователь
  • *
  • Сообщений: 27
и да, не нужно хранить слишком много файлов в одной папке, редактируйте свой скрипт.
Спасибо. Хотелось бы конечно этого избежать, но видимо придётся переписывать скрипт. А вместе с ним и полсайта. Эх.. :(

lsof /home покажет какие процессы работают с данным разделом. прибивайте их по мере надобности, и отмонтируйте /home.
Именно так и делал, убил оставшиеся процессы, диск отмонтировался, но fsck всё равно ругался, что device is busy. Так и не понял в чём причина. ???
 

Оффлайн yura3d

  • Пользователь
  • *
  • Сообщений: 27
Спасибо всем, кто откликнулся! Проблема решилась. :)
Опытным путём было установлено, что после достижения ~7 800 000 файлов в одной папке начинались вышеописанные проблемы.
Помогла чистка неактуальных файлов, снизив их число где-то до 2 000 000, и ошибки пропали.
Но чтобы дальше не жить в ожидании очередного переполнения, да и всё равно 2 ляма файлов в одной папке многовато, переписал-таки скрипт, чтобы файлы сохранялись в разных папках. Что интересно, сохранение стало работать гораздо быстрее.
 

Теги:
     

    [Решено] UTC и локальное время

    Автор mexx

    Ответов: 2
    Просмотров: 1706
    Последний ответ 03 Октября 2014, 20:24:04
    от mexx
    [Решено] VirtualBox 4.1 и Debian 8

    Автор mmax

    Ответов: 13
    Просмотров: 3395
    Последний ответ 13 Октября 2016, 09:02:00
    от mmax
    [РЕШЕНО]помогите плиз решить проблему с зависимостями.

    Автор user~21

    Ответов: 2
    Просмотров: 3284
    Последний ответ 07 Декабря 2011, 21:52:19
    от user~21
    [Решено]Долго грузится система

    Автор svtv1

    Ответов: 16
    Просмотров: 8994
    Последний ответ 10 Июля 2020, 09:59:50
    от serke7771
    [Решено] Где бы мне "добыть" готовый файл sources.list?

    Автор manazius

    Ответов: 13
    Просмотров: 3810
    Последний ответ 09 Сентября 2012, 13:35:49
    от manazius