ls -lh文件大小比du -sh小的情况参考 https://blog.csdn.net/wangtingting_100/article/details/80913868
du显示的是文件占block大小,通常1byte的文件,du大小是4bytes,这个是可以理解的。
可偏偏ls -lh的结果比du -sh的要大,这是为什么呢?
$ ls -lh xxx.log
-rw-rw-r-- 1 app app 152G Apr 25 09:44 xxx.log
$ du -sh xxx.log
228M xxx.log
#--apparent-size,效果与ll相同。因为--apparent-size查看的文件实际大小非占用block大小。
$ du --apparent-size -lh xxx.log
152G xxx.log
原因是文件所占磁盘被释放,但内核并没有,重启后好了。
$ df -h #磁盘大小已经恢复正常
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 3.3G 44G 7% /
/dev/vdb 197G 8.3G 189G 5% /data
总结:
清理有进程不停写入的文件,在不停进程情况下, 虽可以采用sudo bash -c "echo > /logs/xxx.log"方式有效避免打开句柄未正常关闭问题。但会偶现磁盘正常释放,但内核状态并未更新的情况。