写入/ tmp时“超出磁盘配额”,但有足够的空间(Linux)


9

我有一个VPS。它通过臭名昭著的并行处理进行管理。

今天,我开始看到消息(起初是通过wordpress的,也可以从命令行shell看到的),说:“磁盘配额已超出”。

user@machine:~$ echo aaa > /tmp/aaa
-bash: /tmp/aaa: Disk quota exceeded

但是机器上有很多空间,只有1个分区。

user@machine:~$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/vzfs             100G   24G   77G  24% /

我从/ tmp / *删除了所有文件,但仍然删除了。

我对“ vzfs”一无所知,也许是罪魁祸首?

可能出了什么问题?以及如何解决?

解!

(如果您不使用Parallels Plesk,请参阅@Adalee的答案)

请参阅与我的案例相关的@deltik解决方案,该解决方案与Parallel的系统有关。

df -i立即提供了可重复使用的inode数:18,446,744,069,620,218,961,对于wordpress网站而言这是疯狂的。

我进一步进行了探索,发现qmail的队列中充满了inode(已经充满了一些黑客的attemtps来使用我的机器发送垃圾邮件,并且失败回复)

修复qmail与此处无关,但我的解决方法与之相关:

  1. 停止了qmail的服务
  2. 我无法将qmhandle下载到超额配额系统,所以我不得不
  3. 提取脚本并将其上传到另一个网站,
  4. 使用以下命令删除队列:
  5. perl <(wget -O- http://link.to.my/script.pl)-D

这样,脚本可以直接从Web运行(这不是安全的做法,但我自己将脚本放在了那里),并带有命令行选项。

感谢@deltik在现场了解并迅速识别出这种特殊设置,并提供了进一步诊断的手段!


Linux具有基于用户或组的磁盘配额分配设置。还要检查它们
DavidPostill

1
是的,vzfs(OpenVZ“虚拟”文件系统)可能是原因。我见过许多OpenVZ提供程序,它们销售不可能便宜的服务器,但对它们设置了不可能的愚蠢限制。
user1686

如果您有解决方案,即使有针对性,也请作为答案发布。您总是可以接受别人的回答。
Daniel B

Answers:


15

您有一个VZFS文件系统,这意味着您的VPS是Parallels Virtuozzo虚拟机。在Virtuozzo中,托管服务提供商可以设置许多参数的限制,包括使用VZFS获得的分配。

原因:节点不足(最常见)

与数百名Virtuozzo VPS客户合作多年后,尽管似乎有足够的可用空间,但他们仍然无法创建文件,但他们中的绝大多数已经达到了他们的inode限制。运行以下命令以查看Inodes索引节点分配(),已使用索引节点(IUsed),剩余索引节点(IFree)以及已使用索引节点的百分比(IUse%):

df -i

具有100%的inode使用率经常发生。我的常见原因是:

  • 垃圾邮件反弹
  • 出站垃圾邮件排队
  • 存储了大量入站电子邮件
  • 一些用户将其PHP会话垃圾回收(session.gc_maxlifetime)设置为一百多年
  • 一般缓存文件太多的方式
  • 在WordPress插件W3 Total Cache中启用了对象缓存
  • Magento错误日志(为每个错误生成一个新文件)
  • 其他配置不当或设计不当的程序/脚本,导致生成一堆文件而忘记删除它们

故障排除

如果您发现索引节点不足或不足,但不知道它们中的大多数,我有这个Bash一线式搜索当前目录并以1的文件夹深度对索引节点进行计数:

for i in $(find $(pwd) -maxdepth 1 -type d | sort); do echo -e "$(find "$i" | wc -l)\t: $(readlink -f "$i")"; done | sort -nr

您可以一直更改当前的工作目录,/直到找到导致用尽inode分配的罪魁祸首为止。

说明

您的VPS在VZFS文件系统上,该文件系统是Parallels Virtuozzo的一部分(不是OpenVZ,后者相似并且基于相同的技术,但是OpenVZ不会使用VZFS)。

由于Virtuozzo在VZFS中存储文件的方式,因此inode的限制通常比ext4或XFS等其他文件系统上的限制更大。主机跟踪所有这些文件,并且对于主机提供商而言,最好不要让单个VPS占用数亿个inode。结果,托管提供商可以将inode限制设置为较低,例如1,000,000 inode。

与数以百计的在Virtuozzo上用尽了inode分配的客户一起工作了多年之后,这些“神秘的”磁盘配额问题就不再让我感到惊讶。

原因:其他Virtuozzo限制

与我合作的Virtuozzo VPS客户中,只有很小一部分遇到文件系统问题,因为他们遇到了其他限制。您可以使用以下命令查看部分(但不是全部)限制:

cat /proc/user_beancounters

故障排除

如果failcnt列的值大于0或held列的值等于相应的limit值,则说明已达到极限。

您可以在此处查看OpenVZ Wiki上每个参数的含义。参数可以是“主要”,“次要”或“辅助”。

如果您发现无法减少held达到VPS限制的数量,则应该与主机提供商联系以获得更多帮助。

根据达到最大极限的豆类,此答案可以扩展很多,因为达到不同的限制会导致不同的症状。

原因:命中后限制降低

关于/proc/user_beancountersdf -i有时,Virtuozzo系统管理员可能会将limit参数的减小到该held值以下。

例如,如果diskinodes参数的原始限制为1,500,000,而您达到该限制,则托管服务提供商中的某人将您的inode限制设置为1,000,000,您将看到一个奇怪的inode报告,df -i这毫无意义。

在您的一端,您可能会看到一个不合理的数字,例如18,446,744,069,620,218,961

我认为这是托管服务提供商的一种邪恶行为,尤其是如果他们没有通知您的话,因为您看到的不寻常的价值与没有使用Virtuozzo / OpenVZ经验的超级用户的知识背道而驰,这会导致误导建议(示例另一个示例)。

故障排除

联系您的主机提供商。向他们展示您发现了什么,并与他们合作使您持有的咖啡豆低于限制。

如果他们拒绝帮助您,请放弃您的托管服务提供商,然后找到另一家不使用Virtuozzo / OpenVZ虚拟化技术的提供商。与Virtuozzo / OpenVZ相比,KVM虚拟化,VMware虚拟化,Xen虚拟化或裸机服务器受到的限制要少得多。

说明

您的主机提供商可能正在审核警报或对警报进行响应,发现您的VPS占用了过多的特定资源(几乎始终是inode限制,这是diskinodes其末端的参数)。

托管服务提供商的经验不足的Virtuozzo管理员认为,他们可以通过将限制降低到低于实际资源使用率的水平来解决此问题。对于inode,即使您当前的实际使用量可能较高,例如1,500,000,您的分配也可能较低,例如1,000,000。

Virtuozzo管理员在其控制面板中会看到您的实际使用情况和新限制,但是由于Virtuozzo虚拟化的方式,您会看到虚假的数字可能会非常高。

疏忽的Virtuozzo管理员不会通知您此更改,因此,如果发生这种情况,您应该联系您的托管服务提供商。


我不知道对于运行wordpress的站点来说,是否可以接受18,446,744,069,620,218,961的inode数量...
Berry Tsakala 2015年

@BerryTsakala:是使用的inode数量还是文件系统支持的inode总数?如果您可以提供命令的完整输出,则可以肯定。根据到目前为止的内容,您的主机似乎没有设置inode限制,这意味着我错了。我将为您提供更新的答案,进一步探讨Virtuozzo的限制。
2015年

@BerryTsakala:在我看来,您的房东可能在做些险恶的事情,希望您不会注意到。我将在不久后更新我的答案,并提供详细信息。
Deltik

谢谢!我已经开始删除冗余文件。我还发现垃圾邮件发送者滥用了该系统,电子邮件正在填满qmail的队列。
贝里·察卡拉

顺便说一句,inode不会相加:df -i比通过find ...命令返回的tje sum大100万亿倍。您知道如何找到差异吗?
贝里·察卡拉

4

“超出磁盘配额”并不意味着磁盘上没有可用空间,但是不允许您使用那么多空间。

通常,配额是管理员设置的一些限制-您可以运行的最大进程数,可以占用的空间,可以拥有的文件数等。可以为inode和磁盘块的最大数量设置磁盘配额。

尝试运行quotaquota -g(或者,您可以运行repquota -urepqouta -g)来查看您的用户是否受到这种方式的限制以及如何受到限制。如果是,则可以使用来编辑这些配额edquota或使用quotaoff命令将其关闭。您可能需要以root用户身份登录,具体取决于您的设置。

该站点涵盖了一些如何使用配额的示例,还包含指向有用命令的手册页的链接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.