805 字
约 2 分钟
8
S15-B05 · 磁盘、分区与挂载

适用读者:遇到"磁盘满了但文件不大"的人。
前置:S15-B01。
实测环境:Ubuntu 24.04(2026-11-05)。
覆盖旧文:1339(34) 1326(25) 1298(29) = 88 点。
覆盖扩展:E-S15-012(inode 与"删了文件空间不释放")。
上一篇:S15-B04 · 进程、端口与内存
下一篇:S15-B06 · 时间、时区与系统信息。


1. 一句话结论

"磁盘满"有两种:块(block)满和 inode 满。前者看 df -h,后者看 df -i——文件很小但数量极多时,inode 会先耗尽。

实测(本机):

df -h /  → 97G  32G  66G  33%
df -i /  → 12,902,400 inodes, 517,596 used (5%)

2. df 与 du 的分工

命令 看什么 典型用途
df -h 文件系统级总量/已用 哪个挂载点满了
df -i inode 使用 是否 inode 耗尽
du -sh dir 目录级占用 哪个目录大
du -h --max-depth=1 | sort -h 逐层排序 定位大目录

"为什么 df 满了但 du 加起来不够":被删除但仍被进程打开的文件(lsof | grep deleted)——空间要等进程关闭才释放。


3. 分区、格式化与挂载(A-1339/A-1326/A-1298)

步骤 命令
看磁盘 lsblk / fdisk -l
分区 fdisk /dev/sdb / parted
格式化 mkfs.ext4 /dev/sdb1
挂载 mount /dev/sdb1 /data
开机自动挂载 /etc/fstab(改错会导致启动失败)

fstab 的安全做法:加 nofail 选项,避免挂载失败阻断启动。

判据:"这块盘会不会在开机时不可用?" 会(云盘/网络盘)→ 必须 nofail。


4. 空间不足的四步处置

① df -h 看哪个挂载点满
② du -sh /* 2>/dev/null | sort -h | tail 找大目录
③ 如果是日志:logrotate 或 truncate(不要直接 rm 正在写的日志)
④ 如果 inode 满:找小文件海(find / -xdev -type f | wc -l 按目录统计)

"为什么不要 rm 正在写的大日志":文件仍被进程持有 → 空间不释放。正确做法 truncate -s 0 或让服务重开日志。


5. 五个误区

误区 真相
"df 满就是文件多" 可能是 inode 或已删除文件
"rm 大日志立刻释放空间" 进程还持有就不释放
"fstab 写错无所谓" 可能导致无法启动
"du 与 df 数字必须相等" 统计口径不同(含保留块/删除文件)
"扩容就能解决" 先找根因

6. 自检

  1. df -h 与 df -i 各查什么?
  2. "删了文件空间没释放"的原因?
  3. fstab 为什么要 nofail?
  4. 为什么不要 rm 正在写的日志?
  5. 定位大目录的命令组合?

7. 下一篇

S15-B06 · 时间、时区与系统信息

磁盘讲完,下一篇讲"时间不对会炸什么":时区、NTP 与系统信息命令。


本篇属于系列《S15 · Linux 与运维》。旧文来源:A-1339/1326/1298;扩展点 E-S15-012。df/df -i 为 Ubuntu 24.04 实测。

S15-B05 · 磁盘、分区与挂载
https://www.clxhxhhr.top/posts/5393/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。