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

21

Eu tinha um arquivo em um sistema de arquivos XFS cujo tamanho era de aproximadamente 200 GB. Era uma imagem QCOW2 contendo um disco virtual de uma máquina virtual acionada por KVM. Algo deu errado (talvez tenha sido alguma falha do qemu-kvm, não tenho certeza), a máquina virtual travou 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 lsmostra como 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

Ocupa 410855320 blocos, mas lsmostra como ~ 6,6 exabytes.

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

PS: É tão bom tirar fotos regularmente! :) Não sei o que faria sem eles.

Volodymyr Melnyk
fonte
Muito obrigado pelas suas respostas. Claro, eu sei sobre arquivos esparsos, mas a pergunta mais importante para mim é a seguinte: é seguro remover esses arquivos? Como vejo agora, há uma chance de perder alguns dados se os sistemas de arquivos estiverem corrompidos. Não posso ter certeza de que os sistemas de arquivos estão bem, porque é indesejável desmontá-los e verificá-los, mas a primeira ocorrência ocorreu há 4 meses, a segunda - 14 meses atrás, então espero ver se há algum sistema de arquivos corrupção, se houver. O que você acha?
Volodymyr Melnyk

Respostas:

31

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

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

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

Se o motivo 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 é corrupção do sistema de arquivos, não é seguro excluir os arquivos sem uma verificação no sistema de arquivos. Se um sistema de arquivos estiver corrompido de forma que vários arquivos alegem estar ocupando o mesmo espaço, a exclusão de um desses arquivos causaria a liberação desses blocos. Uma vez que esses blocos liberados são reutilizados, a corrupção piora.

Se você tiver outros sintomas que pensam 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 está corrompido e os arquivos parecerem esparsos, eu os excluiria apenas quando não precisar mais deles.

Kasperd
fonte
6

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

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

O que você vê se provavelmente um arquivo com dados gravados em um deslocamento muito grande. Significando que a maior parte do espaço de endereço do arquivo não está alocada. Mas você ainda pode ler.

François
fonte
Obrigado. O que você acha, não trava nada se eu apenas remover esses arquivos?
Volodymyr Melnyk
1
Google "arquivo esparso" para detalhes.
Kondybas