日常运维中,你是否遇到过这些 “诡异” 场景?
✅ 系统提示 “磁盘空间不足”,但肉眼看还有剩余空间;
✅ 想创建新文件却失败,df -h查磁盘明明没满;
✅ 定期巡检不知道该看磁盘容量还是 inode?
其实核心问题就两个:磁盘空间和inode 资源。本文用 “场景 + 实战” 的方式,把df -h和df -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 -i | inode(文件身份证) | 个数 | 建小文件失败,磁盘空间却有剩余 | 后查 |
五、实战: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% 是否下降,确认问题解决。
六、核心总结(快速收藏)
- 磁盘异常先查
df -h(空间),再查df -i(inode); df -h看 “存数据的空间”,df -i看 “文件的身份证数量”;- 大量小文件(日志、临时文件)易耗光 inode,定期清理是关键;
- 清理文件前务必确认无业务依赖,避免误删!
如果这篇内容帮你解决了磁盘问题,欢迎点赞收藏~有其他排查技巧也可以在评论区交流!