Linux查看文件系统硬盘使用情况(df命令)完全指南

在Linux系统中,磁盘空间管理是运维和开发人员的核心技能之一。当系统出现“磁盘空间不足”错误、应用响应缓慢或日志写入失败时,首先需要确认的就是文件系统的磁盘使用情况。df命令(全称“Disk Free”)是Linux中最常用的磁盘空间查看工具,它能快速报告所有挂载的文件系统的总容量、已用空间、可用空间及挂载点等关键信息。

无论是日常巡检、故障排查还是容量规划,df命令都是不可或缺的利器。本文将从基础语法到高级实战,全面解析df命令的使用方法,帮助你轻松掌握磁盘空间监控技巧。

目录#

  1. 简介
  2. df命令基础
  3. 常用选项详解
  4. 输出结果深度解读
  5. 实战场景与示例
  6. 最佳实践与注意事项
  7. 常见问题与解决方案
  8. 总结
  9. 参考资料

2. df命令基础#

2.1 什么是df命令#

df命令是Linux/Unix系统自带的工具,用于显示文件系统的磁盘空间使用情况。它通过读取/proc/mounts(或/etc/mtab)获取挂载信息,并查询文件系统的超级块(Super Block)来计算空间使用数据。与关注文件级空间使用的du命令不同,df专注于文件系统级的整体状态。

2.2 基本语法#

df命令的基本格式如下:

df [选项] [文件/目录]
  • 选项:控制输出格式、筛选内容等(详见第3节)。
  • 文件/目录(可选):指定要查询的文件或目录所在的文件系统。如果省略,则默认显示所有挂载的文件系统。

3. 常用选项详解#

df命令的功能通过选项扩展,以下是最常用且实用的选项:

3.1 -h (--human-readable):人类可读格式#

作用:将字节数转换为KB、MB、GB等易读单位(1K=1024字节,1M=1024K,1G=1024M)。
场景:日常查看时必用,避免直接面对冗长的字节数字。

示例

df -h

输出

文件系统        容量  已用  可用 已用% 挂载点
/dev/sda1        20G  8.5G   11G  45% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
/dev/sdb1       100G   30G   70G  30% /data

解读/dev/sda1(系统盘)总容量20G,已用8.5G,可用11G,使用率45%,挂载在根目录/

3.2 -T (--print-type):显示文件系统类型#

作用:在输出中增加“文件系统类型”列(如ext4、xfs、tmpfs、nfs等)。
场景:需要区分本地磁盘、虚拟文件系统或远程文件系统时使用。

示例

df -hT

输出

文件系统        类型      容量  已用  可用 已用% 挂载点
/dev/sda1       ext4       20G  8.5G   11G  45% /
tmpfs           tmpfs     3.9G     0  3.9G   0% /dev/shm
/dev/sdb1       xfs       100G   30G   70G  30% /data
192.168.1.100:/nfs_share  nfs4      50G   20G   30G  40% /mnt/nfs

解读:新增的“类型”列清晰显示:/dev/sda1是ext4格式,/mnt/nfs是NFS远程文件系统。

3.3 -i (--inodes):查看inode使用情况#

作用:显示inode的使用情况(而非磁盘空间),包括总inode数、已用数、可用数及使用率。
场景:排查“磁盘空间未用尽但无法创建文件”问题(通常因inode耗尽导致)。

示例

df -i

输出

文件系统        Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda1      1048576  123456   925120     12% /
tmpfs           1000000       1   999999      1% /dev/shm
/dev/sdb1      5242880  500000  4742880      9% /data

解读/dev/sda1总inode数为1048576(约100万),已用12万,使用率12%,远未耗尽。若“已用(I)%”接近100%,即使磁盘空间充足,也无法创建新文件。

3.4 -a (--all):显示所有文件系统#

作用:默认情况下,df会排除一些特殊文件系统(如/proc/systmpfs等虚拟文件系统),-a选项会强制显示所有文件系统,包括这些“零容量”的虚拟系统。
注意:输出会包含大量无实际意义的虚拟文件系统,需结合筛选工具使用。

示例

df -ah | grep -vE 'tmpfs|udev|proc|sysfs'  # 排除虚拟文件系统,只保留有实际存储的

输出

文件系统        容量  已用  可用 已用% 挂载点
/dev/sda1        20G  8.5G   11G  45% /
/dev/sdb1       100G   30G   70G  30% /data
192.168.1.100:/nfs_share  50G   20G   30G  40% /mnt/nfs

3.5 -x (--exclude-type):排除指定类型文件系统#

作用:排除指定类型的文件系统(如tmpfs、devtmpfs、nfs等),常用于只关注本地物理磁盘。
语法df -x 类型1 -x 类型2 ...(可多次使用排除多种类型)。

示例:只显示物理磁盘(排除tmpfs、devtmpfs、nfs):

df -hT -x tmpfs -x devtmpfs -x nfs

输出

文件系统        类型  容量  已用  可用 已用% 挂载点
/dev/sda1       ext4   20G  8.5G   11G  45% /
/dev/sdb1       xfs   100G   30G   70G  30% /data

3.6 --output:自定义输出列#

作用:默认输出列固定,--output允许自定义需要显示的列(如只显示挂载点、容量、使用率),灵活满足个性化需求。
常用列参数source(文件系统源)、fstype(类型)、size(容量)、used(已用)、avail(可用)、pcent(使用率)、target(挂载点)。

示例:只显示“挂载点、容量、已用、使用率”:

df -h --output=target,size,used,pcent

输出

挂载点         容量  已用 已用%
/              20G  8.5G  45%
/dev/shm       3.9G     0   0%
/data          100G   30G  30%
/mnt/nfs       50G   20G  40%

4. 输出结果深度解读#

4.1 默认输出列含义#

df -hT的输出为例,各列含义如下:

列名(中文)列名(英文)含义
文件系统Filesystem文件系统的设备名(如/dev/sda1)或远程挂载路径(如192.168.1.100:/nfs_share)。
类型Type文件系统格式(如ext4、xfs、nfs4)。
容量Size文件系统总容量。
已用Used已使用的磁盘空间(包含系统保留空间,默认约5%)。
可用Avail实际可用于普通用户的空间(总容量 - 已用 - 保留空间)。
已用%Use%已用空间占总容量的百分比(包含保留空间)。
挂载点Mounted on文件系统在Linux目录树中的挂载路径(如//data)。

注意可用列的值通常小于“总容量 - 已用”,因为Linux会为root用户预留约5%的空间(防止普通用户占满磁盘导致系统崩溃)。可通过tune2fs -m 2 /dev/sda1调整保留比例(如改为2%)。

4.2 特殊文件系统说明#

输出中常见的特殊文件系统及其特点:

文件系统类型特点示例挂载点
tmpfs基于内存的临时文件系统,重启后数据丢失,用于临时文件(如/tmp)。/dev/shm/tmp
devtmpfs存储设备节点(如/dev/sda),内核自动管理,大小固定。/dev
proc虚拟文件系统,提供内核和进程信息(如/proc/cpuinfo),无实际大小。/proc
sysfs虚拟文件系统,用于内核设备驱动管理,无实际大小。/sys
nfs/smbfs远程文件系统,数据存储在网络中的其他服务器,容量取决于远程服务器。/mnt/nfs

5. 实战场景与示例#

5.1 快速查看整体磁盘使用情况#

需求:快速了解服务器所有挂载点的磁盘使用概况。
命令

df -hT

输出:直观展示各挂载点的容量、已用、可用及文件系统类型,适合日常巡检。

5.2 检查特定分区/挂载点#

需求:只关注/data分区的使用情况(如判断是否需要扩容)。
命令

df -h /data  # 或 df -hT /data

输出

文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb1       100G   30G   70G  30% /data

5.3 排查inode耗尽问题#

症状:磁盘空间充足(df -h显示可用空间>10%),但创建文件时提示“设备上没有空间”(No space left on device)。
排查命令

df -i  # 检查inode使用率

解决方案:删除大量小文件(如日志、缓存文件)释放inode。例如清理/var/log下的旧日志:

find /var/log -name "*.log" -mtime +30 -delete  # 删除30天前的日志文件

5.4 筛选物理磁盘分区#

需求:排除虚拟文件系统(tmpfs、proc等),只显示物理磁盘(如/dev/sda/dev/sdb)。
命令

df -hT -x tmpfs -x devtmpfs -x proc -x sysfs

输出:仅包含物理磁盘分区和远程文件系统,减少干扰信息。

5.5 监控远程文件系统(如NFS/Samba)#

需求:检查挂载的NFS共享是否正常,以及远程磁盘使用情况。
命令

df -hT | grep -E 'nfs|cifs'  # 筛选NFS或Samba(cifs)文件系统

输出

192.168.1.100:/nfs_share  nfs4      50G   20G   30G  40% /mnt/nfs
//192.168.1.200/share     cifs      200G   50G  150G  25% /mnt/smb

6. 最佳实践与注意事项#

6.1 始终使用-h提高可读性#

原始输出(无-h)以字节为单位,数值冗长(如20971520表示20GB),难以直观理解。日常使用务必添加-h选项

6.2 定期监控与告警#

通过脚本或监控工具(如Prometheus+Grafana、Zabbix)定期执行df -h,当使用率超过阈值(如85%)时触发告警,避免磁盘空间耗尽。
示例脚本(检查并告警):

#!/bin/bash
THRESHOLD=85  # 使用率阈值
df -h | awk 'NR>1 && $5+0 > '"$THRESHOLD"' {print "警告:"$0}' | mail -s "磁盘空间告警" [email protected]

6.3 inode使用与磁盘空间同等重要#

新手常忽略inode监控,导致“空间充足却无法创建文件”的问题。定期执行df -i检查inode使用率,尤其是存储大量小文件的服务器(如日志服务器、数据库服务器)。

6.4 避免被虚拟文件系统干扰#

使用-x选项排除tmpfs、devtmpfs等虚拟文件系统,或通过grep筛选物理磁盘:

df -hT | grep -E 'ext4|xfs|btrfs'  # 只显示常见物理文件系统类型

6.5 结合其他命令增强分析能力#

  • 排序:按使用率从高到低排序,快速定位最满的分区:
    df -h | sort -k5nr  # -k5:按第5列(已用%)排序,-nr:数字倒序
  • 查找大文件:结合du命令定位占用空间的大文件:
    df -h /data  # 发现/data使用率高
    du -sh /data/* | sort -hr  # 查找/data下的大目录/文件

7. 常见问题与解决方案#

7.1 df与du结果不一致?#

现象df -h /显示/分区已用80%,但du -sh /*统计的总大小仅占50%。
原因df统计的是文件系统的块使用情况,而du统计的是文件实际大小,差异可能来自:

  1. 已删除但未关闭的文件:进程打开的文件被删除后,df仍视为“已用”,直到进程关闭文件。
  2. 文件系统保留空间:Linux为root预留的5%空间,du无法统计。
  3. 隐藏文件/目录du /*未包含/proc/sys等虚拟文件系统或隐藏文件(如.bash_history)。

解决方案

  • 检查已删除但未关闭的文件:lsof | grep deleted,重启对应进程释放空间。
  • 统计所有文件(包括隐藏文件):du -sh / 2>/dev/null2>/dev/null忽略错误)。

7.2 文件已删除但磁盘空间未释放?#

原因:文件被删除,但有进程仍在打开该文件(如日志文件被删除后,服务未重启),此时文件句柄未释放,空间不会被回收。
验证:通过lsof查找已删除的打开文件:

lsof | grep deleted | grep -E '/var/log|/tmp'  # 重点检查日志和临时文件目录

解决:重启持有文件句柄的进程,或通过echo > /path/to/deleted/file清空文件(无需重启进程)。

8. 总结#

df命令是Linux磁盘空间监控的基石,通过灵活运用-h(可读格式)、-T(文件系统类型)、-i(inode监控)等选项,可快速掌握文件系统状态。结合dulsof等工具,能深入排查磁盘空间问题。记住以下核心要点:

  • 日常巡检用df -hT,关注“已用%”和“类型”列;
  • 排查inode问题用df -i
  • 筛选物理磁盘用-x排除虚拟文件系统;
  • 结合sortgrep等命令提升效率。

掌握df命令,让磁盘空间管理不再盲目!

9. 参考资料#


希望本文能帮助你全面掌握df命令的使用!如有疑问或补充,欢迎在评论区交流。