错误提示: no space left on device
经典版(block占用)
模拟
dd if=/dev/zero of=/var/log/nginx.log bs=1M count=2000
排查
#1. df -h 查看哪里空间不足,哪个分区#2. du -sh详细查看目录所占空间
du -sh /* 排查占用空间大的目录
du -sh /var/*
du -sh /var/log/* #3. 最终通过du -sh 排查到具体的大文件或大的目录#4. 找出后确认是否可以删除.
inode 不足
现象
# df -h 查看发现磁盘空间没有满,那是什么原因导致的呢?# 排查:
1. df -h查看磁盘空间没有满,df -i查看inode使用情况
2. 找出这个分区中,大目录(目录本身大小大于1MB,du -sh目录所占空间)就行
3. 找出有大量小文件的目录
4. 确认是否可以删除或处理.# 命令,筛选目录本身大于 1M 的
find / -type d -size +1M# 命令,筛选目录下,文件数量
find / -type f | xargs dirname | sort | uniq -c | sort
模拟
mkdir -p /lndsnx/test-inode
cd /lndsnx/test-inode
touch {01..100000} 可能报错参数过长
echo {01..100000} | xargs touch
未彻底删除
原理
文件彻底删除的条件
- 删除文件,硬链接数为 0,文件相当于被删除了,使用 rm 命令
- 文件调用数为 0,文件是否被使用中
排查步骤:
- 如何知道连接数是否为 0,一般 ls,find查看,没有则为 0
- 如何知道进程调用数是否为 0,lsof 显示打开的文件,lsof | grep 文件名
模拟
# 模拟文件调用,但是删除了文件入口
tail -f nohup.out# 通过 tail -f 调用占用着
rm -f nohup.out # 删除# 查看调用
lsof | grep nohup.out