Ber*_*ala 9 linux parallels inode quota
我有一个 VPS。它由臭名昭著的 plesk 管理。
今天我开始看到消息(起初是通过 wordpress,但也来自命令行 shell),说:“超出磁盘配额”。
user@machine:~$ echo aaa > /tmp/aaa
-bash: /tmp/aaa: Disk quota exceeded
Run Code Online (Sandbox Code Playgroud)
但是机器上有很多空间,只有1个分区。
user@machine:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vzfs 100G 24G 77G 24% /
Run Code Online (Sandbox Code Playgroud)
我从 /tmp/* 中删除了所有文件,但仍然如此。
我对“vzfs”一无所知,也许这就是罪魁祸首?
出了什么问题?以及如何修复它?
解决方案!
(如果您不使用 Parallels Plesk,请参阅 @Adalee 的回答)
请参阅@deltik 的解决方案,与 Parallel 的系统相关,就像我的情况一样。
df -i 立即给出了一个可笑数量的 inode:18,446,744,069,620,218,961,这对于 wordpress 网站来说是疯狂的。
我进一步探索并发现 qmail 的队列中充满了 inode(它充满了一些黑客的尝试使用我的机器发送垃圾邮件,以及失败回复)
修复 qmail 在这里不相关,但我的解决方法是相关的:
这样脚本直接从网络运行(这不是一个安全的做法,但我自己把脚本放在那里),带有命令行选项。
感谢@deltik 在现场了解并及时识别这种特殊设置,并提供进一步诊断的方法!!!
Del*_*tik 15
您有一个 VZFS 文件系统,这意味着您的 VPS 是一个 Parallels Virtuozzo 虚拟机。在 Virtuozzo 中,托管服务提供商可以对许多参数设置限制,包括您使用 VZFS 获得的分配。
在与数百名无法创建文件的 Virtuozzo VPS 客户合作多年后,即使似乎有足够的可用空间,他们中的绝大多数人也达到了 inode 限制。运行此命令以查看 inode 分配 ( Inodes)、已使用 inode ( IUsed)、剩余 inode ( IFree) 和已使用 inode 百分比 ( IUse%):
df -i
Run Code Online (Sandbox Code Playgroud)
100% 的 inode 使用率经常发生。我的经验中的常见原因:
session.gc_maxlifetime) 设置为一百多年如果您发现 inode 不足或不足,但不知道大多数 inode 在哪里,我有这个 Bash one-liner 可以搜索当前目录并在文件夹深度为 1 处计算 inode:
for i in $(find $(pwd) -maxdepth 1 -type d | sort); do echo -e "$(find "$i" | wc -l)\t: $(readlink -f "$i")"; done | sort -nr
Run Code Online (Sandbox Code Playgroud)
您可以不断更改当前工作目录,/直到您找到用完 inode 分配的罪魁祸首。
您的 VPS 位于 VZFS 文件系统上,它是 Parallels Virtuozzo 的一部分(不是 OpenVZ,它与基于相同技术的类似,但 OpenVZ 不会使用 VZFS)。
由于 Virtuozzo 在 VZFS 中存储文件的方式,inode 通常比在其他文件系统(如 ext4 或 XFS)上受到更多限制。主机跟踪所有这些文件,并且不让单个 VPS 占用数亿个 inode 对托管服务提供商有利。因此,托管服务提供商可能会将 inode 限制设置得较低,例如 1,000,000 个 inode。
在与数百名用尽 Virtuozzo 上的 inode 分配的客户合作多年后,这些“神秘”的磁盘配额问题不再让我感到惊讶。
与我合作过的 Virtuozzo VPS 客户中,只有一小部分存在文件系统问题,因为他们遇到了其他限制。您可以使用此命令查看一些(但不是全部)限制:
cat /proc/user_beancounters
Run Code Online (Sandbox Code Playgroud)
如果failcnt列的值大于 0 或held列值等于相应的limit值,则您已达到限制。
您可以在此处查看 OpenVZ 维基上的每个参数。参数可以是“主要的”、“次要的”或“辅助的”。
如果您发现无法减少heldVPS 已达到的限制的计数,您应该联系您的托管服务提供商以获得进一步的帮助。
这个答案可以根据哪些豆子被最大化而扩展很多,因为达到的不同限制会导致不同的症状。
关于/proc/user_beancounters或df -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 虚拟化的服务提供商。KVM 虚拟化、VMware 虚拟化、Xen 虚拟化或裸机服务器受到的限制比 Virtuozzo/OpenVZ 少得多。
您的托管服务提供商可能一直在审核或响应警报,并发现您的 VPS 使用了过多的特定资源(几乎总是 inode 限制,这是diskinodes他们最终的参数)。
托管服务提供商缺乏经验的 Virtuozzo 管理员认为,他们可以通过将限制降低到低于实际资源使用量来解决问题。对于 inode,您的分配可能较低,例如 1,000,000,即使您当前的实际使用量可能更高,例如 1,500,000。
Virtuozzo 管理员在其控制面板中会看到您的实际使用情况和新限制,但由于 Virtuozzo 虚拟化的方式,您会看到可能非常不合理地高的虚假数字。
一个疏忽的 Virtuozzo 管理员不会通知您这一变化,这就是为什么如果您发生这种情况,您应该联系您的托管服务提供商。
“超出磁盘配额”并不意味着您的磁盘上没有可用空间,而是不允许您使用这么多空间。
一般来说,配额是管理员设置的一些限制 - 可以运行的最大进程数、可以占用多少空间、可以拥有多少文件等。磁盘配额可以设置最大 inode 和磁盘块数。
尝试运行quotaand quota -g(或者,您可以运行repquota -uand repqouta -g)来查看您的用户是否受到这种方式的限制以及如何受到限制。如果是,您可以edquota使用命令编辑这些配额或将其关闭quotaoff。您可能需要以 root 身份登录,具体取决于您的设置。
该站点涵盖了一些如何使用配额的示例,还包含指向有用命令的手册页的链接。