Os links simbólicos realmente fazem diferença no uso do disco?

21

Eu li em tantos sites que, no Linux, links simbólicos (links, links simbólicos) são como ponteiros que fazem referência a outro arquivo, que pode estar localizado em qualquer lugar (como atalhos do Windows) . No entanto, quando verifico o uso do disco de uma pasta na qual existem links simbólicos, há uma incompatibilidade entre o que meu gerenciador de arquivos diz e o que du reporta. No entanto, se eu digitar du -L ( -L, --dereference; dereference all symbolic links da página man), a saída de du -L e o tamanho que meu gerenciador de arquivos reporta são os mesmos .

A minha pergunta é : se eu tiver um softlink para um arquivo grande em, por exemplo, minha partição home separada, terei algum problema?

Exemplo :

Minha pasta /var/tmp agora está vazia. Vamos criar um arquivo:

$ cat /some/file.txt > file.txt
$ du -ac
164 ./file.txt
168 .
168 total

E meu gerenciador de arquivos (Thunar, neste caso) reporta

Size: 1 item, totalling 163.0 kB

Tudo bem. Agora, vamos criar um arquivo realmente grande em /tmp e um link simbólico para ele:

$ cat /dir/really_big.txt > /tmp/heavy.txt
$ du -a | grep heavy.txt
408 ./heavy.txt
$ ln -s /tmp/heavy.txt heavy.txt
$ du -ac
164 ./file.txt
0   ./heavy.txt
168 .
168 total

Tudo está bem por enquanto. Mas se eu abrir meu gerenciador de arquivos:

Size: 2 items, totalling 570.3 kB

E finalmente:

$ du -acL
164 ./file.txt
408 ./heavy.txt
576 .
576 total

Se a partição na qual /var/tmp está localizada for 1 GiB big, e eu criar um link nela para um arquivo de 1 GiB, ¿meu disco rígido morrerá? Eu sei que du irá produzir 168 e Thunar 1 GiB, mas eu não sei o que está certo.

    
por astrojuanlu 09.10.2010 / 15:23

2 respostas

33

Claro que os links simbólicos ocupam espaço, mas apenas o espaço necessário para armazenar o nome e o destino, além de alguns bytes para outros metadados. O espaço ocupado por um link simbólico não depende do espaço ocupado pelo destino (afinal de contas, o destino não precisa sequer existir).

Comum du informa o espaço ocupado por uma árvore de diretórios no disco. du -L informa o espaço que seria tomado por uma árvore de diretórios se todos os links simbólicos fossem substituídos por seu destino. O primeiro é geralmente a informação útil; por exemplo, é o espaço que você recuperaria se você excluísse a árvore e seria (aproximadamente) o espaço necessário para fazer o backup da árvore.

du em uma árvore de diretórios mostra (geralmente) um pouco mais do que o total dos tamanhos de arquivo. Isso é devido a duas coisas. Primeiro, du também conta os diretórios, que ocupam um pequeno espaço para armazenar nomes de arquivos e metadados. Segundo, du conta o espaço em disco ocupado por um arquivo, que pode ser diferente do tamanho do arquivo: o efeito mais comum é que os arquivos ocupam um número inteiro de blocos (4kB em uma instalação típica do Linux). arquivo de byte pode mostrar como 4kB em du output; mas a compactação (como a forma primitiva fornecida por arquivos esparsos em praticamente todos os sistemas de arquivos unix) pode tornar o tamanho do arquivo maior que seu uso de disco.

A partir dos números fornecidos, parece que o Thunar reporta a soma dos tamanhos dos arquivos na árvore de diretórios, seguindo os links simbólicos . Na verdade, está dizendo isso de uma maneira sutil - está afirmando que o tamanho total é de 570,3 kB, não que o uso do disco seja de 570,3 kB. O que não é de todo aparente na interface do usuário ou na documentação é que o Thunar segue links simbólicos ao computar o tamanho.

Qual deles é "certo" é um assunto subjetivo. du relata o uso do disco. O Thunar reporta o tamanho total seguindo os links simbólicos. A criação de um link simbólico tem um impacto insignificante no uso do disco, mas, por definição, altera os links simbólicos de tamanho total após o Thunar.

    
por 09.10.2010 / 15:42
3

Acho que, por padrão, o gerenciador de arquivos está tentando obter o tamanho dos arquivos para os quais os links estão apontando, enquanto du fornece o tamanho do diretório e os links, mas não os arquivos que estão apontando para.

Para esclarecer,

'du'    -> size of directory + size of all the softlinks  
'du -L' -> size of directory + size of all the files that the softlinks are pointing to.

Não tenho certeza se é isso o que você estava perguntando, mas se for, acredito que essa pode ser a resposta para sua pergunta.

    
por 09.10.2010 / 23:00