Arquivo Huge Docker e comportamento 'tar'

3

Quando fiz um backup no meu sistema Linux com tar -czv , notei que o processo ficou muito longo em /var/lib/docker/devicemapper/devicemapper/data (muito mais do que uma cópia de todas as minhas imagens e contêineres deveria levar), enquanto o arquivo resultante não cresce.

Ao verificar esse tamanho de arquivo com ls -lh , ele me envia um 100G size em uma partição 20G . Que tipo de arquivo é esse e o que o tar está fazendo aqui?

    
por Milleu 12.02.2017 / 19:47

1 resposta

2

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 .

    
por 12.02.2017 / 19:59