Linux

如何拯救沒有空閒 inode 的伺服器(來自 DDOS)

  • April 26, 2017

我的一台網路伺服器遭到 DDOS 攻擊。一切都很好,除了有數百萬個 PHP 會話文件用完分區的 100% inode。整個/只有一個分區

嘗試了幾種解決方案,但只能在一定程度上起作用。 https://unix.stackexchange.com/questions/37329/efficiently-delete-large-directory- contains-thousands-of-files?newreg=07f276292205457ab9975a0ea68e9273

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

釋放 8% 的 inode 後,磁碟變得極其緩慢,無法再刪除任何內容。

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

目錄中仍有 600 萬多個小文件。上述方法以大約 2 個文件/秒的速度刪除

我閱讀了有關 b-tree 重新平衡的資訊。但是如何診斷/解決緩慢刪除問題?

一個快速的事情是移動/重命名您的目前/tmp目錄並創建一個新目錄,以便 /tmp不再影響正常使用。

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

也許你也需要這樣做/var/tmp。這使您可以平靜地清理/tmp-old。


作為緩解措施:

考慮使用您的一些記憶體來創建一個單獨的 tempfs 分區以用作 PHP 會話文件的儲存,這將在一定程度上限制對系統其餘部分的影響。

IE

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"

引用自:https://serverfault.com/questions/846669