У меня есть tmp-папка с 14 миллионами файлов сеансов php в моем домашнем каталоге. По крайней мере, это то, что я думаю, я не мог ls
это или что-нибудь.
Я пробовал использовать find
с -exec rm {} \;
команды, но это не сработало. ls 'sess_0*' | xargs rm
не сделал ни того, ни другого.
Я сейчас бегу rm -rf tmp
но через два часа папка кажется того же размера.
Как я могу очистить эту папку?
Кто-нибудь знает, чем это было вызвано вначале? Не помню, чтобы за последнее время менял что-то критическое.
СПРАВОЧНАЯ ИНФОРМАЦИЯ:
Я неожиданно обнаружил ошибку, из-за которой СЕССИИ больше не могли быть записаны на диск:
[Mon Apr 19 19:58:32 2010] [warn] mod_fcgid: stderr: PHP Warning: Unknown: open(/var/www/clients/client1/web1/tmp/sess_8e12742b62aa68a3f9476ec80222bbfb, O_RDWR) failed: No space left on device (28) in Unknown on line 0
[Mon Apr 19 19:58:32 2010] [warn] mod_fcgid: stderr: PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/www/clients/client1/web1/tmp) in Unknown on line 0
Я побежал:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md0 457G 126G 308G 29% /
tmpfs 1.8G 0 1.8G 0% /lib/init/rw
udev 10M 664K 9.4M 7% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
Но, как видите, диск не заполнен.
Итак, я заглянул в системный журнал, который сообщает следующие 20 раз в секунду:
kernel: [19570794.361241] EXT3-fs warning (device md0): ext3_dx_add_entry: Directory index full!
Это, очевидно, навело меня на мысль о полной папке, но поскольку мой web
в папке всего 60к файлов (посчитав их), я догадался, что это tmp
папка (локальная, для этого экземпляра php), которая все испортила.
Некоторые команды, которые я выполнил:
$ sudo ls sess_a* | xargs rm -f
bash: /usr/bin/sudo: Argument list too long
find . -exec rm {} \;
rm: cannot remove directory '.'
find: cannot fork: Cannot allocate memory
Я использую Debian Lenny, php5, ISPConfig, SuEXEC и Fast-CGI.
Прежде всего, ошибки о невозможности написать на
/var/www/clients/client1/web1/tmp/
не означает, что именно в этом каталоге находятся все файлы, просто он пытается записать, когда регистрирует ошибку. Но вы нашли файлы и собираетесь их удалить.
На этапе очистки предполагается, что файлы для очистки находятся в /var/www/clients/client1/web1/tmp
, сначала станьте тем же эффективным пользователем, что и тот, кто создает файлы сеанса (возможно, один из apache
или httpd
или www-data
), затем:
cd /var/www/clients/client1/web1/tmp
ls -f | grep ^sess_ | xargs rm -f
Я использую этот метод для удаления 2,3 миллиона - похоже, это будет закончено примерно через 10-15 минут
http://www.binarysludge.com/2012/01/01/how-to-delete-millions-of-files-linux/
find /tmp -name "sess_*" -exec rm {} \;