1. 查看磁盘占用情况
df -h
2.分析使用率
size 就是大小。
used 就是使用了多少
Avail 就是空闲多少
然后用了100%,Mounted on 表示 该路径下的文件使用的本磁盘。
这个图中,可以看出系统盘满了,需要注意的是,系统盘下面的一些文件路径已经被挂载到了别的磁盘,所以是不占用系统盘内存空间的。在接下来分析的时候可以排除。
普通情况:
3.从根目录开始查找占用空间较大的子目录
du -sh /* | sort -n -r
4.如果您已经确定了某个特定的大目录,可以进一步深入查找该目录内的大文件或子目录
du -sh /app/* | sort -n -r
5.在接下来的结果中反复查找,就可以找到相对较大的文件,分析一下是否有用,没有就清理掉。
需要注意的是:要刨去那些已经挂载在别的系统盘上的文件路径,不然即使删了,也不会释放空间。
6.一般情况是 /tmp缓存文件多,在或者是一些保存日志文件的地方。总和分析进行删除。
特殊情况
问题:df查看磁盘空间已经满了,但是找不到占用磁盘空间的文件在哪里。手动 du -sh /* 进行统计,发现没用使用那么多的磁盘空间
解决:这种情况,一般是在清理文件的时候,直接rm ,但是程序还在使用原来文件的句柄,导致磁盘空间不会释放。
查看被删除文件,但是句柄还被占用的程序:
lsof -n | grep delete
# 列名称
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME
...
optest 7787 7799 Composito opcai 23u REG 0,23 144 637 /dev/shm/.org.chromium.Chromium.gwZDcZ (deleted)
optest 7787 7799 Composito opcai 24u REG 0,23 144 586 /dev/shm/.org.chromium.Chromium.nidu2H (deleted)
optest 7787 7799 Composito opcai 43r REG 0,23 1048576 1061 /dev/shm/.org.chromium.Chromium.CgIJvs (deleted)
optest 7787 7800 Composito opcai 23u REG 0,23 144 637 /dev/shm/.org.chromium.Chromium.gwZDcZ (deleted)
optest 7787 7800 Composito opcai 24u REG 0,23 144 586 /dev/shm/.org.chromium.Chromium.nidu2H (deleted)
optest 7787 7800 Composito opcai 43r REG 0,23 1048576 1061 /dev/shm/.org.chromium.Chromium.CgIJvs (deleted)
optest 7787 7804 TaskSched opcai 23u REG 0,23 144 637 /dev/shm/.org.chromium.Chromium.gwZDcZ (deleted)
optest 7787 7804 TaskSched opcai 24u REG 0,23 144 586 /dev/shm/.org.chromium.Chromium.nidu2H (deleted)
optest 7787 7804 TaskSched opcai 43r REG 0,23 1048576 1061 /dev/shm/.org.chromium.Chromium.CgIJvs (deleted)
...
查找到以 (deleted) 结尾的就是已经被删除的文件,SIZE那列就是显示句柄的大小,单位是byte,第一列就是程序名称,第二列就是PID,这时候根据PID重启一下程序就可以释放空间了。
注意:在清理文件的时候,不确定日志文件是否还在被使用,可以使用echo > logfile.log将文件内容清空,就可以马上释放磁盘空间。
特殊情况二
问题:df 查看磁盘空间空闲还有,但是还是一直报no space left。
解决:这个就要赶紧先排查一下是否是inode使用完了,太多的小文件,会占用大量的inode。inode多少是在格式化的时候已经固定了。处理方法,就是清理掉这些没用的小文件,如果是程序用到的数据文件,就让程序员修改程序了,尽量不要产生太多的小文件。