Tamanho de arquivo muito estranho (mais de 600 PB) em um pequeno sistema de arquivos

20

Eu tinha um arquivo em um sistema de arquivos XFS cujo tamanho era de cerca de 200 GB. Era uma imagem do QCOW2 contendo um disco virtual de uma máquina virtual controlada por KVM. Algo correu mal (talvez tenha sido alguma falha do qemu-kvm, não tenho certeza), a máquina virtual caiu e agora eu tenho um arquivo que se parece com isso:

191090708 -rwxr--r--. 1 root root 737571587400425984 Oct 10 10:03 973d10e0-a5e3-4a59-9f98-4b9b9f072ade

Portanto, ele ainda ocupa 191090708 blocos, mas ls mostra 656 petabytes.

Além disso, tenho outro arquivo com o mesmo pré-histórico, mas em outro sistema de arquivos (não XFS, mas GFS2):

410855320 -rwxr--r--. 1 root root 7493992262336241664 Dec 13  2014 ac2cb28f-09ac-4ca0-bde1-471e0c7276a0

Ele ocupa 410855320 blocos, mas ls mostra como ~ 6,6 exabytes.

O que você acha, é seguro remover esses arquivos? Obrigada!

P.S. É tão bom ter instantâneos tirados regularmente! :) Eu não sei o que faria sem eles.

    
por Vladimir Melnik 10.02.2016 / 12:36

2 respostas

31

Posso ver dois motivos possíveis para você ver esses tamanhos de arquivo:

  • Arquivos esparsos
  • Corrupção do sistema de arquivos

Arquivos esparsos são um recurso em alguns sistemas de arquivos onde você pode criar um arquivo com falhas. Nenhum espaço físico é alocado para os furos. A leitura dos buracos retornará bytes NUL até o fim.

Se a razão para o que você está vendo for arquivos esparsos, é tão seguro excluí-los como seria com um arquivo não esparso.

Se a razão para o que você está vendo for corrupção do sistema de arquivos, não é seguro excluir os arquivos sem uma verificação do sistema de arquivos. Se um sistema de arquivos estiver corrompido de uma maneira em que vários arquivos afirmam estar ocupando o mesmo espaço, a exclusão de um desses arquivos faria com que esses blocos fossem liberados. Quando esses blocos liberados são reutilizados, a corrupção piora.

Se você tiver visto algum outro sintoma que faça você achar que o sistema de arquivos pode estar corrompido, você deve forçar uma verificação completa do sistema de arquivos antes de excluir os arquivos.

Se não houver evidências sugerindo que o sistema de arquivos esteja corrompido e os arquivos pareçam escassos, basta excluir os arquivos quando não precisar deles por mais tempo.

    
por 10.02.2016 / 14:32
6

O problema é a maneira como você calcula o tamanho do arquivo.

Uma maneira é olhar o deslocamento do último byte (como ls). A outra maneira é somar realmente blocos alocados (como du).

O que você vê, provavelmente, é um arquivo com dados gravados em um deslocamento muito grande. O que significa que as partes principais do espaço de endereços do seu arquivo não estão alocadas. Mas você ainda pode lê-lo.

    
por 10.02.2016 / 13:46