Chinaunix

标题: du 、ls 查看到文件大小 与 df 、lsof 的结果不一致的问题 [打印本页]

作者: wlong2000joint    时间: 2010-09-14 18:20
标题: du 、ls 查看到文件大小 与 df 、lsof 的结果不一致的问题
本帖最后由 wlong2000joint 于 2010-09-15 10:14 编辑

du 、ls 查看到文件大小 与 df 、lsof  的结果不一致的问题

现象:
[root@localhost ~]# df -h /
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             129G   22G  101G  18% /


[root@localhost ~]# du -sh /
13G     /



[root@localhost ~]# ll -h /var/lib/mysql/localhost.err
-rw-rw---- 1 mysql mysql 3.8K Sep 14 09:30 /var/lib/mysql-5.1.48/localhost.err


[root@localhost ~]# lsof -n|grep localhost.err
COMMAND     PID      USER   FD      TYPE             DEVICE       SIZE       NODE NAME
mysqld    28390     mysql    1u      REG                8,3 9895273063   30146639 /var/lib/mysql/localhost.err
mysqld    28390     mysql    2u      REG                8,3 9895273063   30146639 /var/lib/mysql/localhost.err


统计结果的差别主要是因为这个文件:localhost.err  ,是mysql的日志文件,因为应用的SQL语句中包含limit 1,而binlog_format为STATEMENT,所以mysql一直会有报错信息写入日志文件中(这个问题参考http://bbs3.chinaunix.net/viewthread.php?tid=1471047)。

我觉得这个重复的报错信息会把日志文件写得很大,就用sed -i 定期修改(删除某些内容)mysql日志文件:
/bin/sed -i "/Statement may not be safe to log in statement format./d" /var/lib/mysql/localhost.err
后来就发现了这样的情况(du 、ls 查看到文件大小 与 df 、lsof  的结果不一致的问题),如果只是du 和 ls  统计文件大小有误也就无所谓了,问题是cat  localhost.err 也只看到很少几行文字,实际上mysql还在继续写错误日志到localhost.err(从lsof的结果可以看出),但是cat localhost.err 却看不到,这就是文件系统不一致了?如何解决呢? 难道不能用sed -i 修改msyql日志文件吗?
作者: jian12278    时间: 2010-09-14 20:44
围观ing

   没关注过这种情况
作者: nagaregawa    时间: 2010-09-15 09:23
ls 命令:给出的结果是对于单个文件而言的,结果基于 end-of-file 和 beginning-of-file 之间的差别,无论是否有块分配给这个文件。
du 命令:显示的是实际上分配给单个文件的块。
df 命令:显示的是整个文件系统中分配的块,包括 inode 以及其他的 metadata。
作者: wlong2000joint    时间: 2010-09-15 10:16
谢谢回复! 但是遇到这种情况如何处理呢?
作者: jerryjzm    时间: 2010-09-15 10:46
COMMAND     PID      USER   FD      TYPE             DEVICE       SIZE       NODE NAME
mysqld    28390     mysql    1u      REG                8,3 9895273063   30146639 /var/lib/mysql/localhost.err
这个9G+13,刚好是22G
不知道lz的mysqld    能否重启,这个情况经常是实际空间释放了,但df确 不能反映出来,而仅仅是因为使用那个文件系统的进程,一直在运行。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2