一般情况下,检查服务器磁盘空间满没满,使用df -h命令查看即可。但有时候也会出现df -h查看使用率未达到100%,但是系统却提示“no space left on device”。
这里涉及到两个概念,block和inode,分别使用df -h和df -i命令查看
-h, --human-readable
print sizes in human readable format (e.g., 1K 234M 2G)
-i, --inodes
list inode information instead of block usage
可以看到-i的选项说明里面提到了2个关键词,“inode information”和“block usage”
这里简单解释一下:
inode:用于记录文件属性,一个文件占用一个inode。
block:用于存储数据文件,较大的文件会占用多个block。
再举个具体的例子说明一下:
618大促,商家要准备很多货物,所以采购了一批货架,这里货架就是文件系统,货架上面的一个个架子就是一个个block,架子上面放的商品就是文件,有的商品会占用多个货架,每个商品的吊牌/标签就是inode。唯一不同的是货架和商品都是物理可见的,而block和inode是虚拟的概念,代表的本质是数据。
查看一下截图信息,将block和inode使用情况进行对比:
[root@test ~]# df -hi
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root 24M 33K 24M 1%
devtmpfs 120K 388 119K 1% dev
tmpfs 123K 1 123K 1% dev/shm
tmpfs 123K 480 122K 1% run
tmpfs 123K 16 123K 1% /sys/fs/cgroup
/dev/sda1 512K 327 512K 1% /boot
tmpfs 123K 1 123K 1% /run/user/0
[root@test ~]# df -hl
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 47G 11G 37G 22% /
devtmpfs 478M 0 478M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.7M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 1014M 125M 890M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
以根目录为例,block总空间是47G,已经使用了11G,使用率为22%。Inode的总空间为24M,已经使用了33K,使用率为1%。
所以,两种空间使用率需要区别对待:
对于大文件比较多的Linux服务器,更容易出现的是block空间满,也就是“df -h”或者“df -hl”命令看到使用率达到100%。
使用du -sh *命令,可以查看哪个文件夹下面的文件比较大
[root@test /]# du -sh *
0 bin
93M boot
168M data
0 dev
30M etc
0 home
0 lib
0 lib64
0 media
5.1G mnt
0 opt
0 proc
48K root
6.7M run
0 sbin
0 srv
0 sys
12K tmp
4.7G usr
228M var
0 yum
对于小文件比较多的Linux服务器,更容易出现的是inode空间满,也就是“df -i”或者“df -hi”命令看到使用率达到100%。
使用 ls -lR|grep "^-"| wc -l可以查看当前文件夹下面的文件数量(包括子目录)
使用 ls -lR var|grep "^-"| wc -l可以查看具体某个目录下面文件夹数量(包括子目录)
[root@test /]# ls
bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var yum
[root@test /]# ls -lR|grep "^-"| wc -l
83423
[root@test /]# ls -lR var|grep "^-"| wc -l
3316
有时候发现Linux系统提示“no space left on device”的错误时候,有可能是block满了,也有可能是inode满了!