linux – 写入某些会话文件名时“设备上没有剩余空间”错误

前端之家收集整理的这篇文章主要介绍了linux – 写入某些会话文件名时“设备上没有剩余空间”错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些无法写入的文件名(会话文件)(“设备上没有剩余空间”).其他文件名(相同的目录)都可以.磁盘未满.文件系统是ext3

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_u2q1pfelfr0jof3mp38jb2eaj1
touch: 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_u2q1pfelfr0jof3mp38jb2eaj1
ls: /path/to/session_data/sess_u2q1pfelfr0jof3mp38jb2eaj1: No such file or directory

请注意不同的文件名.似乎没有任何模式,但它确实只影响某些文件名,并且它们似乎无法写入.

为了使事情进一步复杂化,这是一个OpenVZ服务器,但您无法从虚拟服务器或硬件节点写入/创建这些文件名.

该目录中有很多文件(在撰写本文时为18,456,002),但没有inode问题,磁盘肯定没有满.

根据要求,df输出

[root@web1 session_data]# df -h
Filesystem            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 -i
Filesystem            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相关文章