问题描述
我们在Vultr服务器中安装了宝塔面板(Vultr注册图文教程),但是宝塔面板在输入用户名密码之后显示登陆成功,但是还在登陆页面。之后通过终端查询命令时显示空间不足
error: db5 error(28) from dbenv->open: No space left on device
error: cannot open Packages index using db5 - No space left on device (28)
error: cannot open Packages database in /var/lib/rpm
Error: Error: rpmdb open failed
查看磁盘占用
[root@iZrj9aay1ndf3vrva7gs11Z ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 918M 0 918M 0% /dev
tmpfs 936M 4.0K 936M 1% /dev/shm
tmpfs 936M 17M 919M 2% /run
tmpfs 936M 0 936M 0% /sys/fs/cgroup
/dev/vda1 40G 33G 4.6G 88% /
tmpfs 188M 0 188M 0% /run/user/0
查看磁盘inode
[root@iZrj9aay1ndf3vrva7gs11Z ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 234785 337 234448 1% /dev
tmpfs 239382 3 239379 1% /dev/shm
tmpfs 239382 2171 237211 1% /run
tmpfs 239382 17 239365 1% /sys/fs/cgroup
/dev/vda1 2621440 2621440 0 100% /
tmpfs 239382 5 239377 1% /run/user/0
发现是inode使用率达到了惊人的100%,然后依次查找:
for i in /*; do echo $i; find $i | wc -l; done
最后发现是:/var/spool/postfix/maildrop
这个目录文件过多,接着我们尝试删除文件,出现postfix的大量性能文件时报错
-bash: /bin/rm: Argument list too long
如下图所示:
问题原因
如?待删除文件中包含的小文件数量过多,通常是由于受到 shell 参数个数限制所致。
这个是Linux系统存在的限制,可以通过如下指令查看该参数值的配置:
getconf ARG_MAX
解决办法
- 删除操作为高风险命令,请一定谨慎使用。确认通过快照等方式对数据进行了有效备份,或者明确可以删除。
- 如果待处理的文件数目过多,因为处理时间较长,推荐在业务低峰期进行操作,对磁盘的IO消耗较高。
- 对于 cp、mv 等都可以采取相同的方式实现处理。
- 请务必核实 dir 定义的目录中除了待删除文件外无其他类型的文件,避免误删?。
可以通过如下方式尝试删除:
结合 awk 删除
可使用 awk 一次删除一个的方式进行删除。但必须先进入该目录下。操作方法如下:
先进入该目标目录:
如图:
使用 awk 删除:
ls -l| awk '{ print "rm -f ",$9}'|sh
如图: