Por que o tamanho e o espaço usado na saída do df contradizem o espaço disponível [duplicado]

1

Executando o seguinte comando:

$ df -h

Dá a seguinte saída:

Filesystem                        Size  Used Avail Use% Mounted on
/dev/md2                           91G   85G  1.2G  99% /home

O que significa que do total de 91 apenas 85 é usado, o que deve deixar 6 Avail (91 - 85 = 6). Por que Avail apenas 1.2?

Esta questão é explicitamente sobre a contradição entre a coluna Used - Size e a Avail em df output em oposição a uma discrepância entre df e du output como em esta pergunta relacionada . No meu caso, não há arquivos apagados ainda em uso no sistema de arquivos.

    
por magicode 17.03.2017 / 12:00

2 respostas

4

Por padrão, os sistemas de arquivos ext2, ext3 e ext4 reservam 5% de sua capacidade de uso pelo usuário root. Isso reduz a fragmentação e reduz a probabilidade de que o usuário root ou qualquer daemons de propriedade da raiz fique sem espaço em disco para executar operações importantes. Mais informações sobre os motivos por trás dessa reserva podem ser encontradas nas respostas a esta questão relacionada .

Você pode verificar o tamanho da reserva com a tune2fs comando:

tune2fs -l /dev/md2 | grep "Reserved block count:"

A porcentagem da reserva pode ser alterada usando a opção -m do comando tune2fs :

tune2fs -m 0 /dev/md2

O número de blocos reservados reservados pode ser alterado usando a opção -r do comando tune2fs :

tune2fs -r 0 /dev/md2

O espaço reservado é menos útil em sistemas de arquivos grandes com conteúdo estático que não está relacionado ao sistema operacional. Para tais sistemas de arquivos, é razoável reduzir a reserva a zero. É melhor deixar os sistemas de arquivos com a reserva padrão de 5% incluindo os que contêm os diretórios / , /root , /var e /tmp que são frequentemente usados pelos daemons e outros serviços do sistema para criar arquivos ou logs temporários em tempo de execução .

    
por 17.03.2017 / 12:09
2

A causa mais comum desse efeito são os arquivos abertos que foram excluídos.

O kernel só liberará os blocos de disco de um arquivo excluído se ele não estiver em uso no momento de sua exclusão. Caso contrário, isso é adiado até que o arquivo seja fechado ou o sistema seja reinicializado.

Um truque comum no mundo do Unix para garantir que nenhum arquivo temporário seja deixado é o seguinte:

  1. Um processo cria e abre um arquivo temporário
  2. Ainda mantendo o descritor de arquivo aberto, o processo desassocia (ou seja, exclui) o arquivo
  3. O processo lê e grava no arquivo normalmente usando o descritor de arquivo
  4. O processo fecha o descritor de arquivo quando ele é concluído e o kernel libera o espaço
  5. Se o processo (ou o sistema) terminar inesperadamente, o arquivo temporário já será excluído e nenhuma limpeza será necessária.
  6. Como bônus, a exclusão do arquivo reduz as chances de nomear colisões ao criar arquivos temporários e também fornece uma camada adicional de obscuridade sobre os processos em execução - para qualquer pessoa, exceto o usuário raiz, ou seja,

Esse comportamento garante que os processos não tenham que lidar com arquivos que são repentinamente retirados de seus pés, e também que os processos não precisem consultar um ao outro para excluir um arquivo. No entanto, é um comportamento inesperado para os usuários de sistemas Windows, já que normalmente não é permitido excluir um arquivo em uso.

O comando lsof, quando executado como root, mostrará todos os arquivos abertos e indicará especificamente os arquivos excluídos que foram excluídos:

# lsof 2>/dev/null | grep deleted
bootlogd   2024       root    1w      REG                9,3         58     917506 /tmp/init.0W2ARi (deleted)
bootlogd   2024       root    2w      REG                9,3         58     917506 /tmp/init.0W2ARi (deleted)

Parar e reiniciar os processos culpados ou simplesmente reinicializar o servidor deve resolver esse problema.

Arquivos deletados também podem ser mantidos abertos pelo kernel se, por exemplo, for uma imagem de sistema de arquivos montada. Nesse caso, desmontar o sistema de arquivos ou reinicializar o servidor deve resolver o problema.

No seu caso, a julgar pelo tamanho do espaço "ausente", eu procuraria por referências ao arquivo que você usou para configurar o VPS, por exemplo. a imagem do DVD do Centos que você apagou após a instalação.

    
por 17.03.2017 / 12:08

Tags