“Quota de disco excedida” ao gravar em / tmp, mas bastante espaço (linux)

9

Eu tenho um VPS. É gerenciado com os notórios paralelos plesk.

hoje comecei a ver mensagens (via wordpress a princípio, mas também no shell da linha de comando), dizendo: "Quota de disco excedida".

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

mas há muito espaço na máquina e apenas 1 partição.

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

Eu apaguei todos os arquivos de / tmp / *, mas ainda assim.

Não sei nada sobre "vzfs", talvez seja o culpado?

O que poderia ter dado errado? e como consertar isso?

Solução!

(se você NÃO usar o Parallels Plesk, consulte a resposta de @ Adalee)

Veja a solução da @deltik, relevante para o sistema da Parallel, como no meu caso.

O df -i imediatamente forneceu um número ridículo de inodes: 18.446.744.069.620.218.961, o que é insano para um site wordpress.

Eu explorei e encontrei a fila do qmail cheia de inodes (cheia de tentativas de alguns hackers de usar minha máquina para enviar spam e responder a falhas)

corrigir qmail não é relevante aqui, mas minha solução alternativa é relevante:

  1. parou o serviço do qmail
  2. não consegui baixar o qmhandle no sistema de cotas excessivas, então tive que
  3. extrair e fazer upload do script para outro site,
  4. exclua a fila com este comando:
  5. Perl <(wget -O - http://link.to.my/script.pl ) -D

Dessa forma, o script está sendo executado diretamente da Web (o que não é uma prática segura, mas eu coloquei o script sozinho), com opções de linha de comando.

obrigado @deltik por conhecer e reconhecer prontamente essa configuração peculiar no local e fornecer meios para diagnosticar ainda mais !!!

Berry Tsakala
fonte
O Linux possui configurações de alocação de cota de disco com base em usuário ou grupo. Vê-los assim 5 Passos para o usuário de configuração e Cota de Disco Grupo no UNIX / Linux
DavidPostill
11
Sim, vzfs(o sistema de arquivos "virtual" do OpenVZ) pode ser a causa. Eu já vi muitos provedores de OpenVZ que vendem servidores incrivelmente baratos, mas estabelecem limites impossivelmente estúpidos para eles.
user1686
Se você tiver uma solução, mesmo que específica, poste-a como resposta. Você sempre pode aceitar a resposta de outra pessoa.
Daniel B

Respostas:

15

Você possui um sistema de arquivos VZFS, o que significa que seu VPS é uma máquina virtual Parallels Virtuozzo. No Virtuozzo, o provedor de hospedagem pode definir limites para muitos parâmetros, incluindo quais alocações você obtém com o VZFS.

Causa: Fora de Inodes (Mais Comum)

Depois de anos trabalhando com centenas de clientes do Virtuozzo VPS que tiveram o problema de não conseguir criar arquivos, mesmo que parecesse haver muito espaço livre, a grande maioria deles atingiu o limite de inodos. Execute este comando para ver a alocação de inode ( Inodes), inodes usados ​​( IUsed), inodes restantes ( IFree) e a porcentagem de inodes usados ​​( IUse%):

df -i

Ter 100% de uso de inode acontece muito. Causas comuns em minha experiência:

  • Devoluções por e-mail de spam
  • E-mails de spam de saída na fila
  • Muitos e-mails recebidos armazenados
  • Algum usuário configurando sua coleta de lixo da sessão PHP ( session.gc_maxlifetime) para mais de cem anos
  • Muitos arquivos de cache geral
  • Cache de objeto ativado no cache WordPress W3 Total Cache
  • Log de erros do Magento (um novo arquivo é gerado para cada erro)
  • Outros programas / scripts mal configurados ou mal projetados que formam um monte de arquivos e esquecem de excluí-los

Solução de problemas

Se você achar que está com pouco ou nenhum inode, mas não sabe onde está a maioria deles, eu tenho este liner do Bash que pesquisa o diretório atual e conta os inodes com uma profundidade de pasta de 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

Você pode continuar alterando o diretório de trabalho atual a partir de /até encontrar o culpado usando sua alocação de inode.

Explicação

Seu VPS está em um sistema de arquivos VZFS, que faz parte do Parallels Virtuozzo (não o OpenVZ, que é semelhante e baseado na mesma tecnologia, mas o OpenVZ não usaria o VZFS).

Devido à maneira como o Virtuozzo armazena arquivos no VZFS, os inodes geralmente são limitados mais do que seriam em outros sistemas de arquivos como ext4 ou XFS. O host rastreia todos esses arquivos e seria vantajoso para o provedor de hospedagem não permitir que um único VPS ocupasse centenas de milhões de inodes. Como resultado, o provedor de hospedagem pode definir o limite de inodes como baixo, como 1.000.000 de inodes.

Depois de anos trabalhando com centenas de clientes que esgotaram sua alocação de inodes no Virtuozzo, esses problemas de quota de disco "misteriosos" não me surpreendem mais.

Causa: Outros limites do Virtuozzo

Uma porcentagem muito pequena dos clientes do Virtuozzo VPS com quem trabalhei tiveram problemas no sistema de arquivos porque atingiram outros limites. Você pode ver alguns (mas não todos) dos limites com este comando:

cat /proc/user_beancounters

Solução de problemas

Se a failcntcoluna tiver um valor maior que 0 ou se o heldvalor da coluna for igual ao limitvalor correspondente , você atingiu um limite.

Você pode procurar o que cada parâmetro está no wiki do OpenVZ aqui . Um parâmetro pode ser "primário", "secundário" ou "auxiliar".

Você deve entrar em contato com o seu provedor de hospedagem para obter mais assistência, se achar que não pode diminuir a heldcontagem para um limite que seu VPS atingiu.

Essa resposta pode ser muito expandida, dependendo de quais beans foram atingidos no máximo, pois limites diferentes atingidos causam sintomas diferentes.

Causa: o (s) limite (s) diminuiu após ser atingido

Em relação /proc/user_beancountersou df -i, às vezes, um administrador do sistema Virtuozzo pode diminuir o limitde um parâmetro abaixo do heldvalor.

Por exemplo, se o limite original do diskinodesparâmetro fosse 1.500.000 e você atingir o limite, alguém no seu provedor de hospedagem definir seu limite de inode para 1.000.000, você verá um relatório bizarro de inode df -ique não faz sentido.

Do seu lado, você pode ver um número excessivamente grande, como 18.446.744.069.620.218.961 .

Considero que este é um comportamento sinistro do provedor de hospedagem, especialmente se eles não o informarem, porque os valores incomuns que você vê são contrários ao conhecimento de superusuários que não têm experiência com o Virtuozzo / OpenVZ, o que leva a erros. conselho ( exemplo , outro exemplo ).

Solução de problemas

Entre em contato com seu provedor de hospedagem. Mostre a eles o que encontrou e trabalhe com eles para manter seus grãos abaixo do limite.

Se eles se recusarem a ajudá-lo, abandone seu provedor de hospedagem e encontre outro que não use a virtualização Virtuozzo / OpenVZ. Os servidores de virtualização KVM, VMware, Xen ou bare metal estariam sujeitos a muito menos limites do que o Virtuozzo / OpenVZ.

Explicação

Seu provedor de hospedagem pode ter auditado ou respondido a um alerta e constatado que seu VPS estava usando muito de um recurso específico (quase sempre o limite de inodes, que é o diskinodesparâmetro no final).

Um administrador inexperiente do Virtuozzo no provedor de hospedagem acredita que pode resolver o problema reduzindo o limite para algo menor do que o uso real dos recursos. No caso de inodes, você pode ter uma alocação mais baixa, como 1.000.000, mesmo que o uso atual real possa ser maior, como 1.500.000.

O administrador do Virtuozzo em seu painel de controle veria seu uso real e o novo limite, mas você veria números falsos que são possivelmente muito excessivamente altos devido à maneira como o Virtuozzo se virtualiza.

Um administrador negligente do Virtuozzo não informaria sobre essa alteração, e é por isso que você deve entrar em contato com o seu provedor de hospedagem se isso acontecer.

Deltik
fonte
eu não sei se 18.446.744.069.620.218.961 é um número aceitável de inodes para um site que é executado wordpress ...
Berry Tsakala
@BerryTsakala: Esse é o número de inodes usados ​​ou o número total de inodes suportados pelo sistema de arquivos? Se você pudesse fornecer a saída completa do comando, poderíamos ter certeza. Com base no que você escreveu até agora, parece que seu host não tem um limite de inode definido, o que significa que eu estaria errado. Terei uma resposta atualizada para você, que explora mais os limites do Virtuozzo.
Deltik
@BerryTsakala: Apenas me ocorreu que seu anfitrião pode estar fazendo algo sinistro e esperando que você não perceba. Atualizarei minha resposta em breve com detalhes.
Deltik
obrigado! eu já comecei a excluir arquivos redundantes. Também descobri que um remetente de spam abusa do sistema e o email está preenchendo a fila do qmail.
Berry Tsakala
BTW, o inode não resume: df -i é 100 trilhões de vezes maior que a soma retornada pelo comando find .... Você saberia como localizar a discrepância?
Berry Tsakala 20/08/2015
4

"Cota de disco excedida" não significa que não há espaço disponível no disco, mas que você não tem permissão para usar tanto espaço.

Em geral, as cotas são alguns limites definidos pelo administrador - número máximo de processos que você pode executar, quanto espaço você pode ocupar, quantos arquivos você pode ter, etc. As cotas de disco podem ser definidas para o número máximo de inodes e blocos de disco.

Tente executar quotae quota -g(alternativamente, você pode executar repquota -ue repqouta -g) para ver se seu usuário está restrito dessa maneira e como. Se sim, você pode editar essas cotas edquotaou desativá-las com o quotaoffcomando Pode ser necessário fazer login como root para isso, dependendo das suas configurações.

Este site abrange alguns exemplos de como trabalhar com cotas e também contém links para páginas de manual e comandos úteis.

Adalee
fonte