Parece que você tem um arquivo esparso lá.
A sparse file is a type of computer file that attempts to use file system space more efficiently when the file itself is mostly empty. This is achieved by writing brief information (metadata) representing the empty blocks to disk instead of the actual "empty" space which makes up the block, using less disk space. The full block size is written to disk as the actual size only when the block contains "real" (non-empty) data.
Existe esta resposta que diz:
The
/var/lib/docker/devicemapper/devicemapper
directory contains the sparse loop files that contain all the other data that docker mounts.
Seu arquivo consiste principalmente em blocos vazios (todos os zeros) e como um arquivo esparso que pode caber em sua pequena partição. Aparentemente tar
simplesmente lê todos os zeros e os processa. Eles compactam muito bem, então o arquivo de resultado cresce apenas um pouco quando o fluxo de zeros termina.
Existe uma opção de linha de comando para tar
, que faz com que ele tenha conhecimento de arquivos esparsos. É descrito aqui .
-S
--sparse
No seu caso, o seguinte é muito importante, penso:
On extraction (…) any such files have also holes created wherever the holes were found. (…) Consider using
--sparse
when performing file system backups, to avoid archiving the expanded forms of files stored sparsely in the system.
Acho que você não usou a opção --sparse
, portanto, quando se trata de extração, o arquivo 100G
será criado como não esparso e não caberá na partição 20G
.