查看Linux系统中磁盘空间使用情况及大文件明细查询方法

一、查看Linux磁盘空间使用情况:

df命令

df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

语法:
df(选项)(参数)
选项:
-a或--all:包含全部的文件系统;
--block-size=<区块大小>:以指定的区块大小来显示区块数目;
-h或--human-readable:以可读性较高的方式来显示信息;
-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;
-i或--inodes:显示inode的信息;
-k或--kilobytes:指定区块大小为1024字节;
-l或--local:仅显示本地端的文件系统;
-m或--megabytes:指定区块大小为1048576字节;
--no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值;
-P或--portability:使用POSIX的输出格式;
--sync:在取得磁盘使用信息前,先执行sync指令;
-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息;
-T或--print-type:显示文件系统的类型;
-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;
--help:显示帮助;
--version:显示版本信息。
实例:
  1. 查看系统磁盘设备,默认是KB为单位,使用-h选项以KB以上的单位来显示,可读性高:
[root@localhost bin]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        471M     0  471M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  8.3M  478M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda3        18G  6.0G   12G  34% /
/dev/sda1       297M  229M   69M  77% /boot
tmpfs            98M   12K   98M   1% /run/user/42
tmpfs            98M     0   98M   0% /run/user/0
  1. 查看全部文件系统:
[root@LinServ-1 ~]# df -a
文件系统               1K-块        已用     可用 已用% 挂载点
/dev/sda2            146294492  28244432 110498708  21% /
proc                         0         0         0   -  /proc
sysfs                        0         0         0   -  /sys
devpts                       0         0         0   -  /dev/pts
/dev/sda1              1019208     62360    904240   7% /boot
tmpfs                  1032204         0   1032204   0% /dev/shm
/dev/sdb1            2884284108 218826068 2518944764   8% /data1
none                         0         0         0   -  /proc/sys/fs/binfmt_misc

二、查看Linux文件及目录磁盘空间使用情况:

du命令

du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。

语法:
du [选项][文件]
选项:
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k或--kilobytes 以KB(1024bytes)为单位输出。
-m或--megabytes 以MB为单位输出。
-s或--summarize 仅显示总计,只列出最后加总的值。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
-D或--dereference-args 显示指定符号链接的源文件大小。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
-l或--count-links 重复计算硬件链接的文件。
实例:
  1. 显示目录或者文件所占空间。只显示当前目录下面的子目录的目录大小和当前目录的总的大小,最下面的1288为当前目录的总大小:
[root@localhost test]# du
608 ./test6
308 ./test4
4 ./scf/lib
4 ./scf/service/deploy/product
4 ./scf/service/deploy/info
12 ./scf/service/deploy
16 ./scf/service
4 ./scf/doc
4 ./scf/bin
32 ./scf
8 ./test3
1288 .
  1. 显示指定文件或目录所占空间(如果接的是目录,仅会显示目录及子目录所占空间大小):
[root@localhost shell_22_num]# du -h test.sh
4.0K    test.sh
  1. 显示多个文件所占空间:
[root@localhost shell_22_num]# du -h test.sh test1.sh
4.0K    test.sh
4.0K    test1.sh

三、当磁盘空间不足时,查看大文件明细排查方法:

  1. 先查询哪个磁盘占空间较大:
[root@localhost shell_22_num]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        471M     0  471M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  8.3M  478M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda3        18G  6.0G   12G  34% /
/dev/sda1       297M  229M   69M  77% /boot
tmpfs            98M   12K   98M   1% /run/user/42
tmpfs            98M     0   98M   0% /run/user/0
  1. 查询磁盘所有文件中,大空间文件情况:
[root@localhost shell_22_num]# du -sh /*|grep G
du: cannot access ‘/proc/15839/task/15839/fd/3’: No such file or directory
du: cannot access ‘/proc/15839/task/15839/fdinfo/3’: No such file or directory
du: cannot access ‘/proc/15839/fd/3’: No such file or directory
du: cannot access ‘/proc/15839/fdinfo/3’: No such file or directory
4.9G    /usr

-s:只显示总计大小;-h:以K,M,G为单位,提高信息的可读性;/*:全部路径文件;grep G:抓取容量单位是G的文件(大于等于1G的文件都会被抓到)。

  1. 一步步精准定位具体目录及文件:
[root@localhost shell_22_num]# du -sh /usr/*|grep G 
1.1G    /usr/lib
1.8G    /usr/lib64
1.5G    /usr/share
  1. 这种方法只能大致粗略定位,再往细了可能会翻车。就想下图所示:
    因为路径中含有关键词“G”而被显示出来。
[root@localhost shell_22_num]# du -sh /usr/lib64/*|grep G
^[[5~124K       /usr/lib64/GConf
0       /usr/lib64/libEGL_mesa.so.0
244K    /usr/lib64/libEGL_mesa.so.0.0.0
0       /usr/lib64/libEGL.so.1
84K     /usr/lib64/libEGL.so.1.1.0
0       /usr/lib64/libGeoIP.so.1
196K    /usr/lib64/libGeoIP.so.1.5.0
0       /usr/lib64/libGLdispatch.so.0
628K    /usr/lib64/libGLdispatch.so.0.0.0
0       /usr/lib64/libGLESv1_CM.so.1
48K     /usr/lib64/libGLESv1_CM.so.1.2.0
0       /usr/lib64/libGLESv2.so.2
76K     /usr/lib64/libGLESv2.so.2.1.0
0       /usr/lib64/libGLEW.so.1.10
544K    /usr/lib64/libGLEW.so.1.10.0
0       /usr/lib64/libGL.so.1
572K    /usr/lib64/libGL.so.1.7.0
0       /usr/lib64/libGLU.so.1
516K    /usr/lib64/libGLU.so.1.3.1
0       /usr/lib64/libGLX_mesa.so.0
492K    /usr/lib64/libGLX_mesa.so.0.0.0
0       /usr/lib64/libGLX.so.0
76K     /usr/lib64/libGLX.so.0.0.0
0       /usr/lib64/libGLX_system.so.0

所以,明细部分需要直接使用du -sh [绝对路径下的文件名] 来查看。
确定文件后,就可以详细查询了。可以使用ls -lh [文件名] 等命令查看。

  1. 确认文件是否可以删除,再进行处理。

四、案例:如果向磁盘写入数据提示错误:no space left on device(磁盘空间不足)。通过df -h查看磁盘空间,发现没满。请问可能原因是什么?

iNode用光了。

通过使用命令df -i可以查询iNode使用情况。

[root@localhost shell_22_num]# df -i
Filesystem       Inodes  IUsed    IFree IUse% Mounted on
devtmpfs         120550    380   120170    1% /dev
tmpfs            124466      1   124465    1% /dev/shm
tmpfs            124466    877   123589    1% /run
tmpfs            124466     16   124450    1% /sys/fs/cgroup
/dev/sda3      18566144 190479 18375665    2% /
/dev/sda1        281232    358   280874    1% /boot
tmpfs            124466      9   124457    1% /run/user/42
tmpfs            124466      1   124465    1% /run/user/0

模拟测试环境:

通过hdfs ui 查看用户id 查询hdfs空间使用情况_通过hdfs ui 查看用户id


通过hdfs ui 查看用户id 查询hdfs空间使用情况_通过hdfs ui 查看用户id_02


上图可见,/dev/sdc磁盘空间仍有富裕,而iNode已满。无法创建log文件。

解决方法:干掉这些log文件。

通过hdfs ui 查看用户id 查询hdfs空间使用情况_符号链接_03

五、磁盘空间不足的其他原因

1、block满了。
2、inode满了(详细见第四部分)。
3、block 硬链接数量为0,进程调用数不为0,文件没有被彻底删除磁盘空间不足。

就酱。

PS:老年人不适合烫脚。