实战服务器磁盘异常排查

今天同事发现一问题,所有文件夹大小加起来和磁盘空间不一样

[root@10-10-49-150 data]# df -lh
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  8.3G   11G  45% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
/dev/vdb        197G   189G  0G  100% /data

逐个文件夹du -sh *排查了一会。也没有找出问题所在,查看了一下linux文件系统。

inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份: 一部份是inode, 另一部份是 Block, 
Block是用来存储数据用的。 
而inode呢,就是用来存储这些数据的信息, 
这些信息包括文件大小、属主、归属的用户组、读写权限等。 inode为每个文件进行信息索引,所以就有了inode的数值。 
操作系统根据指令,能通过inode值最快的找到相对应的文件

原理分析:

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

最后重启tomcat得已解决
[root@10-10-49-150 data]# df -lh
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  8.3G   11G  45% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
/dev/vdb        197G   89G   99G  48% /data



你可能感兴趣的:(服务器,异常,磁盘)