Назад | Перейти на главную страницу

Как спасти сервер без свободных индексных дескрипторов (от DDOS)

Один из моих веб-серверов подвергся DDOS-атаке. Все хорошо, за исключением того, что миллионы файлов сеансов PHP используются на 100% inode раздела. Есть только один раздел для всего /

Пробовал несколько решений, но работал только до некоторой степени. https://unix.stackexchange.com/questions/37329/efficiently-delete-large-directory-contain-thousands-of-files?newreg=07f276292205457ab9975a0ea68e9273

http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux

После освобождения 8% дескрипторов диск стал очень медленно удалять что-либо еще.

rm -f filename* 

rsync -a --delete empty_dir/    yourdirectory/

perl -e 'for(<*>){((stat)[9]<(unlink))}'

И диск теперь выглядит так

Filesystem      Inodes   IUsed  IFree IUse% Mounted on
/dev/vda1      2621440 2385895 235545   92% /
tmpfs           128789       1 128788    1% /dev/shm

В каталоге все еще более 6 миллионов небольших файлов. Вышеуказанные методы удаляют со скоростью около 2 файлов в секунду.

Я читал о перебалансировке B-дерева. Но как мне диагностировать / решить проблему медленного удаления?

`` ''

Что можно сделать быстро, это переместить / переименовать текущий /tmp каталог и создайте новый, чтобы нормальное использование /tmp больше не влияет.

mkdir /newtmp
chmod 1777 /newtmp
mv /tmp /tmp-old && mv /newtmp /tmp 

и, возможно, вам нужно сделать то же самое для /var/tmp также. Это позволяет вам спокойно очистить / tmp-old.


В качестве смягчающей меры:

Рассмотрите возможность использования некоторой части вашей памяти для создания отдельного раздела tempfs, который будет использоваться в качестве хранилища для ваших файлов сеанса PHP, что несколько ограничит влияние на остальную часть вашей системы.

т.е.

mkdir /var/cache/php
chmod 1777  /var/cache/php
mount -t tmpfs size=500M  /var/cache/php

и отредактируйте свой php.ini и установить

session.save_path = "/var/cache/php"