Linux 磁盘写满、权限报错?排查与清理实战

服务器突然写不了日志、程序报错『No space left on device』,但 df 显示还有空间——这类矛盾现象,往往隐藏在 inode 耗尽或权限错乱之中。本文给出从空间到权限的完整排查路径。

一、先用 df 看整体

  1. 执行 df -h 查看各挂载点使用率,定位是哪块盘满了。
  2. 若使用率 100% 却仍能创建小文件,执行 df -i 检查 inode 是否耗尽
  3. 注意 df 显示的是文件系统视角,包含被进程占用的已删文件,不一定与目录总和一致。

二、用 du 找出占用大户

  1. 进入根目录执行 du -h --max-depth=1 / 逐级下钻。
  2. 针对大目录,用 du -sh * | sort -rh | head 排序前几名。
  3. 日志与缓存是重灾区,常见在 /var/log/var/cache
  4. Docker 与 snap 也会悄悄占用数 GB,记得检查 /var/lib/docker/var/lib/snapd

三、处理 inode 耗尽

  1. 大量小文件(如邮件队列、会话文件)会吃光 inode。
  2. find /path -type f | wc -l 统计文件数,定位目录后清理。
  3. 若要释放已删却被进程占用的空间,可用 lsof | grep deleted 找到持有句柄的进程并重启它。

四、权限拒绝的常见原因

  1. 执行 ls -l 检查目标文件的所有者与权限位。
  2. Permission denied 常因当前用户非属主且组无权限。
  3. 跨用户共享目录忘加写权限,或脚本缺执行位 x

五、用 chown/chmod 修正

  1. 改属主:sudo chown -R user:group /path
  2. 补权限:chmod 755 目录chmod 644 文件
  3. 谨慎对待 //etc 等系统路径,避免递归改坏。

六、用轮转与定时清理防复发

  1. 配置 logrotate,让日志按大小切割并压缩,避免单文件无限增长。
  2. 对临时目录设配额,或用 tmpfiles.d 定期回收。
  3. 把清理写成定时任务,每月自动扫描超大目录。

技术总结:磁盘类故障要先区分『空间满了』还是『inode 满了』,再决定清理策略;权限问题则用 ls -l 看清属主与权限位,精准修正而非盲目 chmod 777。配合日志轮转,可从根源减少复发。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注