Linux磁盘爆满!明明有空间却提示磁盘空间不足!session等小文件太多删不掉!


错误:

1. Linux使用tab补全时提示 bash: cannot create temp file for here-document: No space left on device

2. 网站前端提示Session读写失败:open(..../session_..., O_RDWR) failed: No space left on device (28)


原因:

(在本案例里):

1. 文件大小为352M的小文件(例如1KB一个) 占用磁盘27G空间!

2. df命令算的是27G空间,而不是352M,并且小文件很难找出在哪。

3. 逐个删除小文件比较慢,直接删除文件夹再重建会快些!


情景:

Ubuntu + Apache + PHP


解决过程:

<<< 明明还有28G,却提醒没空间了! >>>
root@web3:~# df -h
Filesystem                                      Size  Used Avail Use% Mounted on
udev                                            5.9G  4.0K  5.9G   1% /dev
tmpfs                                           1.2G  280K  1.2G   1% /run
/dev/xvda2                                       99G   66G   28G  71% /


<<< 通过其它高手的提醒,知道了SESSION小文件很可能是罪魁祸首 >>>
root@web3:~# locate php.ini
/etc/php5/apache2/php.ini
root@web3:~# cat /etc/php5/apache2/php.ini | grep 'session.save_path'
session.save_path = "/var/apache/session"
root@web3:~# cd /var/apache/session


<<< 使用ls查看小文件列表,死活打不开,只能Ctrl+C取消 >>>
root@web3:/var/apache/session# ls
^C


<<< 查看文件夹总空间大小,也不行 >>>
root@web3:/var/apache/session# du -sh .
^C


<<< 试着查看一小部分的文件,*是通用匹配符 >>>
root@web3:/var/apache/session# ls sess_aaaa*
sess_aaaa847shrs6tfjska31sesoh1  sess_aaaadhno3hhco60v85kgbjcdu0
sess_aaaa8e47k45c703bsbqngn5ah4  sess_aaaavf5jp6185cghj2beelclm6


<<< 看看文件总数,成功,但是要等几分钟, 六百多万个文件! >>>
root@web3:/var/apache/session# ls | wc -l
6354033


<<< 看看多少个文件是一天都没修改过的(1440分钟=1天) >>>
root@web3:~# find /var/apache/session -depth -type f -mmin +1440 | wc -l
6299866


<<< 试过了逐个删除rm ./*失败了,根本就动不了 >>>


<<< 准备删掉整个文件夹,重建! >>>
root@web3:~# cd /var/apache/
root@web3:/var/apache# ls
session
root@web3:/var/apache# mkdir session2
root@web3:/var/apache# ls
session  session2


<<< 因为此目录是Apache在使用,直接删恐怕有冲突,那就先光速地换个文件夹,再慢慢删! >>>
root@web3:/var/apache# mv session session-old;mv session2 session
root@web3:/var/apache# ls
session  session-old
root@web3:/var/apache# ll -h
total 352M
drwxr-xr-x  4 root      root        4.0K Feb  3 17:11 ./
drwxr-xr-x 13 root      root        4.0K Oct 23 23:44 ../
drwxr-xr-x  2 www-data  www-data    4.0K Feb  3 17:12 session/
drwxr-xr-x  2 www-data  www-data    352M Feb  3 17:10 session-old/


<<< 开始清空掉这堆小文件,删除整个文件夹,要等挺久,估计半个小时 >>>
root@web3:/var/apache# rm -R ./session-old/


<<< 另开窗口SSH进来看看硬盘信息,发现腾出了27G空间,实际文件总大小352M >>>
rudon@web3:~$ df -h
Filesystem                                      Size  Used Avail Use% Mounted on
udev                                            5.9G  4.0K  5.9G   1% /dev
tmpfs                                           1.2G  280K  1.2G   1% /run
/dev/xvda2                                       99G   39G   55G  42% /





root@web3:~# crontab -e
<<< 添加以下新任务并保存(需改路径,另外1440可修改,这里是指一天的分钟数)>>>
<<< 命令解释:每天凌晨2点自动找出指定位置的1天都没修改过的文件,并删除! >>>
1 2 * * * find /var/apache/session -depth -type f -mmin +1440 -exec rm -f {} \; &>/dev/null




图示:

Linux磁盘爆满!明明有空间却提示磁盘空间不足!session等小文件太多删不掉!_第1张图片

Linux磁盘爆满!明明有空间却提示磁盘空间不足!session等小文件太多删不掉!_第2张图片

Linux磁盘爆满!明明有空间却提示磁盘空间不足!session等小文件太多删不掉!_第3张图片

Linux磁盘爆满!明明有空间却提示磁盘空间不足!session等小文件太多删不掉!_第4张图片

Linux磁盘爆满!明明有空间却提示磁盘空间不足!session等小文件太多删不掉!_第5张图片


延伸阅读:

inode解释(解决linux有空间却提示磁盘空间不足的问题)
http://blog.csdn.net/u011021773/article/details/54980820

php中session文件过多inode用完,apache无法运行的解决方法
http://www.jquerycn.cn/a_15913

PHP设置session多级路径并定期自动清理
http://blog.csdn.net/zhouzme/article/details/20014855



你可能感兴趣的:(Linux,Mac,OS,X,Windows)