«Дисковая квота превышена» при записи в / tmp, но много места (linux)

9

У меня есть VPS. Управляется с помощью пресловутых параллелей plesk.

сегодня я начал видеть сообщения (сначала через wordpress, но также и из командной строки), говорящие: «Превышена квота диска».

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 (она полна попыток некоторых хакеров использовать мою машину для рассылки спама и ответов об ошибках)

исправление qmail здесь не актуально, но мой обходной путь уместен:

  1. остановил службу qmail
  2. я не смог загрузить qmhandle в систему превышения квоты, поэтому мне пришлось
  3. извлечь и загрузить скрипт на другой сайт,
  4. удалите очередь с помощью этой команды:
  5. perl <(wget -O - http://link.to.my/script.pl ) -D

таким образом, скрипт запускается прямо из Интернета (что небезопасно, но я сам поместил скрипт там) с параметрами командной строки.

спасибо @deltik за знание и своевременное распознавание этой специфической настройки на месте и предоставление средств для дальнейшей диагностики !!!

Ягода Цакала
источник
Linux имеет настройки выделения дисковых квот для пользователей или групп. Проверьте их также. 5 шагов по настройке дисковой квоты для пользователей и групп в UNIX / Linux
DavidPostill
1
Да, vzfs(виртуальная файловая система OpenVZ) может быть причиной. Я видел много провайдеров OpenVZ, которые продают невероятно дешевые серверы, но устанавливают невероятно глупые ограничения для них.
user1686
Если у вас есть решение, даже если оно конкретное, опубликуйте его как ответ. Вы всегда можете принять чужой ответ.
Даниэль Б

Ответы:

15

У вас есть файловая система VZFS, что означает, что ваш VPS является виртуальной машиной Parallels Virtuozzo. В Virtuozzo хостинг-провайдер может устанавливать ограничения по многим параметрам, в том числе по распределению, которое вы получаете с VZFS.

Причина: из Inodes (чаще всего)

После нескольких лет работы с сотнями клиентов Virtuozzo VPS, у которых возникла проблема с невозможностью создания файлов, даже несмотря на то, что свободного места оказалось достаточно, подавляющее большинство из них достигло предела своих инодов. Запустите эту команду, чтобы увидеть распределение inode ( Inodes), используемые inode ( IUsed), оставшиеся inode ( IFree) и процент используемых inode ( IUse%):

df -i

100% -ное использование inode происходит очень часто. Общие причины в моем опыте:

  • Спам по электронной почте
  • Письма со спамом в очереди
  • Сохранено много входящих писем
  • Некоторые пользователи устанавливают свою сборку мусора PHP-сессии session.gc_maxlifetimeна более чем сто лет
  • Слишком много общих файлов кэша
  • Кеш объекта включен в плагине WordPress W3 Total Cache
  • Журнал ошибок Magento (для каждой ошибки создается новый файл)
  • Другие плохо настроенные или плохо разработанные программы / скрипты, которые создают кучу файлов и забывают удалить их

Поиск проблемы

Если вы обнаружите, что у вас мало или нет inode, но вы не знаете, где находится большинство из них, у меня есть одна строчка Bash, которая ищет текущий каталог и подсчитывает inode с глубиной папки 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, иноды часто ограничены в большей степени, чем в других файловых системах, таких как ext4 или XFS. Хост отслеживает все эти файлы, и хостинг-провайдеру было бы полезно не допустить, чтобы один VPS занимал сотни миллионов инодов. В результате хостинг-провайдер может установить низкий предел инодов, например, 1 000 000 инодов.

После многих лет работы с сотнями клиентов, которые исчерпали свое распределение inode в Virtuozzo, эти «таинственные» проблемы с дисковой квотой меня больше не удивляют.

Причина: другие ограничения Virtuozzo

У очень небольшого процента клиентов Virtuozzo VPS, с которыми я работал, были проблемы с файловой системой, потому что они выходили за другие пределы. Вы можете увидеть некоторые (но не все) ограничения с помощью этой команды:

cat /proc/user_beancounters

Поиск проблемы

Если failcntстолбец имеет значение больше 0 или heldзначение столбца равно соответствующему limitзначению, вы достигли предела.

Вы можете посмотреть, что каждый параметр есть в вики OpenVZ здесь . Параметр может быть «первичным», «вторичным» или «вспомогательным».

Вам следует обратиться к вашему хостинг-провайдеру за дополнительной помощью, если вы обнаружите, что не можете уменьшить heldколичество для лимита, которого достиг ваш VPS.

Этот ответ может быть значительно расширен в зависимости от того, какие бобы были использованы максимально, так как разные пределы вызывают разные симптомы.

Причина: лимиты уменьшены после удара

Что касается /proc/user_beancountersили df -i, иногда, системный администратор Virtuozzo может уменьшить значение limitпараметра ниже heldзначения.

Например, если исходный предел diskinodesпараметра составлял 1 500 000, и вы достигли этого предела, тогда кто-то из вашего хостинг-провайдера установит для вашего предела инода значение 1 000 000, вы увидите странный отчет об инодах, 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 не сообщит вам об этом изменении, поэтому вам следует обратиться к вашему хостинг-провайдеру, если это произойдет с вами.

Deltik
источник
я не знаю, является ли 18,446,744,069,620,218,961 приемлемым количеством инодов для сайта, на котором работает WordPress ...
Берри Цакала
@BerryTsakala: это число используемых инодов или общее число инодов, поддерживаемых файловой системой? Если бы вы могли предоставить полный вывод команды, мы могли бы быть уверены. Исходя из того, что вы написали до сих пор, кажется, что ваш хост не имеет установленного предела inode, что означает, что я был бы неправ. У меня будет обновленный ответ для вас, который исследует пределы Virtuozzo дальше.
Дельтик
@BerryTsakala: Мне только что пришло в голову, что ваш хозяин может делать что-то зловещее и надеяться, что вы не заметите. Я обновлю свой ответ в ближайшее время с деталями.
Дельтик
благодарю вас! я уже начал удалять лишние файлы. Я также обнаружил, что спаммер злоупотребляет системой, и электронная почта заполняет очередь qmail.
Ягода Цакала
Кстати, индекс не суммирует: df -i в 100 триллионов раз превышает сумму, возвращаемую командой find ... Знаете ли вы, как найти эту дискретность?
Ягода Цакала
4

«Превышена квота на диск» не означает, что на вашем диске нет свободного места, но вы не можете использовать столько места.

В общем, квоты - это некоторые ограничения, установленные администратором - максимальное количество процессов, которые вы можете запустить, сколько места вы можете занять, сколько файлов вы можете иметь и т. Д. Дисковые квоты могут быть установлены для максимального числа inode и дисковых блоков.

Попробуйте запустить quotaи quota -g(или, наоборот, вы можете запустить repquota -uи repqouta -g), чтобы увидеть, ограничены ли ваш пользователь таким образом и как. Если да, вы можете изменить эти квоты с помощью edquotaили отключить их с помощью quotaoffкоманды. Для этого вам может потребоваться войти в систему как пользователь root, в зависимости от ваших настроек.

Этот сайт содержит несколько примеров работы с квотами, а также содержит ссылки на справочные страницы с полезными командами.

Adalee
источник