Linux storage management

参考资料

https://help.aliyun.com/knowledge_detail/42531.html

实际案例

阿里云服务器,操作系统为centos系统,收到报警磁盘空间使用率高达80%
通过下面的命令查看磁盘使用情况

[root@app2 /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   32G  6.0G  85% /
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G   81M  3.8G   3% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup

我们看到/dev/vda1使用率占到85%,我们查看一下/路径下的各文件的大小:

[root@app2 /]# cd /
[root@app2 /]# du -sh * | sort -h
0	./bin
65M	./boot
4.0K	./data
0	./dev
24M	./etc
2.5G	./home
0	./lib
0	./lib64
16K	./lost+found
4.0K	./media
4.0K	./mnt
8.0K	./opt
du: cannot access ‘./proc/4259/task/4259/fd/4’: No such file or directory
du: cannot access ‘./proc/4259/task/4259/fdinfo/4’: No such file or directory
du: cannot access ‘./proc/4259/fd/4’: No such file or directory
du: cannot access ‘./proc/4259/fdinfo/4’: No such file or directory
0	./proc
131M	./root
81M	./run
0	./sbin
4.0K	./srv
0	./sys
5.1M	./tmp
2.5G	./usr
220M	./var

磁盘使用总共只有几G,只有求助万能的google了,http://skyhome.cn/server/341.html

原因是,nginx再运行状态下,删除nginx日志时

  1. 当前access.log日志正在被apache进程占用。
  2. 通过rm命令删除access.log,实际只删除了文件名(该日志文件应用记数不为0,因此空间不会被释放)。
  3. 通过rm命令删除了access.log后,apache依然写日志到access.log中,当开启apache进程时,已经通过access.log定位到该文件的inode了,就是说再写日志是不通过access.log,因此即使删除了access.log,apache依然写日志到access.log所在的inode节点,所以导致硬盘空间增加。
  4. 因为删除了access.log,所以我们就找不到该文件了,du也查不到,就会出现硬盘满了但看不到究竟是哪些文件占用的。

解决办法:

kill掉nginx进程,然后重新启动

$ ps aux|grep nginx
$ kill <id>
$ /home/work/nginx/sbin/nginx