Como um sistema de arquivos VirutalBox de 10 GB pode armazenar 11 GB de dados?

2

Estou muito confuso com isso. Para fazer algumas experiências com o GlusterFS eu criei duas máquinas virtuais com o VirtualBox, rodando o Ubuntu 12.04, cada uma com 10GB de armazenamento. Eu escrevi um script que criou muitos pequenos arquivos em muitas pastas. Cada arquivo tinha 100k de dados aleatórios gerados por:

dd if=/dev/zero of=#{name} bs=1 count=0 seek=100K

Ao copiar os arquivos de uma máquina para outra, o destinatário fica sem espaço. O que deveria ter sido impossível, já que ambos são do mesmo tamanho e eu não guardei nada neles. Tentando descobrir o que estava errado, encontrei uma situação realmente confusa. Tudo isso está na máquina de origem.

De acordo com o df, estou usando apenas 26% do espaço:

root@revisionist:~# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/revisionist-root  9.2G  2.3G  6.5G  26% /
udev                          237M  4.0K  237M   1% /dev
tmpfs                          50M  292K   49M   1% /run
none                          5.0M     0  5.0M   0% /run/lock
none                          246M     0  246M   0% /run/shm
/dev/sda1                     228M   48M  169M  22% /boot

de acordo com du, toda a estrutura de arquivos que criei leva 772M:

root@revisionist:~# du -h files/
...
4.0K    files/3x/ey/hs
8.0K    files/3x/ey
508K    files/3x
772M    files/

que está claramente errado, pois apenas essa pasta contém um único arquivo de 100K:

root@revisionist:~# ls -lh files/3x/ey/hs
total 0
-rw-r--r-- 1 root root 100K May 19 11:30 3xeyhst4lnkzg5abzeasiw.txt

Se eu segmentar esse diretório e arquivo com du, os dados estarão claramente errados:

root@revisionist:~# du -h files/3x/ey/hs/
4.0K    files/3x/ey/hs/
root@revisionist:~# du -h files/3x/ey/hs/3xeyhst4lnkzg5abzeasiw.txt
0   files/3x/ey/hs/3xeyhst4lnkzg5abzeasiw.txt

Isso me levou a encontrar a opção --apapent-size que é documentada como:

--apparent-size

print apparent sizes, rather than disk usage; although the apparent size is usually smaller, it may be larger due to holes in ('sparse') files, internal fragmentation, indirect blocks, and the like

e, de fato, isso parece melhor:

root@revisionist:~# du -h --apparent-size files/3x/ey/hs/3xeyhst4lnkzg5abzeasiw.txt
100K    files/3x/ey/hs/3xeyhst4lnkzg5abzeasiw.txt
root@revisionist:~# du -h --apparent-size files/3x/ey/hs
104K    files/3x/ey/hs

mas quando eu corro para toda a estrutura acabo com um resultado surpreendente:

root@revisionist:~# du -h --apparent-size files
...
104K    files/3x/ey/hs
108K    files/3x/ey
6.8M    files/3x
11G files

Como pode ser 11G? O que está acontecendo? Apenas arredondando para cima? mas por que não cabe na outra máquina?

    
por pupeno 19.05.2014 / 18:21

1 resposta

4

Se você está procurando o tamanho total do diretório, use -s .

Veja o que o du -sh files oferece?

Além disso, como exatamente você criou os arquivos e eles realmente têm conteúdo? As diferenças entre os tamanhos relatados podem significar que os arquivos são esparsos.

    
por 19.05.2014 / 18:35

Tags