开启 3 天免费试用
注册即可免费体验全部高级功能。
*仅限新用户;每位用户只能获得一次试用。


Linux 磁盘空间已满、报空间不足时,先找出拒绝写入的文件系统和挂载点,再比较字节容量与 inode。只在同一文件系统内用 du -x -d 1 缩小目录范围(-d 在 Linux 的 GNU du 和 macOS 的 BSD du 中都表示深度),检查 journal、包缓存和已删除但仍被进程打开的文件。先释放少量可恢复空间,在原挂载点验证,再规划深度清理。
关键要点
- 根文件系统已满、home 已满、inode 用尽和预期挂载缺失,需要不同修复。
df报告文件系统使用量,du统计可访问目录项;两者可以合理地不同。[1][2]- 扫描应限制在一个文件系统内,避免其他挂载点干扰结果。
- 不要因为文件很大就直接删除
/usr、/var/lib或未知应用数据。
通用方法见设备故障排查指南。若包操作也失败,先恢复工作空间,再使用 APT 错误指南。
保留失败路径与错误,对该路径直接查询:
df -h /path/that/failed
df -i /path/that/failed
findmnt -T /path/that/failed
df -h 显示容纳该路径的文件系统已用和可用字节容量,df -i 显示 inode 使用情况。df 手册定义了这些文件系统级统计以及易读格式选项。findmnt -T 可确认路径背后的挂载点。
大量小文件可能耗尽 inode,即使仍有字节空间。另一个大磁盘有空闲,也不能帮助已满的根或独立 /var。如果预期数据盘未挂载,应用可能把数据写进根文件系统上的底层目录;应先安全恢复挂载,再判断文件归属。
保留空间和配额策略应与系统所有者确认,不要以为表面上的百分比就是全部情况。在生产或加密系统上修改存储前,先保留恢复访问。
从故障挂载点开始并限制在该文件系统。根目录示例:
sudo du -x -h --max-depth=1 / 2>/dev/null
-x 跳过其他文件系统上的目录,--max-depth=1 限制第一轮深度。对结果排序或逐项查看,然后只对一个你认得的大目录重复一次,例如 /var 或某个用户目录。不要一开始就无界扫描所有磁盘、网络共享、容器挂载和备份卷。
du 统计的是可访问的目录内容。不要因为某个目录排名第一就删除它;先确认它的所有者和用途。数据库、虚拟机镜像、容器存储、备份、邮箱或照片库都需要自己的保留和停机流程。
大量用户数据应优先把已核实的文件移动到另一个有备份的文件系统,或通过所属账号删除可恢复的下载。移动数据前,先确认目标位于不同的文件系统,而且空间足够。
df 和 du 不一致?常见原因包括:
du 和 df 在不同时间测量,期间仍有写入。已安装 lsof 时可检查:
sudo lsof +L1
若大文件仍被进程持有,应按服务文档安排受控重启或 reload。不要截断未知描述符,也不要在没有维护计划时停止关键服务。最后一个进程关闭文件后,空间通常才会释放。
先查看 journal:
journalctl --disk-usage
journalctl 手册说明了占用检查和 vacuum:它按大小或时间边界删除最旧的 archived journal,活动文件不由 vacuum 直接删除;与日志轮换有意结合使用时,效果通常最明显。[3]确认 archived journal 是主要可回收项后,才设置符合保留要求的上限,例如:
sudo journalctl --vacuum-size=500M
500M 只是示例,不是通用策略。保留理解空间增长所需的近期日志,并按保留、事件响应和合规需求选择上限。
APT 缓存也要先测量:
du -sh /var/cache/apt/archives
sudo apt-get clean
apt-get clean 删除本地已下载包缓存,不会卸载已安装软件。只有缓存位于故障文件系统且包数据库仍有工作空间时才使用。其他应用应使用自己的清理命令,不能泛化为手工删除数据目录。
文件系统接近满载并妨碍正常工具工作时,首要目标是腾出一小块可测量的工作空间,而不是尽可能多地删除。若运维上安全,先减慢或暂停已确认的写入者。然后只选择一个已确认所有者、位置在受影响挂载点且可以恢复的类别,例如重复导出或已下载归档。改动前记录路径、大小、所有者和移除理由。
第一次清理前回答四个问题:
df -h /path/that/failed 报告的文件系统?只释放一个有边界的类别,随即对同一个失败路径重跑 df -h 和 df -i。若没有出现预期空间,应停止并检查已删除但仍打开的文件、缺失挂载点、权限、快照或持续写入,不要继续删除第二个无关类别。这样既保留原始增长的证据,也避免把应急清理变成未经审查的保留策略。
在共享或生产机器上,重启进程或 vacuum 日志前要记录服务所有者与维护决定。应急空间只需足以恢复受控运行和诊断;长期保留、配额、挂载修正或容量扩展应作为独立后续,并配置自己的回滚与监控。
按以下顺序处理:
在运维安全的前提下暂停持续生成数据的任务。
移动或删除已确认可恢复的下载、导出和重复临时文件。
通过所有者工具清理已确认的包缓存。
先确认保留需求,再按明确的大小或时间边界对 archived journal 执行 vacuum。
通过受控服务重启处理这些文件。
数据库、容器、备份或邮件只能按应用专属流程处理。
不要直接删 /usr、/var/lib,不要用宽泛通配清空目录,也不要截断未知日志。这些操作可能破坏包、数据库、容器或审计证据,而释放的空间还可能比预期少。
对同一路径重复测量:
df -h /path/that/failed
df -i /path/that/failed
同时确认可用字节与 inode,再重试一个代表性写入或原服务健康检查。记录释放量和增长类别。如果失控日志、失败备份、无界缓存或缺失挂载马上再次填满,清理还没有完成。
恢复稳定后,应使用应用支持的保留配置、监控和告警阈值,并为包升级、日志、数据库事务和回滚留出余量,而不只是容纳当前的稳态数据。
先定位故障文件系统,再比较容量和 inode,并用同文件系统 du 缩小所有者。结合 journal、缓存、挂载与已删除但仍打开文件解释 df/du 差异。只通过所有者工具回收已识别、可恢复的数据,最后在同一挂载点验证并防止复发。
df -h 有空间,为什么仍报空间不足?可能是 inode 用尽、配额限制,或失败路径属于另一个挂载点。对该路径检查 df -i 和 findmnt -T。
du 比 df 小?已删除但仍打开的文件、元数据、保留空间、快照、被挂载覆盖的内容或不可读目录都可能造成差异。
不能作为通用做法。先确认日志所有者与保留策略;systemd journal 应使用有边界的 archived vacuum。
du -x 有什么作用?它跳过其他文件系统,使调查只针对已满挂载点,不统计无关磁盘或网络共享。
du -d 深度参数在 Linux 和 macOS 上是什么意思?-d N 只显示位于指定路径下 N 层以内的目录。在 Linux 的 GNU du 中,它是 --max-depth=N 的简写[2],所以 du -x -h -d 1 / 与上文命令一样只做有界的第一轮扫描。macOS 自带的 BSD 版 du 同样接受 -d、-x 和 -h,但不支持 --max-depth 这类 GNU 长选项;可在 Mac 上运行 man du 确认当前版本。
apt-get clean 会卸载软件吗?不会。它只从 APT 缓存中删除已下载的包归档,已安装软件包的状态保持不变;以后可能需要重新下载这些归档。
最后一个持有进程必须关闭它,通常通过受控重启或 reload。再次删除路径不会释放更多空间。
不可以。先确认所有者、用途、备份状态和受支持的保留方式,大型应用目录不等于临时文件。
免责声明:存储布局、文件系统、配额、快照和服务流程各不相同。重要系统应保留备份、恢复访问和应用专属保留说明。
来源:
Sources checked 2026 年 10 月 4 日。
延伸阅读:
注册即可免费体验全部高级功能。
*仅限新用户;每位用户只能获得一次试用。