É possível que o du relate significativamente mais disco em uso do que o ponto de montagem disponível?

2

Eu encontrei uma situação interessante no outro dia. Eu tenho um sistema de arquivos NFS de 1TB montado em / backup. df informou aproximadamente o tamanho total de 1 TB, conforme esperado.

No entanto, a execução de du -csh . no diretório /backup/.snapshot relatou 3.0 TB de dados.

Eu nunca vi du produzir saída maior no tamanho total do que o ponto de montagem. Esse compartilhamento NFS é fornecido por um appliance da NetApp. O diretório .snapshot é criado pelo afaik da NetApp, configurado para usar 5% do espaço. (e, claro, não deve ser possível usar 300% do espaço)

Então, isso é um problema do Linux, um problema do NFS, um problema da NetApp ou outra coisa? Que outros dados posso fornecer?

OS é o CentOS 6.

    
por cat pants 15.04.2014 / 23:51

1 resposta

1

Já faz um tempo desde que usei o NetApp e, portanto, não posso responder com absoluta autoridade, mas posso fornecer uma explicação para esse tipo de comportamento.

Isso soa como se estivesse operando de maneira muito semelhante a como o LVM do Linux opera. Vamos dizer que você tem um disco físico de 1TB com 100% dele mapeado para um grupo de volumes LVM. Agora você cria um volume lógico de 100 GB nesse grupo de volumes. Você faz algumas coisas, coloca alguns arquivos, etc. Então você cria um instantâneo desse volume lógico. Agora, todos os arquivos (blocos realmente) que são modificados no volume lógico são copiados para que o instantâneo tenha acesso aos dados originais. Mas você também pode tirar esse instantâneo e montá-lo como um volume normal. Se você montá-lo, agora você tem 2 sistemas de arquivos de 100GB montados. Mas os dois sistemas de arquivos compartilham os mesmos dados (blocos de volume físico) até que os dados sejam alterados em um deles.

O que a NetApp provavelmente está fazendo é permitir o acesso a esses instantâneos por meio do diretório /backup/.snapshot . Quando analisado, cada instantâneo tem o mesmo tamanho do volume original.

Isto pode parecer uma esquisitice, mas é perfeitamente legal (em termos de NFS, kernel, etc). Quando você executa df , seu sistema faz uma chamada NFS para dizer "qual é o tamanho deste sistema de arquivos", no qual o sistema remoto pode responder da maneira que desejar. Então, quando você faz um du , seu sistema faz uma chamada NFS para dizer "quão grande é esse arquivo", sobre o qual o sistema remoto pode responder da maneira que quiser.
Você também pode fazer coisas semelhantes (mas não as mesmas) com arquivos esparsos. Dizem que o arquivo ocupa mais espaço do que realmente é.

Atualmente, existem várias maneiras avançadas de economizar espaço em sistemas de arquivos. As questões de "quanto espaço eu tenho" ou "quanto espaço esse arquivo ocupa" nem sempre têm respostas simples. Você pode ter coisas como snapshot, desduplicação, compressão transparente, etc.

    
por 16.04.2014 / 03:05