磁盘df与du 磁盘对比结果不一致问题

现象说明

df与du的结果不一致,现象说明

df -h 显示磁盘占用满


image.png

du -sh * / 显示磁盘只用了12G


image.png

这明显不符

问题排查

原因1、隐藏文件未参与统计

1.du -sh * 不统计隐藏文件夹,可以用du -ah替代

原因2、被删除文件,有进程还在使用这个文件的句柄

1.df -> disk free是通过文件系统之间获取的空间大小信息

2.du -> dist usage是通过计算所选文件夹中所有文件的大小的和得到结果的

导致两者结果出现偏差最常见的一个原因就是有些被『删除』了的幽灵文件。 当我们删除一个文件的时候,
其实这个可能并不会立即被从文件系统中释放掉,因为可能会有进程还在使用这个文件的句柄,
只有当所有文件句柄都被释放了之后,相应的文件才会被真正从文件系统中释放掉。

确定办法: lsof | grep delete

image.png

解决办法

1.重启肯定可以解决这一问题

2.lsof | grep delete 查看被删除的文件,查看是否存在大文件占用,查看到进程pid 重启进程

3.避免方法在删除大文件时请不要用rm ,请用echo "">filename

原因3、新挂盘挂载点中有数据,磁盘挂载后导致数据看不到

现象说明

未挂载磁盘前有 /home目录下有多个文件如下图

image.png

挂载磁盘后 /home 目录下没有该文件了,而是磁盘中以前的数据

image.png

这个就是磁盘挂载导致数据被掩藏的现象

产生的问题

导致新磁盘挂载后,du -sh * 统计不到因挂载导致被隐藏的文件,df -h 直接统计磁盘使用导致两者统计不一致

解决办法

这里的解决思路不包含排查被占用的空间位置
解决思路,卸载磁盘,删除被掩藏的数据,然后重新挂载磁盘

#查看全部数据盘
fdisk -l

umount -v /home

rm /home/* -f
#临时挂载
mount /dev/mapper/centos_centos7--6-home /home

#永久挂载
1.fdisk  -l 查看所有磁盘 ,通过对比df -h 找到为挂载磁盘
2.mount /dev/mapper/centos_centos7--6-home /home   #即时生效
3. blkid ${磁盘名称} 查看类型
echo "${磁盘名称} ${磁盘挂载点}                  ${type}    defaults        0 0" >>  /etc/fstab

你可能感兴趣的:(磁盘df与du 磁盘对比结果不一致问题)