您的位置:首页 > 其它

No space left on device

2010-12-29 14:37 453 查看
在实现“马踏棋盘”问题时,因为程序出错不停循环写文件耗尽硬盘空间。

#df

/dev/sdc1 20799540 19751436 0 100% /home/sluo

无论怎么删除文件,剩余空间都为0,并没有增加。

网上很多人遇到的是硬盘还有空间,但是也报错:No space left on device. 显然他们的问题是因为inode耗尽了。
Linux上创建文件需要对应的inode如果inode 耗尽也无法写入文件,inode可以通过df -i查看。通常由于<2K的小文件过多,而每个小文件又占用一个inode,这样就会出现硬盘空间还有,却无法继续写入。

我遇到的问题恰好相反。正常情况下,这是正确的,硬盘没空间了,但inode还有剩余。不过我的问题是,删除文件,磁盘空间没有增加。
以前,我也遇到过这个问题,不知道怎么就解决的。今天没这么好运气,所以只能试着去找到真正的原因。
其实,答案很简单:在Linux中,如果一个进程打开文件读写,只要这个进程不退出,即便删掉了这个文件,文件也不会真正被删除。

我就是通过lsof -s 看到我之前那个程序写的文件还在(虽然有注解(deleted)),所以通过,ps -aux|grep mage找到了那个进程将其kill了。这时,硬盘的空间才一点一点增加,说明进程退出,正释放硬盘空间。

多亏了这个贴,关键是第一个greeblesnort的回复
http://serverfault.com/questions/73051/no-space-left-on-device-df-shows-discrepancy
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: