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

21

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

Minha pergunta é : se eu tiver um link para um arquivo grande em, por exemplo, minhahomepartiçãoseparada, terei algum problema?

Exemplo :

Minha /var/tmppasta 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) relata

Tamanho: 1 item, totalizando 163.0 kB

Tudo certo. Agora, vamos criar um arquivo muito grande /tmpe 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

Está tudo bem por enquanto. Mas se eu abrir meu gerenciador de arquivos:

Tamanho: 2 itens, totalizando 570,3 kB

E finalmente:

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

Se a partição /var/tmplocalizada tiver 1 GiB de tamanho grande e eu criar um link para um arquivo de 1 GiB, ¿meu disco rígido morrerá? Eu sei que duisso produzirá 168 e Thunar 1 GiB, mas não sei qual é o certo.

astrojuanlu
fonte
Você tem certeza de que um programa não está relatando, por exemplo, no Mib e outro em MB?
HandyGandy
Não, não é um problema de unidades.
Astrojuanlu 10/10/10

Respostas:

34

Os links simbólicos ocupam espaço, é claro, 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, o destino nem precisa existir).

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

duem uma árvore de diretórios mostra (geralmente) um pouco mais do que o total dos tamanhos de arquivo. Isso é devido a duas coisas. Primeiro, dutambém conta com diretórios, que exigem um pouco de espaço para armazenar nomes de arquivos e metadados. Segundo, duconta 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), para que um arquivo de 1 byte possa mostra como 4kB na saída du; mas a compactação (como a forma primitiva fornecida por arquivos esparsos em praticamente todos os sistemas de arquivos unix) pode aumentar o tamanho do arquivo que o uso do disco.

A partir dos números fornecidos, parece que Thunar relata 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 - afirma que o tamanho total é de 570,3 kB, não que o uso do disco seja de 570,3 kB. O que não é aparente na interface do usuário ou na documentação é que Thunar segue links simbólicos ao calcular o tamanho.

Qual deles está "certo" é uma questão subjetiva. durelata o uso do disco. Thunar relata o tamanho total seguindo links simbólicos. Criar 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 relatório que Thunar relata.

Gilles 'SO- parar de ser mau'
fonte
Eu editei minha pergunta, então acho que está bem claro agora, mas obrigado pela resposta.
astrojuanlu
@ Juanlu001: Atualizei minha resposta de acordo. Em resumo, dumostra o uso do disco, enquanto o Thunar mostra outra coisa.
Gilles 'SO- stop be evil'
A diferença é importante quando você cria backups que resolvem links simbólicos. Você pode fazer isso se souber que possui vários links simbólicos abaixo de uma árvore que são resolvidos para locais fora de uma árvore, mas o restante das coisas fora dessa árvore não é importante para você.
Mel
3

Eu acho que, por padrão, seu gerenciador de arquivos está tentando obter o tamanho dos arquivos que os links flexíveis estão apontando, enquanto dufornece o tamanho do diretório e dos links flexíveis, mas não dos arquivos para os quais eles apontam.

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 que você estava perguntando, mas se for, acredito que essa poderia ser a resposta para sua pergunta.

Jay
fonte
Desculpe por não ter respondido à minha pergunta: o que você disse eu já descobri. Acabei de editar.
Astrojuanlu 10/10/10