我有一个 CentOS 5.5 盒子,上面有一个单独的 /home 分区。df -h
显示其使用率为 100%。df -i
显示大量可用 inode。du -sh /home /home*
显示 /home 中大约有 100MB 的文件。lsof -n|grep /home 显示 /home 中没有打开的文件。lsof -n|grep removed 显示没有接触 /home 的文件。
该分区通过 NFS 共享,并安装在另外两个 CentOS 5.5 客户端上。lsof -n|grep /home
并且lsof -n|grep deleted
不显示/home
或 的文件/
。
当我卸载并重新安装分区时,磁盘使用率从 100% 降至 3% 以下。然而几天后磁盘使用率又回到了 100%。
使用 /home 的唯一东西是 NFSd、自定义脚本和 SSHd。此脚本将文件从/home/somedir
移动到/home/tmp
,然后将文件移动到 /tmp,然后解析文件。此脚本在所有三个框上运行。
新文件通过脚本放置在 /home 中,该脚本将文件 SCP 到 中设置的 chroot 环境中/home
。只有几个二进制文件和一个/dev/null
节点在 中/home/somepath/...
。
我使用service nfs stop
和service portmap stop
停止了 nfs,停止了 sshd,确认上面提到的脚本没有运行,然后检查了磁盘使用情况。它仍然为 100%。只有卸载并重新安装它似乎才能解决问题。
/home 的 fsck -f(当然,未挂载)显示文件系统正常。
所有机器均已完全更新并运行 CentOS 5.5。
我的磁盘空间去哪儿了?
答案1
推测:您的自定义脚本在这三个盒子上运行,在尝试从三个地方操作相同的文件时,被其自身的其他实例绊倒;在远程系统上运行的 NFS 客户端告诉其内核它已删除了一个文件,但实际上该文件已被另一个系统上的进程删除,因此远程客户端被卡住了。
解决方案:使用 NFS 允许远程系统访问文件系统,但仅在导出系统上运行清理脚本。