LabHub
学习 学习路径 课程

Linux 故障处理

No space left on device 的五张脸

在 LabHub 中继续学习

一句话总结

ENOSPC 不只表示数据块耗尽,也可能是 inode、保留块、挂载遮挡或 inotify 资源不足。

概念图: 一句话总结 · 诊断顺序 · 原文命令与标识符

诊断顺序

先确认失败路径实际属于哪个文件系统。随后检查 inode 使用率、已删除但仍打开的文件、root 保留块、被新挂载隐藏的旧文件,以及 inotify watch 上限。

df 统计已分配块,du 只遍历有名称的路径,因此两者差距很大时常是删除后仍打开的日志。此时应找链接数为零的打开文件,并让应用重新打开日志或重启。直接截断文件只适合作为应急措施。

根用户成功而服务用户失败可能是保留块;磁盘仍有空间却无法增加 watch 则与存储无关。诊断时不要在已经饱和的文件系统上盲目全盘扫描,应限制文件系统边界并逐步缩小范围。

原文命令与标识符

lsof +L1                      # 링크 수가 0인, 즉 지워졌는데 열려 있는 파일
ls -l /proc/<pid>/fd | grep deleted
df -i                                    # 사용률이 100%인 파일 시스템
find /var -xdev -type f | cut -d/ -f1-4 | sort | uniq -c | sort -rn | head
mkdir /mnt/root && mount --bind / /mnt/root
du -shx /mnt/root/data

ENOSPC

df -h /var

touch /var/log/test

No space left on device

/

/var

findmnt -T /var/log/app.log

/tmp

df -i

IUse%

rm

du

du

inotify_add_watch

lsof -nP +L1

NLINK

SIZE

/proc/*/fd

(deleted)

truncate -s 0 /proc/PID/fd/N

ls -l

kill -USR1

find /

-xdev

df

du

du

rm

du

df

: > /proc/<pid>/fd/3

rm

truncate

copytruncate

No space left on device

-xdev

imaxpct

/data

df

tune2fs -m 1

/proc