作为 Linux 管理人员,需要及时关注磁盘空间的使用情况,如果剩余容量越来越小时,为了避免影响业务,就需要及时进行扩容操作。本文主要介绍在 Linux 系统中如何查看剩余磁盘以及文件夹空间的命令。
1. du
功能说明: du
命令可以用于统计磁盘空间的使用情况,这个命令有助于我们找出哪个文件过多地占用了磁盘空间。
语法格式:
du [option] [file]du [选项] [文件或目录]
常用参数说明:
-a:显示所有文件大小
-h:以人类可读的方式查看大小
-s:显示文件的总大小
示例:
通过 -a
显示所有目录或文件所占空间,显示当前目录下所有文件,包括隐藏文件及子目录下的所有文件的大小。
[user1@VM-16-64-centos ~]$ cd /etc/
[user1@VM-16-64-centos etc]$ du -a
4 ./netconfig
4 ./cron.weekly
4 ./rhsm/syspurpose/valid_fields.json
8 ./rhsm/syspurpose
12 ./rhsm
4 ./shadow-
......
-s
与 -h
的使用:
[root@VM-16-64-centos etc]# du -sh
24M .
2. df
这个命令的作用就是 report file system disk space usage 即输出文件系统磁盘空间使用情况,是一个很基础的命令,平时也用的比较多,我们看一下执行这条命令的的输出:
[user1@VM-16-64-centos ~]$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 398M 0 398M 0% /dev
tmpfs tmpfs 411M 24K 411M 1% /dev/shm
tmpfs tmpfs 411M 432K 411M 1% /run
tmpfs tmpfs 411M 0 411M 0% /sys/fs/cgroup
/dev/vda1 ext4 9.8G 6.1G 3.3G 65% /
tmpfs tmpfs 83M 0 83M 0% /run/user/0
/dev/vdb ext4 9.8G 37M 9.3G 1% /data
选项解释:
-T:打印文件系统类型
-h:以人类可读的方式打印出空间大小
命令和选项都很好理解,可以看到,这个命令的输出有 7 列,分别代表的意思解释如下:
Filesystem:文件系统对应的设备文件的路径名即硬盘上的分区
Type:文件系统的类型
Size:文件系统的总大小
Used:文件分区的使用大小
Avail:文件分区的可用大小
Use%:文件分区使用的百分比
Mounted on:文件系统的挂载点
**注意:**第 4 列和第 5 列之和不等于第 3 列是因为默认的每个分区都预留了少量空间供 root 使用。即使遇到空间已满的情况,root 仍能登录和拥有解决问题所需的工作空间。
常用相关命令总结:
-
df -hl:查看磁盘剩余空间 -
df -h:查看每个根路径的分区大小 -
du -sh [目录名]:返回该目录的大小 -
du -sm [文件夹]:返回该文件夹总 M 数 -
du -h [目录名]:查看指定文件夹下的所有文件大小(其中包含子文件夹)
df
命令以磁盘分区为单位查看文件系统,然后获取硬盘被占用的空间,以及目前还剩多少存储空间等。du
命令的英文原译为 ” disk usage “,其含义为显示磁盘上空间的使用情况,用于查看当前目录的总大小。以上介绍的两个命令都是用来查看磁盘空间相关,平时使用频率也比较高,希望通过今天的介绍可以让大家对两个命令有所了解。
最后这里在跟大家分享一个工作中遇到的案例,之前有客户来提问,为什么机器上磁盘空间还有,但是在写入操作时却显示 “no space left on device“,遇到这个报错不要慌。今天就来告诉大家原因,这种情况一般都是因为磁盘的 inode 节点满导致的,可以使用 ” df -i ” 查看,会发现相应的分区是 100%。这种情况的发生是因为系统里小文件过多占用了大量的 inode 节点。服务器上小文件过多,导致 inode 节点急剧增加,消耗 inode 区域的空间。
改进方法:
可以通过 du -lh --max-depth=1
查看当前目录下每个目录和文件的实际总容量,判断哪个目录占用空间太大。
或者使用 du -sh /[^p]*
查看根目录下哪个文件夹大小异常,再深入查找占空间的文件。如果文件上找不到占空间的,要考虑 lsof | grep delete
,查找这种进程未释放的空间(原理是进程使用了这个文件,文件被删除后,进程一直占着,未释放,就会导致系统里看不到文件,但是空间被占满问题)。重启进程就能释放。