df -h和du -h 占用空间为什么差这么多?

当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择。

df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。
   du可以查看文件及文件夹的大小。

两者配合使用,非常有效。比如用df查看哪个一级目录过大,然后用df查看文件夹或文件的大小,如此便可迅速确定症结。

下面分别简要介绍

df命令可以显示目前所有文件系统的可用空间及使用情形,请看下列这个例子:


以下是代码片段:

[[email protected] ~]$ df
-h
Filesystem           Size Used Avail Use% Mounted
on
/dev/sda1            3.9G 300M 3.4G  8%
/
/dev/sda7            100G 188M  95G  1%
/data0
/dev/sdb1            133G  80G  47G 64%
/data1
/dev/sda6            7.8G 218M 7.2G  3%
/var
/dev/sda5            7.8G 166M 7.2G  3%
/tmp
/dev/sda3            9.7G 2.5G 6.8G 27%
/usr
tmpfs                2.0G    0 2.0G  0%
/dev/shm

参数 -h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。

上面的命令输出的第一个字段(Filesystem)及最后一个字段(Mounted on)分别是档案系统及其挂入点。我们可以看到 /dev/sda1
这个分割区被挂在根目录下。

接下来的四个字段 Size、Used、Avail、及 Use% 分别是该分割区的容量、已使用的大小、剩下的大小、及使用的百分比。
FreeBSD下,当硬盘容量已满时,您可能会看到已使用的百分比超过 100%,因为 FreeBSD 会留一些空间给 root,让 root
在档案系统满时,还是可以写东西到该档案系统中,以进行管理。

 du:查询文件或文件夹的磁盘使用空间

如果当前目录下文件和文件夹很多,使用不带参数du的命令,可以循环列出所有文件和文件夹所使用的空间。这对查看究竟是那个地方过大是不利的,所以得指定深入目录的层数,参数:--max-depth=,这是个极为有用的参数!如下,注意使用“*”,可以得到文件的使用空间大小.

du
统计文件大小相加 
   df 统计数据块使用情况

如果有一个进程在打开一个大文件的时候,这个大文件直接被rm
或者mv掉,则du会更新统计数值,df不会更新统计数值,还是认为空间没有释放。直到这个打开大文件的进程被Kill掉。

如此一来在定期删除
/var/spool/clientmqueue下面的文件时,如果没有杀掉其进程,那么空间一直没有释放。

使用下面的命令杀掉进程之后,系统恢复。
   fuser -u
/var/spool/clientmqueue

客户那里一台主机出了问题,df
-h比du -h大了15G,邪门的很,google了一下。发现差异有两种。
1:meta
data导致不一致,但是相差应该不会很大。顶天百M左右,就是i-node那些元数据占用掉的。
2:root删除应用程序正在调用的打开的文件,通常是清理日志的时候,直接删除,而这时句柄文件仍然存在。在df
-h仍然显示空间未被释放。
最终确认是客户误删除了太大的日志文件。导致问题出现。重启应用程序即可。

检查方法:lsof
/softusedir | grep deleted

具体操作步骤如下:

KOOK-SLES9:~
# df -h
/soft
Filesystem            Size  Used
Avail Use% Mounted
on
/dev/mapper/vgroot-soft
                      20G  17G  2.4G  88% /soft
KOOK-SLES9:~ # du
-sh /soft
2.0G    /soft
KOOK-SLES9:~ # fuser -uv
/soft

USER        PID ACCESS
COMMAND
/soft                root    kernel mount  /soft

KOOK-SLES9:~ # lsof /soft | grep
delete
httpd    675  nobody    2w  REG  253,7  1243716399 2410028 /soft/IBMIHS/logs/error_log
(deleted)
httpd    675  nobody    6w  REG  253,7  1243716399 2410028 /soft/IBMIHS/logs/error_log
(deleted)
httpd    675  nobody    7w  REG  253,7 14072560792
2410026 /soft/IBMIHS/logs/access_log (deleted)
httpd    720  nobody    2w  REG  253,7  1243716399 2410028 /soft/IBMIHS/logs/error_log
(deleted)
httpd    720  nobody    6w  REG  253,7  1243716399 2410028 /soft/IBMIHS/logs/error_log
(deleted)
httpd    720  nobody    7w  REG  253,7 14072560792
2410026 /soft/IBMIHS/logs/access_log
(deleted)
httpd    1590  nobody    2w  REG  253,7  1243716399 2410028 /soft/IBMIHS/logs/error_log
(deleted)
httpd    1590  nobody    6w  REG  253,7  1243716399 2410028 /soft/IBMIHS/logs/error_log
(deleted)
httpd    1590  nobody    7w  REG  253,7 14072560792
2410026 /soft/IBMIHS/logs/access_log
(deleted)
httpd    4826    root    2w  REG  253,7  1243716399 2410028 /soft/IBMIHS/logs/error_log
(deleted)
httpd    4826    root    6w  REG  253,7  1243716399 2410028 /soft/IBMIHS/logs/error_log
(deleted)
httpd    4826    root    7w  REG  253,7 14072560792
2410026 /soft/IBMIHS/logs/access_log
(deleted)
httpd    4827  nobody    2w  REG  253,7  1243716399 2410028 /soft/IBMIHS/logs/error_log
(deleted)
httpd    4827  nobody    6w  REG  253,7  1243716399 2410028 /soft/IBMIHS/logs/error_log
(deleted)
httpd    4827  nobody    7w  REG  253,7 14072560792
2410026 /soft/IBMIHS/logs/access_log (deleted)
httpd  17505  nobody    2w  REG  253,7  1243716399 2410028 /soft/IBMIHS/logs/error_log
(deleted)
httpd  17505  nobody    6w  REG  253,7  1243716399 2410028 /soft/IBMIHS/logs/error_log
(deleted)
httpd  17505  nobody    7w  REG  253,7 14072560792
2410026 /soft/IBMIHS/logs/access_log (deleted)
KOOK-SLES9:~ # lsof /soft |
head -2
COMMAND  PID    USER  FD  TYPE
DEVICE        SIZE    NODE
NAME
httpd    675  nobody  txt    REG  253,7      473649
2410022 /soft/IBMIHS/bin/httpd
KOOK-SLES9:~ # ps aux | grep
675
nobody    675  0.0  0.1  73340 14436
?        Sl  11:12  0:06 /soft/IBMIHS/bin/httpd -d /soft/IBMIHS -k
start
root      6594  0.0  0.0  1716  656 pts/2    S+  13:10  0:00 grep 675
KOOK-SLES9:~ # ps aux | grep IBMIHS | grep
httpd
root      4826  0.0  0.1  14036
10424
?        Ss    2008  0:02 /soft/IBMIHS/bin/httpd -d /soft/IBMIHS -k
start
nobody    4827  0.0  0.0  3660  2064
?        S    2008  0:00 /soft/IBMIHS/bin/httpd -d /soft/IBMIHS -k
start
nobody  17505  0.0  0.1  71968
13208 ?        Sl  Apr08  0:00 /soft/IBMIHS/bin/httpd -d /soft/IBMIHS -k
start
nobody    675  0.0  0.1  73340 14436
?        Sl  11:12  0:06 /soft/IBMIHS/bin/httpd -d /soft/IBMIHS -k
start
nobody    720  0.0  0.1  73120 13952
?        Sl  11:12  0:06 /soft/IBMIHS/bin/httpd -d /soft/IBMIHS -k
start
nobody    1590  0.0  0.1  72056
13912 ?        Sl  11:26  0:05 /soft/IBMIHS/bin/httpd -d /soft/IBMIHS -k
start

摘自:http://blog.sina.com.cn/s/blog_465311c101013gkh.html

===========================================

扩展阅读:tmpfs基于内存的临时文件系统

===========================================

我们df 的时候会看到一行 
[[email protected] ~]# df
Filesystem                   1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root  18102140 1429428  15753160   9% /
tmpfs                           146844       0    146844   0% /dev/shm
/dev/sda1                       495844   31636    438608   7% /boot

它的大小为 146844,这个数值其实正好是内存大小的一半:
[[email protected] ~]# free
             total       used       free     shared    buffers     cached
Mem:       293692     203528      90164          0      15880     125184
-/+ buffers/cache:      62464     231228
Swap:      2064376          0    2064376

这个tmpfs到底是什么呢? 其实它是一个临时文件系统,驻留于内存中,使用它可以提高文件访问速度,并能保证重启时会自动清除这些文件。只不过驻留在这里的文件是容易丢失的,因为内存数据是不会像硬盘中的数据那样可以永久存在。知道了tmpfs的这个特性后,我们就可以把一些对读写性能要求较高,但是数据又可以丢失的这样的数据就可以保存在/dev/shm中,你也可以认为这里就是内存。既然/dev/shm是内存,那么想当然,我们不能把全部内存都挂载到这个目录下,系统默认只分一半是有道理的。那么我们能不能更改这个tmpfs的大小? 当然可以!

[[email protected] ~]# mount -o remount,size=180M tmpfs /dev/shm
[[email protected] ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   18G  1.4G   16G   9% /
tmpfs                         180M     0  180M   0% /dev/shm
/dev/sda1                     485M   31M  429M   7% /boot

所以说,这个tmpfs是可以更改的,但这种办法知识临时的,重启后还会恢复内存大小的一半。那如何让他永久生效?、
[[email protected] ~]# vi /etc/fstab  //编辑/etc/fstab, 把tmpfs这一行改为:
tmpfs                   /dev/shm                tmpfs   defaults,size=180M        0 0

这样就可以啦。

时间: 2024-12-25 06:19:40

df -h和du -h 占用空间为什么差这么多?的相关文章

linux 故障:df -h统计磁盘空间占用太多,但又du -h找不到大的文件

用lsof / | grep -i delete 从根目录定位打开的被删除的文件 如果定位到某文件占用空间很大 主要是因为我们在删除这个日志文件的时候是用rm -rf *.log这样的命令删除的,删除日志之后又没有重启相应的进程,导致inode节点不被释放,空间一直被占用.如果我们用echo “ ” > /logpath/201109.log这样的命令来清空日志 相关工具: df -h du -h du -sh du -h --max-depth=1 lsof / | grep -i delet

诡异的磁盘空间100%报警分析得出df -h与du -sh的根本性差别

前言:早晨磁盘报警刚清空完tomcat和nginx日志,使用的命令是类似echo "" > show_web-error.log或者> show_web-debug.log清空语句,然后rm -rf 掉一些tar.gz包,空出来30G空间.而且也关闭了tomcat的debug信息.刚刚又接到报警,磁盘100%了.怎么回事??1,进去df -h下,确实100%了,如下所示:[[email protected] ~]# df -h文件系统              容量  已用

linux 查看文件夹大小 du -h --max-depth=1 ./

du:查询文件或文件夹的磁盘使用空间 如果当前目录下文件和文件夹很多,使用不带参数du的命令,可以循环列出所有文件和文件夹所使用的空间.这对查看究竟是那个地方过大是不利的,所以得指定深入目录的层数,参数:--max-depth=,这是个极为有用的参数!如下,注意使用“*”,可以得到文件的使用空间大小. 提醒:一向命令比linux复杂的FreeBSD,它的du命令指定深入目录的层数却是比linux简化,为 -d. 以下是代码片段: [[email protected] yayu]# du -h -

Linux中查看各文件夹大小命令du -h --max-depth=1

du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>] [--max-depth=<目录层数>][--help][--version][目录或文件] 常用参数: -a或-all 为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况. -b或-bytes 显示目录或文件大小时,以byte为单位. -c或–total 除了显示目录或文件的大小外,同时也显

df 命令。 du命令。创建、格式化和挂载分区,fstab分区表

一.df 命令. 查看已挂载磁盘的总容量.使用容量.剩余容量.可以不加任何参数,默认按K为单位显示. #df -i 查看inodes使用情况. #df -h 使用合适的单位显示,例如 G. #df -k -m 分别以k M 为单位显示. #df -T ,查看分区的文件类型 #free 查看swap分区大小 二.du命令 用来查看某个目录或者文件所占空间大小. #du -a dir 列出全部目录或文件 #du -b 列出的值以bytes为单位. #du -k 以kb为单位列出 #du -m 以MB

十四、df命令、du命令、磁盘分区

监控磁盘的使用率至关重要,在日常监控工作中必须要做. 一.df命令 df(disk filesystem)命令:用于查看已挂载磁盘的总容量.使用容量.剩余容量等,可以不加任何选项,默认以KB为单位显示.示例命令: # df 文件系统          1K-块       已用         可用               已用%   挂载点 /dev/sda3       16561152 1030204  15530948      7%         / devtmpfs      

Standard C 之 math.h和float.h

对于C Standard Library 可以参考:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/ 或者 http://www.cplusplus.com/reference/ (一) <math.h> 常用函数: 1. 三角函数 double sin(double);正弦 double cos(double);余弦 double tan(double);正切 2 .反三角函数 double asin (double); 结果介于[-PI/2,

VS2013使用winsock.h和winsock2.h发生冲突后的终极解决方法

问题:彻底无语了,不小心某个文件包含了windows.h头文件,而windows.h文件里面包含着winsock.h文件, 如果你下次使用winsock2.h文件时,位置不对,然后编译器会给你一大堆重定义错误问题. 初级解决办法: 把winsock2.h文件放在任何可能包含winsock.h文件(尤其是windows.h文件,它就包含了winsock.h文件)的前面,因为winsock2.h头文件有这样的宏定义: #ifndef _WINSOCK2API_#define _WINSOCK2API

最简单的基于librtmp的示例:发布H.264(H.264通过RTMP发布)

本文记录一个基于libRTMP的发布H.264码流的程序.该程序可以将H.264数据发布到RTMP流媒体服务器.目前这个例子还不是很稳定,下一步还有待修改. 本程序使用回调函数作为输入,通过自定义的回调函数,可以发送本地的文件或者内存中的数据. 函数调用结构图 本程序的函数调用结构图如下所示. 整个程序包含3个接口函数:RTMP264_Connect():建立RTMP连接.RTMP264_Send():发送数据.RTMP264_Close():关闭RTMP连接.按照顺序调用上述3个接口函数就可以