CentOS 7.9 根目录满了,找不到占用空间的文件,也没有deleted进程 -另一种思路解决方法-
说明:这几天发现生产环境中的一台应用服务器根目录爆满,但前期一直没有找到问题所在。终于今天找到的问题并得以解决,在此分享下解决思路和方案,并同时做一个记录。
操作系统:CenOS 7.9 根目录文件占用正常,已重启过服务器,也释放过deleted进程,空间依然占用。
1>通过宝塔巡检发现根目录空间异常
2>使用“df -h"发现磁盘使用率已达到96%
[root@**_app ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 16G 0 16G 0% /dev tmpfs 16G 0 16G 0% /dev/shm tmpfs 16G 27M 16G 1% /run tmpfs 16G 0 16G 0% /sys/fs/cgroup /dev/mapper/centos-root 50G 48G 2.2G 96% / //*发现根目录的容量已经使用了96% 只剩余2.2G的空间可供使用 /dev/sda1 1014M 237M 778M 24% /boot /dev/mapper/centos-home 827G 44G 783G 6% /home tmpfs 3.2G 0 3.2G 0% /run/user/0 //192.168.22.10/backup 1.0T 297G 728G 29% /windows [root@**_app ~]#
3>使用"df -i"查询inode占用情况,发现占用率在3% 是正常的。
4>查询根目录空间使用情况
进入根目录:cd /
查看根目录实际占用文件大小: du -h -x --max-depth=1
根目录空间有50G,实际占用文件只有10G不到,另外占用的将近40GB的文件找不到。
[root@**_app ~]# cd / [root@**_app /]# du -h -x --max-depth=1 36M ./etc 720K ./root 456M ./var 212K ./tmp 1.7G ./usr 0 ./media 0 ./mnt 0 ./opt 0 ./srv 5.0G ./www 4.0K ./patch 7.2G . //*看到根目录文件总用量在7.2G,没有达到50G [root@**_app /]#
5>初期思路(删除文件后占用空间未释放导致):
网上有教程说是已删除的文件占用导致的空间未释放。
通过:lsof / | grep deleted 指令,查看当前系统句柄对已删除文件未释放情况。
发现占用的文件大小是是空的(都是0)。所以可以排除文件占用的问题。
[root@**_app /]# lsof / |grep deleted php-fpm 9686 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9689 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9692 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9694 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9695 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9696 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9697 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9698 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9699 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9700 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9701 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9702 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9703 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9704 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9705 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9706 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9707 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 9708 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) mysqld 10517 mysql 5u REG 253,0 0 67772106 /tmp/ibXplGAM (deleted) mysqld 10517 mysql 6u REG 253,0 0 67772642 /tmp/ibjllXSI (deleted) mysqld 10517 mysql 7u REG 253,0 0 68364239 /tmp/ibdxKebF (deleted) mysqld 10517 mysql 8u REG 253,0 0 68369312 /tmp/ib2aON9x (deleted) mysqld 10517 mysql 14u REG 253,0 0 68933157 /tmp/ibrdaFUu (deleted) php-fpm 10609 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) php-fpm 10662 www 3u REG 253,0 0 67160174 /tmp/ZCUD4i69BL (deleted) [root@**_app /]#
如果是因为删除了文件,且文件被程序占用导致资源未回收的这种问题的话,那么到这一步只要使用kill -hup pid号,进行杀死后会自动重启,资源也得以释放,问题便可以解决问题了。
但很显然,我这边碰到的并不是这个原因,所以还要寻找其它的解决方法,继续排查:
6>Windows mount排查思路1:
最后考虑到之前有动过另一台Windows服务器的共享,该服务器的共享mouna(挂载)到Linux服务器的windows目录中。遂开始排查该目录情况。(SSH输出内容中过滤了部分重复、隐私信息)
[root@**_app /]# cd /windows //*进入mount的windows目录 [root@**_app windows]# ls //*查看目录情况 database site //*发现有两个目录 [root@**_app windows]# cd database //*先查看database目录 [root@**_app database]# du -sh * //*查看database目录文件占用情况 41M db_**_dev_20211209_220002.sql.gz 41M db_**_dev_20211209_230002.sql.gz 41M db_**_dev_20211210_000001.sql.gz 41M db_**_dev_20211210_010001.sql.gz //*该目录文件很多、后面不贴出来了,基本都在41M左右,与windwos服务器中查看的情况一致。 [root@**_app database]# [root@**_app database]# cd .. //*返回上级目录 [root@**_app windows]# cd site //*查看site目录 [root@**_app site]# du -sh * //*查看site目录文件占用情况 41G web_saas.***.com.cn_20211211_010001.tar.gz 41G web_saas.***.com.cn_20211212_010001.tar.gz 41G web_saas.***.com.cn_20211213_010001.tar.gz 41G web_saas.***.com.cn_20211215_010002.tar.gz 41G web_saas.***.com.cn_20211216_010001.tar.gz 41G web_saas.***.com.cn_20211217_010001.tar.gz [root@**_app site]# //*看到site目录和windows服务器下共享中的文件内容是一致的,所以刚开始的时候便排除了该目录的问题
刚开始的时候排查过mount的目录,因为其内容与Windows 服务器共享出来的内容一致,便很快排除了mount目录的问题。
但后期一整套排查下来,近期只有动过这台服务器的共享,所以还是决定从mount上着手排查。
7>mount 排查 "umount":
先把挂载的windows目录使用"umount"命令卸载看看结果:
[root@**_app site]# cd / //*进入根目录 [root@**_app /]# umount windows //*对windows进行unmout [root@**_app /]# cd /windows //*进入根目录下windows目录 [root@**_app windows]# ls //*查看发现存在一个site目录,正常情况下umount后应该是空的才对,感觉问题已经定位到了。继续往下看 site [root@**_app windows]# cd site //*进入site目录 [root@**_app site]# du -sh * //*查看site目录文件占用情况 4.0K web_posapi.***.com.cn_20211214_010001.tar.gz 24M web_pos.***.com.cn_20211214_010001.tar.gz 41G web_saas.***.com.cn_20211214_010001.tar.gz //*最大的文件 4.0K web_www.***.com.cn_20211214_010001.tar.gz [root@**_app site]# //*多出来的40个G的空间终于定位到了....
至此,问题已经大致定位出来了,由于之前变动过windwos mount,导致当日网络备份失败,宝塔自动备份到根目录的windows 目录下了....
8>删除占用文件:
进入到"/windows/site"目录下,执行"rm -rf *"删除当前目录下所有文件。
注意:注意执行该命令前需要区分当前目录,否则会删错,导致文件丢失
[root@**_app site]# rm -rf * //*删除当前目录下所有文件,注意执行该命令前需要区分当前目录,否则会删错,导致文件丢失 [root@**_app site]# ls //*再次查看,文件已删除 [root@**_app site]#
9>重新mount并核对:
[root@**_app site]# mount -a //*重新mount,因为我的mount配置是写到fstab里面的,可以直接这样操作 [root@**_app site]# df -h //*再次查看磁盘空间 Filesystem Size Used Avail Use% Mounted on devtmpfs 16G 0 16G 0% /dev tmpfs 16G 0 16G 0% /dev/shm tmpfs 16G 27M 16G 1% /run tmpfs 16G 0 16G 0% /sys/fs/cgroup /dev/mapper/centos-root 50G 7.3G 43G 15% / //*根目录空间已释放 /dev/sda1 1014M 237M 778M 24% /boot /dev/mapper/centos-home 827G 44G 783G 6% /home tmpfs 3.2G 0 3.2G 0% /run/user/0 //192.168.22.10/backup 1.0T 297G 728G 29% /windows //*mount也成功挂载 [root@**_app site]#
查看宝塔:
总结:
1.如果如果是因为删除了文件,且文件被程序占用导致资源未回收的这种问题的话,那么到第5步的时候就可以解决问题了,后期再使用kill -hup pid号,进行杀死后会自动重启,即可。
2.处理这类问题一定要结合近期的变动来处理,正常情况下只要程序没有大动过,都可以排除程序的问题,再着手排查近期改动所带来的影响。