Ao examinar alguns sistemas de arquivos para ver o que consome espaço em disco, descobri um diretório chamado GNUSparseFile.0
. Não consigo descobrir facilmente se seu conteúdo é usado. Pode ser alguma sobra temporária de untarring? O sistema operacional é FreeBSD, então pode ter sido descompactado com BSD tar
.
Já fui mordido por isso antes.
Você está certo. O manual do GNU
tar
tenta lhe vender uma mentira:Eles afirmam ter encontrado uma maneira portátil de arquivar arquivos esparsos, sem expandir as regiões esparsas a zeros. Você pode extrair o arquivo corretamente com qualquer implementação de
tar
.Agora, o formato tar não tem opção para especificar algo como "a região de A a ser é zero e a ser representada esparsa na extração". Então, o que eles fizeram, em vez de adicionar algo ao cabeçalho do arquivo (não há muito espaço lá, para ser honesto) para resolver isso (e deixar um descompactador notificar o usuário se ele não conseguir descompactar), ou integrar a compactação de fato em seu
tar
ferramenta em vez de canalizar os dadosgzip
ou algo semelhante, é que eles inventaram uma nova estrutura de dados, um contianer, que contém primeiro um mapa das regiões esparsas de um arquivo e o restante não esparso desse arquivo.Em seguida, eles arquivam um "contêiner pseudo-esparso" quando você usa o GNU tar e diz para preservar a esparsidade.
Claro, na extração, a menos que você use a mesma implementação, você obtém o contêiner – e não o arquivo esparso. O que, no mínimo, pode ser um pouco surpreendente para o usuário e quebra a ideia de "portabilidade" (ou seja, os dados que entraram são os dados que saíram, em qualquer máquina com qualquer
tar
). Observe também o quão mal a interfacexsparse
foi projetada aqui; você deve saber o nome do arquivo esparso original e terá que procurá-lo manualmente :/.Provavelmente alguém descompactou um
tar
arquivo GNU contendo um contêiner de arquivo tão esparso e depois limpou os arquivos que esperava estar naquele arquivo (possivelmente por meio de uma lista de arquivos que chegou a eles de uma maneira diferente do que apenas o arquivo tar) . Eles estavam esperando o arquivo original - que durante a limpeza possivelmente não pôde ser encontrado - mas não o contêiner esparso, então para eles parecia que o contêiner esparso não era do que eles descompactaram e eles o ignoraram.Então, é isso que você tem aqui: algo que veio de um
tar
TAR criado pelo GNU e que nunca foi finalmente desempacotado de seu contêiner.