Linux下/dev/sda3占满无剩余空间,如何查找对应文件清理释放?
/dev/sda3设备"No space left on device"报错排查清理步骤
你执行的df -i命令是查询磁盘inode占用,显示/dev/sda3 100%占用说明该分区的inode编号已用尽,通常是分区内存在海量小文件导致,你可以按照以下步骤定位并清理文件:
步骤1:确认/dev/sda3的挂载路径
执行以下命令查看分区对应的挂载目录:
df -h /dev/sda3
输出结果的最后一列即为挂载路径,常见为根目录/、/home等,后续排查都基于该路径操作,下文统一用<挂载路径>代指。
步骤2:按需求排查对应文件
场景1:排查占用磁盘容量大的文件
执行以下命令,从大到小列出挂载路径下第一层目录的容量占用:
du -h --max-depth=1 <挂载路径> | sort -hr
你可以逐层进入占用较大的目录,将命令中的路径替换为对应子目录路径重复执行,即可定位到具体大文件。
场景2:排查占用大量inode的小文件(匹配你当前的报错场景)
执行以下命令统计挂载路径下各目录的文件数量,-xdev参数会限定仅扫描/dev/sda3分区内的文件,不会跨其他挂载盘扫描:
find <挂载路径> -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
输出结果的最后几行即为文件数量最多的目录,你可以进入对应子目录调整命令参数缩小排查范围,通常问题来源为未清理的程序临时缓存、海量日志碎片、定时任务生成的大量小文件。
步骤3:删除文件释放空间
- 确认文件可删除后,执行
rm <文件路径>即可删除单个文件 - 如果需要删除包含海量小文件的目录,建议使用以下命令,效率远高于直接
rm -rf:# 先创建空目录 mkdir -p /tmp/empty # 同步空目录到待删除目录实现快速删除 rsync --delete-before -d /tmp/empty/ <待删除目录路径>/
注意:删除被运行中进程占用的文件不会立刻释放空间,你可以执行
lsof | grep deleted查看这类文件,重启对应进程即可完成空间释放。
内容的提问来源于stack exchange,提问作者Ronald
相关产品推荐
相关产品推荐

