前段时间,同事向我反馈,有台服务器的业务停止运行了,让我检查下。
先介绍下这台服务器的基本情况,操作系统为CentOS 7.6 64位,磁盘有2块,一块是200多G的系统盘;另一块是8T的数据盘,挂载在/app-data目录下。
我查看了服务器之后,发现原因是根目录的磁盘空间满了。于是删除了业务程序的部分日志,但也只空出来几个G的空间,于是想看下是哪些文件占用了根目录的磁盘空间。
使用df命令查看文件系统的磁盘使用情况(以下是正常之后的情况):
从上图中可以看到,根目录"/"挂载的是磁盘sda的一个分区/dev/sda3,容量为220G,已用24G,可用空间为197G,已使用空间百分比为11%。
但那天查看时,可用空间为13M,已用100%。
另外,磁盘sdb的/dev/sdb1分区大小为7.3T,挂载在/app-data目录下。
使用du命令查看根目录下,各文件、文件夹占用的空间的大小:
上图中,usr、home和var文件夹大小加起来,有24G多一点,其他的可忽略不计,和df命令查出来的已用空间是相符合的。
app-data文件夹虽然有56G,但因为挂载在磁盘b上,所以其大小不计入根目录的占用空间。
所以当时就比较奇怪,根目录下190多G的空间哪里去了。经过仔细询问得知,该服务器一开始是在没有挂载磁盘sdb的情况下运行的,后来客户加购了数据盘,并挂载到/app-data目录下,正常运行了几天,然后磁盘就满了。
看来问题出现在挂载上。于是停止了业务程序,
umount /dev/sdb1
此时再du一下,发现/app-data文件夹达195G。也就是说,原来没数据盘b的时候,业务运行了一段时间,数据都存在系统盘sda的/app-data文件夹下。但是将数据盘挂载的时候,没有将系统盘里的数据迁移到数据盘,就直接挂载上去了。导致系统盘的这部分空间就这么“消失”了。
后面删除了大部分测试数据,将有用的数据mv到/app-data1文件夹下,清空/app-data文件夹,再挂载数据盘。然后将/app-data1文件夹下的数据迁移到数据盘,最后删除/app-data1文件夹。
再df一下,发现磁盘空间都回来了。