Linux df 命令实战:搞懂 df -h/df -i,再也不怕磁盘空间异常!

199 阅读4分钟

日常运维中,你是否遇到过这些 “诡异” 场景?

✅ 系统提示 “磁盘空间不足”,但肉眼看还有剩余空间;

✅ 想创建新文件却失败,df -h查磁盘明明没满;

✅ 定期巡检不知道该看磁盘容量还是 inode?

其实核心问题就两个:磁盘空间inode 资源。本文用 “场景 + 实战” 的方式,把df -hdf -i讲透,让你 5 分钟搞定磁盘异常排查。

一、先搞懂:df 命令的两个核心监控维度

df(disk free)是 Linux 查看磁盘使用的基础命令,但加不同参数,关注的核心完全不同:

  • df -h:看 “磁盘空间”(存文件数据的空间);
  • df -i:看 “inode 资源”(文件的 “身份证”,没它文件就无法被识别)。

💡 核心区别:磁盘空间和 inode 是两套独立资源,任一耗尽都会导致 “无法创建文件”,这是排查的关键!

二、df -h:直观查磁盘空间,新手也能看懂

1. 核心作用

-h是 “human-readable” 的缩写,翻译过来就是 “人类能看懂的格式”—— 把磁盘大小从 “原始块数” 转换成 GB/MB/KB,不用手动换算。

2. 实战示例(附详细注释)

执行df -h,输出如下(关键列标粗解释):

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   20G   28G  42% /  # 根目录
/dev/sdb1       100G   60G   40G  60% /data  # 数据目录
列名通俗解释
Size该分区总容量(如 50G)
Used已用空间(如 20G)
Avail剩余可用空间(如 28G)
Use%使用率(超过 85% 建议清理)
Mounted on分区挂载的目录(操作时别找错!)

3. 什么时候用?

✅ 收到 “磁盘空间不足” 告警;

✅ 定期巡检,看哪个分区快满了;

✅ 上传文件 / 部署应用失败,先查这个。

三、df -i:揭秘 inode,解决 “有空间却不能建文件” 的问题

1. 先白话解释:inode 是什么?

你可以把 inode 理解成文件的身份证

  • 每个文件 / 目录都有唯一的 inode;
  • inode 存文件的关键信息(权限、创建时间、存在哪),但不存文件名和实际内容;
  • inode 总数在分区格式化时就固定了,用完就没法新建文件 —— 哪怕磁盘还有空间!

2. df -i 怎么用?(示例 + 解读)

执行df -i,输出如下:

Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/sda1      3276800 150000 3126800    5% /  # inode使用率仅5%,很安全
/dev/sdb1      5242880 510000  142880   98% /data  # 高危!inode快用完了
列名通俗解释
Inodes该分区总 inode 数量
IUsed已用 inode 数量
IFree剩余 inode 数量
IUse%inode 使用率(超过 90% 要紧急处理)

3. 典型场景

❌ 系统提示No space left on device,但df -h看磁盘还有空间 → 大概率是 inode 耗尽了!

❌ 日志服务器、临时文件目录容易出这问题(大量小文件吃光 inode)。

四、一张表分清:df -h vs df -i

命令监控对象单位典型故障场景排查优先级
df -h磁盘空间(存数据)GB/MB/KB上传大文件失败、分区容量 100%先查
df -iinode(文件身份证)个数建小文件失败,磁盘空间却有剩余后查

五、实战:inode 满了?3 步定位 + 清理(附避坑提示)

df -i查到 inode 使用率过高(比如/data分区 98%),按以下步骤快速解决:

步骤 1:定位哪个目录耗光 inode

执行命令,统计根目录下每个二级目录的文件总数(文件越多,inode 用得越多):

# 遍历根目录下所有目录,逐个统计文件数
for i in /*; do echo $i; sudo find $i | wc -l; done

输出示例(重点看数值大的目录):

/bin
1200  # 正常
/boot
500   # 正常
/mnt
150000  # 异常!这个目录文件数暴多

步骤 2:逐层深入,找到 “罪魁祸首”

以上面的/mnt为例,继续查其子目录:

for i in /mnt/*; do echo $i; sudo find $i | wc -l; done

重复此步骤,直到找到具体目录(比如/mnt/tmp/logs,全是小日志文件)。

步骤 3:安全清理(避坑!)

✅ 优先删过期文件(比如 30 天前的日志):

# 删除/mnt/tmp/logs下30天前的.log文件,-delete是安全删除
sudo find /mnt/tmp/logs -type f -name "*.log" -mtime +30 -delete

❌ 禁止直接rm -rf /*!删前先确认目录无业务数据,最好先备份。

清理后验证

再执行df -i,看对应分区的 IUse% 是否下降,确认问题解决。

六、核心总结(快速收藏)

  1. 磁盘异常先查df -h(空间),再查df -i(inode);
  2. df -h看 “存数据的空间”,df -i看 “文件的身份证数量”;
  3. 大量小文件(日志、临时文件)易耗光 inode,定期清理是关键;
  4. 清理文件前务必确认无业务依赖,避免误删!

美化学习笔记.png

如果这篇内容帮你解决了磁盘问题,欢迎点赞收藏~有其他排查技巧也可以在评论区交流!