df和du的区别以及磁盘空间使用问题

发表于:2007-05-26来源:作者:点击数: 标签:
solarissparc root df-kb结果 /dev/vx/dsk/home121972201108651598873392%/home du-ks查看/home分区情况为 10dep 27lost+found 395517 oracle 288bigml.lsof 212309wei 4041696lan 346074xue 520xue.log du相加的结果和df的结果不同?! 请帮忙分析原因 vahm

solaris sparc
root

df -kb 结果
/dev/vx/dsk/home     12197220 11086515  988733    92%    /home

du -ks 查看/home分区情况为
10      dep
27      lost+found
395517  oracle
288     bigml.lsof
212309  wei
4041696 lan
346074  xue
520     xue.log
du相加的结果和df的结果不同?!
请帮忙分析原因

 vahmoiz 回复于:2004-12-13 21:03:06
hehe

 billquick 回复于:2004-12-13 21:30:07
which is bigger?  df or du?

 bear 回复于:2004-12-14 10:08:20
你在/下用du -sk home看看

 leolein 回复于:2004-12-14 10:15:12
一样的,/home的使用量查出来,df的基本上比du的大一倍。会不会是应用程序的问题,我有一些程序在不停的写硬盘,而且基本上都是大文件。

 race 回复于:2004-12-14 10:24:23
# du -sk /data1
27046194        /data1
# df -k /data1
Filesystem            kbytes    used   avail capacity  Mounted on
/dev/dsk/c2t6d0s6    48059735 27046194 20532944    57%    /data1

这个是几天没运行程序的机器的结果。如果硬盘在进行操作的话,统计结果就不是那么准确了。

 leolein 回复于:2004-12-14 10:50:27
但这个也太不准了吧,相差几个G啊!

 leolein 回复于:2004-12-14 10:54:23
或者这样问吧:
    df和du哪个准确?

 ma_hu 回复于:2004-12-14 12:43:05
man du 
你仔细看一下 du的计算方法. 这两个命令都是准的,用处不一样.

 bear 回复于:2004-12-14 13:19:35
这个文档能给你一个满意的答复:)
Document Id: 26928Synopsis: du and df Differences (originally published 8/91)
Update date: 2001-05-13Description: du and df Differences
-- --- -- -----------

This article explains how reporting disk usage du and reporting free disk space
on file systems df may show different numbers.

du
--

The du user command gives the number of kilobytes contained in all files and,
recursively, directories within each specified directory or file (filename).
If filename is missing, `.' (the current directory) is used.  A file which
has multiple links to it is only counted once.

EXAMPLE:

  system % du

  5    ./jokes
  33   ./squash
  44   ./tech.papers/lpr.document
  217  ./tech.papers/new.manager
  401  ./tech.papers
  144  ./memos
  80   ./letters
  388  ./window
  93   ./messages
  15   ./useful.news
  1211 .

Note that the last number, 1211 is the grand total (in kilobytes) for the
directory.

df
--

The df user command displays the following information:

  amount of disk space oclearcase/" target="_blank" >ccupied by currently mounted file systems
  the amount of used and available space
  how much of the file system's total capacity has been used

Used without arguments, df reports on all mounted file systems.

EXAMPLE:

  system % df

  Filesystem  kbytes  used  avail  capacity  Mounted on
  /dev/ip0a    7445    4714 1986   70%       /
  /dev/ip0g   42277   35291 2758   93%       /usr

Note: used plus avail is less than the amount of space in the file system
(kilobytes) because the system reserves a fraction of the space in the file
system to allow its allocation routines to work well.  The amount reserved is
typically about 10%.  (This may be adjusted using the tunefs command.  Refer to
the man pages on tunefs(8) for more information.)  When all the space on a file
system, except for this reserve, is in use, only the super-user can allocate
new files and data blocks to existing files.  This, however, may cause the file
system to be over allocated.  When a file system is over allocated in this way,
df may report that the file system is more than 100% utilized.

If arguments to df are disk partitions (for example, /dev/ip0as or path names),
df produces a report on the file system containing the named file.  Thus, df
shows the amount of space on the file system containing the current directory.

Problem Definition
------- ----------

This section gives the technical explanation of why du and df sometimes report
different totals of disk space usage.

When a program that is running in the background writes to a file while the
process is running, the file to which this process is writing is deleted.
Running df and du shows a discrepancy in the amount of disk space usage.  The
df command shows a higher value.

Explanation Summary
----------- -------

When you open a file, you get a pointer.  Subsequent writes to this file
references this file pointer.  The write call does not check to see if the file
is there or not.  It just writes to the specified number of characters starting
at a predetermined location.  Regardless of whether the file exist or not, disk
blocks are used by the write operation.

The df command reports the number of disk blocks used while du goes through the
file structure and and reports the number of blocks used by each directory.  As
far as du is concerned, the file used by the process does not exist, so it does
not report blocks used by this phantom file.  But df keeps track of disk blocks
used, and it reports the blocks used by this phantom file.

 leolein 回复于:2004-12-14 17:34:43
谢谢,就是这个原因。
我因为磁盘快满了就删除了一些过期的文件,可能应用程序还在使用这些文件句柄,所以导致了我说的问题。
我把所有的应用程序都停止后,du和df的结果就大致相同了

 leolein 回复于:2004-12-14 17:36:48
谢谢bear 提供的文档及各位的帮助!

 nanaskylead 回复于:2004-12-14 17:36:53
不错,这是一个盲点。。。。。。

 bear 回复于:2004-12-14 20:47:08
其实这样也是避免文件系统满的另外一个方面,不清理就会造成文件系统满的假象。

 xhui 回复于:2004-12-14 21:02:47
这个问题我在AIX上也碰到了,我们的应用跑上一段时间(几周)后,用df和du统计出来的结果相差就很大(df统计值更大),有的时候有几百M, 甚至1、2个G,我把所有的应用全部停下来后还是没有什么改变,不知道为什么?不知有没有那位大侠知道

 bear 回复于:2004-12-14 21:25:58
[quote:d79831187a="xhui"]这个问题我在AIX上也碰到了,我们的应用跑上一段时间(几周)后,用df和du统计出来的结果相差就很大(df统计值更大),有的时候有几百M, 甚至1、2个G,我把所有的应用全部停下来后还是没有什么改变,不知道为什么?不?.........[/quote:d79831187a]
把那个文件系统umount试试

 吹拂的晨风 回复于:2004-12-14 22:17:45
bear提供的文档很不错,虽然在其他地方也见过类似的解释,可没有这些具体和明白,而且这样的讨论值得继续!顶一下!

 bear 回复于:2004-12-15 09:07:18
呵呵,我也是借花献佛的,原来自己也不是很清楚,因为基本没仔细做过系统管理员。文档中是给出了原因,但是处理手法可能有很多情况,欢迎有过处理经验的CUer跟点经验贴,也不枉斑竹个加的精华。

 xhui 回复于:2004-12-17 22:21:11
谢谢bear的回复!
unmount文件系统是可以的,以前试过。但是产生df和du不同的原因一直没有查到。按理说应用系统的进程全部终止后,操作系统应该释放进程占用的资源,可是实际上没有。不知道应用程序中什么样的调用会导致文件系统的“虚”增长。

 xiaoqiangxp 回复于:2005-04-12 16:33:42
我这边的solaris操作系统  用 df -k  看/export/homea占用空间为90G .用du -k看/export/homea占用空间为3G多,相差几十倍 哪位能知道这方面的原因?

 xiaoqiangxp 回复于:2005-04-13 12:37:26
When a file system is over allocated in this way, 
df may report that the file system is more than 100% utilized

那有可能 df   磁盘占用已经超了100%的情况?但是其实是正常的。业务不会受到影响?

原文转自:http://www.ltesting.net