错误:
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
图示:
延伸阅读:
inode解释(解决linux有空间却提示磁盘空间不足的问题)
http://blog.csdn.net/u011021773/article/details/54980820
http://www.jquerycn.cn/a_15913
PHP设置session多级路径并定期自动清理
http://blog.csdn.net/zhouzme/article/details/20014855