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 ls
mostra 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 ls
mostra 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.
Respostas:
Eu posso ver dois motivos possíveis para você ver esses tamanhos de arquivo:
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.
fonte
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.
fonte