我的主目录中有一个 tmp 文件夹,里面有 1400 万个 php 会话文件。至少我是这样认为的,但我不可能做到ls
。
我尝试使用find
命令-exec rm {} \;
,但是没有用。ls 'sess_0*' | xargs rm
都没有用。
我目前正在运行rm -rf tmp
,但两个小时后文件夹看起来大小相同。
我怎样才能清空该文件夹?
有人知道最初是什么原因造成的吗?我不记得最近做过任何重大更改。
参考信息:
我突然遇到一个错误,SESSIONS 无法再写入磁盘:
[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
文件夹只有 60k 个文件(已经计算过),所以我猜测是文件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。
答案1
find /tmp -name "sess_*" -exec rm {} \;
答案2
我正在用这种方法删除 230 万个 - 看起来大约需要 10-15 分钟
http://www.binarysludge.com/2012/01/01/how-to-delete-millions-of-files-linux/
答案3
首先,关于无法写入的错误
/var/www/clients/client1/web1/tmp/
并不意味着这个目录包含所有文件,只是表示当它记录错误时它试图写入那里。但您已找到这些文件,并即将删除它们。
- 停止 Web 服务器(如果可能)以防止创建更多,并停止发出错误消息
- 清理
- 重启 Web 服务器
- 观察它是否再次启动
对于清理步骤,假设要清理的文件在 中/var/www/clients/client1/web1/tmp
,首先成为与创建会话文件的用户相同的有效用户(可能是apache
或httpd
或之一www-data
),然后:
cd /var/www/clients/client1/web1/tmp
ls -f | grep ^sess_ | xargs rm -f