Como produzo quanto do tamanho nominal do arquivo é realmente preenchido com dados? Como vmtouch
mostra quanto do arquivo está atualmente na memória ...
Espero que o fluxo de trabalho seja assim:
$ fallocate -l 1000000 data
$ measure_sparseness data
100%
$ fallocate -p -o 250000 -l 500000 data
$ measure_sparseness
50%
Solução: use du -bsh
e du -sh
e compará-los.
files
sparse-files
Vi.
fonte
fonte
filefrag
para qualquer sistema de arquivos exfs_bmap -vpl
para o XFS, são as principais ferramentas para mostrar onde estão os dados (e onde estão as extensões não escritas pré-alocadas) ao brincar com arquivos esparsos e fazer furos.filefrag data
-> múltiploFIBMAP: Invalid argument
->data: 1 extent found
...filefrag -e
funciona perfeitamente em XFS e ext4 pelo menos. Eu não testei em outros. Ele usa FIEMAP (mapa de extensão), com um fallback para o FIBMAP. Se essesioctl
s não funcionarem, não será útil.filefrag
não tem-e
opção.e2fsprogs
? Tenho certeza de que não é um recurso recente. Há também uma-v
opção que imprime as mesmas informações detalhadas (mais algumas linhas de cabeçalho extras). Talvez vocêfilefrag
tenha isso. Ao contrárioxfs_bmap
, porém, ele não indica explicitamente os furos com linhas separadas, apenas possui descontinuidades na posição do arquivo. De qualquer forma, não estou surpreso quetmpfs
não seja compatível com o FIEMAP, porque não existe um dispositivo de bloco como uma loja de suporte, portanto, não há valor sensato para a localização das extensões.Respostas:
find
tem um%S
especificador de formato que é chamado "escassez"fonte
ln -s foo link
"escassez" delink
: 0. Sockets e FIFOs tem comprimento zero, assim quefind
mostra escassez 1.Se o seu
find
não tiver essa opção, um método que funcione no UNIX desde os anos 70 é:O que imprimirá o número real de blocos usados e o byte mais alto já gravado. A partir disso, você pode calcular facilmente quantos blocos realmente não foram alocados.
fonte
Enquanto
find
's%S
imprimirá uma saída breve, para mais detalhes você pode querer olhar para osparsetest
que eu escrevi - código aberto, e no github aqui . Sinta-se à vontade para modificá-lo se desejar imprimir (por exemplo) todos os furos.Artigo do blog mostrando problemas com alocações esparsas aqui usando
sparsetest
para depurar o problema.fonte
vmtouch -v
imprime o mapa de áreas em cache no arquivo?lseek
comSEEK_HOLE
eSEEK_DATA
. Fácil de fazer.