PHP在尝试创建文件时出错,但错误可以在命令行上重现:
# less /path/to/session_data/sess_u2q1pfelfr0jof3mp38jb2eaj1/path/to/session_data/sess_u2q1pfelfr0jof3mp38jb2eaj1: No such file or directory# touch /path/to/session_data/sess_u2q1pfelfr0jof3mp38jb2eaj1touch: cannot touch `/path/to/session_data/sess_u2q1pfelfr0jof3mp38jb2eaj1': No space left on device# touch /path/to/session_data/sess_u2q1pfelfr0jof3mp38jb2eaj0# less /path/to/session_data/sess_u2q1pfelfr0jof3mp38jb2eaj0# ls -al /path/to/session_data/sess_u2q1pfelfr0jof3mp38jb2eaj1ls: /path/to/session_data/sess_u2q1pfelfr0jof3mp38jb2eaj1: No such file or directory
请注意不同的文件名.似乎没有任何模式,但它确实只影响某些文件名,并且它们似乎无法写入.
为了使事情进一步复杂化,这是一个OpenVZ服务器,但您无法从虚拟服务器或硬件节点写入/创建这些文件名.
该目录中有很多文件(在撰写本文时为18,456,002),但没有inode问题,磁盘肯定没有满.
根据要求,df输出:
[root@web1 session_data]# df -hfilesystem Size Used Avail Use% Mounted on/dev/simfs 2.7T 2.1T 495G 81% //dev/root 2.7T 2.1T 495G 81% /path/to/session_data[root@web1 session_data]# df -ifilesystem Inodes IUsed IFree IUse% Mounted on/dev/simfs 726761472 22843560 703917912 4% //dev/root 726761472 22843560 703917912 4% /path/to/session_data
(我已经编辑了会话数据的路径,但它确实是单独安装的,以便在多个虚拟服务器之间共享会话数据)
解决方法 Ext3对文件/目录名进行哈希处理.如果你在一个目录中有这么多文件,那么如果你在哈希冲突问题上运行,我不会感到惊讶.
所有具有相同长度且具有相同结构的文件名使得碰撞的可能性更加严重.
如果发生冲突,文件名实际上无法使用,正如您所注意到的那样.
我没有这方面的经验,所以我不能给你更详细的建议.
(我们曾在办公室遇到过类似的问题,而常驻的linux大师使用了一些tunefs魔法来解决问题.我从来没有得到他所做的确切细节.只是因为它与文件名上的哈希冲突有关.)
您可以通过tunefs显然设置散列行为.还有一个名为“dirindex”的ext3扩展,它真正有助于处理包含这么多文件的目录.
总结以上是内存溢出为你收集整理的linux – 写入某些会话文件名时“设备上没有剩余空间”错误全部内容,希望文章能够帮你解决linux – 写入某些会话文件名时“设备上没有剩余空间”错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)