it-swarm-es.tech

¿Los enlaces simbólicos realmente hacen una diferencia en el uso del disco?

He leído en tantos sitios web que, en Linux, los enlaces simbólicos (enlaces blandos, enlaces simbólicos) son como punteros que hacen referencia a otro archivo, que puede estar ubicado en cualquier lugar (como accesos directos de Windows). Sin embargo, cuando verifico el uso del disco de una carpeta en la que hay enlaces simbólicos, hay una discrepancia entre lo que dice mi administrador de archivos y lo que informa du. Sin embargo, si escribo _du -L_ (_-L, --dereference; dereference all symbolic links_ desde la página del manual), el resultado de _du -L_ y el tamaño que informa mi administrador de archivos son los mismos.

Mi pregunta es: si tengo un enlace suave a un archivo grande, por ejemplo, en mi home partición, ¿tendré algún problema?

Ejemplo:

Mi carpeta _/var/tmp_ ahora está completamente vacía. Vamos a crear un archivo:

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

Y mi administrador de archivos (Thunar, en este caso) informa

Tamaño: 1 artículo, totalizando 163.0 kB

Todo bien. Ahora, creemos un archivo realmente grande en _/tmp_ y un enlace simbólico a él:

_$ 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
_

Todo está bien por ahora. Pero si abro mi administrador de archivos:

Tamaño: 2 artículos, un total de 570.3 kB

Y finalmente:

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

Si la partición en la que se encuentra _/var/tmp_ es 1 GiB grande, y creo un enlace en ella a un archivo 1 GiB), ¿ mi disco duro muere? Sé que du generará 168 y Thunar 1 GiB, pero no sé cuál es el correcto.

21
astrojuanlu

Los enlaces simbólicos ocupan espacio, por supuesto, pero solo el espacio necesario para almacenar el nombre y el destino más unos pocos bytes para otros metadatos. El espacio ocupado por un enlace simbólico no depende del espacio ocupado por el objetivo (después de todo, ni siquiera se requiere que exista el objetivo).

Plain du informa el espacio ocupado por un árbol de directorios en el disco. du -L informa el espacio que sería ocupado por un árbol de directorios si todos los enlaces simbólicos fueran reemplazados por su destino. La primera suele ser la información útil; por ejemplo, es el espacio que recuperaría si eliminara el árbol, y es (aproximadamente) el espacio que necesita para hacer una copia de seguridad del árbol.

du en un árbol de directorios muestra (generalmente) un poco más que el total de los tamaños de archivo. Eso se debe a dos cosas. Primero, du también cuenta los directorios, que requieren un poco de espacio para almacenar nombres de archivos y metadatos. En segundo lugar, du cuenta el espacio en disco que ocupa un archivo, que puede ser diferente del tamaño del archivo: el efecto más común es que los archivos ocupan un número entero de bloques (4kB en una instalación típica de Linux), por lo que un archivo de 1 byte puede mostrarse como 4kB en du output; pero la compresión (como la forma primitiva proporcionada por archivos dispersos en casi todos los sistemas de archivos Unix) puede hacer que el tamaño del archivo sea mayor que el uso de su disco.

De los números que da, parece que Thunar informa la suma de los tamaños de los archivos en el árbol de directorios, siguiendo los enlaces simbólicos . En realidad lo dice de una manera sutil: afirma que el tamaño total es de 570.3 kB, no que el uso del disco es de 570.3 kB. Lo que no se ve en absoluto en la interfaz de usuario o en la documentación es que Thunar sigue enlaces simbólicos al calcular el tamaño.

Cuál es "correcto" es un asunto subjetivo. du informa el uso del disco. Thunar informa el tamaño total siguiendo enlaces simbólicos. La creación de un enlace simbólico tiene un impacto insignificante en el uso del disco, pero por definición cambia los enlaces simbólicos de tamaño total que informa Thunar.

Creo que, por defecto, su administrador de archivos está tratando de obtener el tamaño de los archivos a los que apuntan los enlaces blandos, mientras que du le da el tamaño del directorio y los enlaces blandos, pero no los archivos a los que apuntan a.

Para aclarar,

`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.

No estoy seguro de si esto es lo que estaba preguntando, pero si es así, entonces creo que esta podría ser la respuesta a su pregunta.

3
Jay