挂载500G数据盘到/data并迁移文件后根目录空间仍不足的问题求助
挂载500G数据盘到/data并迁移文件后根目录空间仍不足的问题求助
看起来你遇到了一个典型的磁盘空间已删除但未释放的问题,我来帮你分析下可能的原因和解决办法:
首先,你提到df显示根目录/用了36G,但du排除/data后只统计到12G,这种差异几乎都是因为有文件已经被删除,但仍然被正在运行的进程占用——Linux系统里,只要进程还持有该文件的句柄,磁盘空间就不会被释放,直到进程关闭或者重启。
第一步:排查被进程占用的已删除文件
直接用这个命令找出这类文件:
lsof | grep deleted
你会看到类似这样的输出(示例):
docker 1234 root 3r REG 8,1 1073741824 123456 /var/lib/docker/overlay2/xxx/merged/file.log (deleted)
重点看那些大文件对应的进程PID和名称,比如你迁移了Docker目录,很大概率是Docker相关进程还在占用原来的旧文件。
第二步:释放被占用的空间
如果是Docker进程的问题,直接重启Docker服务就能释放这些被占用的空间:
systemctl restart docker
如果是其他进程,比如应用服务,先确认服务可以重启,然后重启对应的进程或服务即可。
其他可能的排查方向
- 检查隐藏文件:你用
du -hsc * --exclude=data的时候,*不会匹配以.开头的隐藏文件/目录,可能漏掉了比如/.cache、/.local这类占空间的隐藏目录。可以用这个命令包含隐藏文件重新统计:du -hsc .[!.]* * --exclude=data | sort -hr - 检查被挂载点覆盖的目录:比如如果之前你在
/data目录下已经有文件,后来挂载了新磁盘到/data,原来的文件会被隐藏但仍然占用根盘空间。可以临时卸载/data看看:umount /data # 查看/data目录下是否有旧文件 ls -lh /data # 看完后重新挂载 mount /data - 用更直观的工具排查:安装
ncdu工具(apt install ncdu),然后在根目录运行ncdu,它会自动扫描并可视化显示所有目录的空间占用,还能排除虚拟文件系统,比du更方便。
总结
最可能的原因就是被进程占用的已删除文件,先试试重启Docker(因为你迁移了Docker目录),然后再看df的结果,应该就能看到根目录的空间释放了。如果还是不行,再用上面的其他方法排查。
备注:内容来源于stack exchange,提问作者Shawn
相关产品推荐
相关产品推荐

