Saturday, 14 August 2010

EXT3-fs warning (device md2): ext3_dx_add_entry: Directory index full!

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

При этом на машине дела с айнодами обстоят так (прошу не смущаться цифре в 100%, айноды свободные есть):

df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/md2 19144704 18994479 150225 100% /
tmpfs 506008 7 506001 1% /lib/init/rw
udev 506008 1232 504776 1% /dev
tmpfs 506008 1 506007 1% /dev/shm
/dev/md1 131648 44 131604 1% /boot



Более подробно:


Using a filesystem with 4k blocks, and assuming the filenames are of
the same average length, you should be able to get approximately 200k
* (4**3) = 12.8 million files in a single directory. If you use a 2k
block filesystem, the limit will be approximately 200k * (2**3) = 1.6
million files in a single directory.


Как решить проблему? Найти папки, где произошло данное событие и удалить из них файлы.

http://kerneltrap.org/mailarchive/linux-kernel/2008/5/18/1865234

4 comments:

  1. Добрый день!
    Столкнулся с данной проблемой(превышено количество файлов в директории). А есть мысли как эти файлы удалить? rm -rf /path/to/dir_with_many_files виснет (работало часов 8). ls в директории виснет.

    ReplyDelete
  2. Отформатировать файловую систему либо попробовать снять нагрузку (LIVECD) и таки rm -rf папки.

    ReplyDelete
  3. У меня получилось таки считать эту папку. В моём случае(CentOS 5.5) самой "проходимой" читалкой списка файлов в директории оказалась команда: ls -1f, потом это дело скормить xarg. В конечной реализации получился такой вот oneliner:
    export i=0; time ( while [ true ]; do ls -1f | head -n 3 | egrep -q 'log' || break; ls -1f | head -n 10000 | xargs rm -f 2>/dev/null; export i=$(($i+10000)); echo "$i..."; done )
    И его результат вывода:

    29560000...
    29570000...
    29580000...
    29590000...
    29600000...

    real 4129m46.723s
    user 1m12.366s
    sys 33m41.341s

    ReplyDelete
  4. Евгений, Вы, безусовно, правы, но если команда ls -1f что-то выдает, то значит переполнение еще не фатальное, если папка забита до упора, простой ls часто виснет и что-либо сделать с этим очень сложно.

    ReplyDelete

Note: only a member of this blog may post a comment.