[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Dudas con hardlinks y el espacio que ocupan en disco



Buenas lista,

Me estoy volviendo un poco tarumba con el tema de los hardlinks y cuánto ocupan, a ver si alguien puede arrojarme un poco de luz al tema.

La teoría dice que un hardlink no es más que una referencia a un inodo de un fichero existente. Y por tanto entiendo que sólo debería ocupar el espacio necesario para guardar esa referencia.

Pues bien, para calcular el espacio ocupado en disco por lo visto uno no se puede fiar de "ls" porque toma el mismo espacio para los hardlinks que para los ficheros que éstos referencian:

user@host:~$ mkdir test
user@host:~$ cd test
user@host:~/test$ mkdir test1 test2
user@host:~/test$ dd if=/dev/zero of=test1/test.dd count=1 bs=1M
user@host:~/test$ ls -lh test1/
total 1,0M
-rw-r--r-- 1 user user 1,0M may 24 21:09 test.dd
user@host:~/test$ ln test1/test.dd test1/test.ddhl1
user@host:~/test$ ls -lh test1/
total 2,0M
-rw-r--r-- 2 user user 1,0M may 24 21:09 test.dd
-rw-r--r-- 2 user user 1,0M may 24 21:09 test.ddhl1

Eso lo tengo asumido. En cambio, el comando "du" de serie parece algo más listo porque sabe qué es y qué no un hardlink y a no ser que le indiques la opción -l, no cuenta en espacio ocupado por los hardlinks:

user@host:~/test$ du test1/
1028	test1/
user@host:~/test$ du test1/*
1024	test1/test.dd
user@host:~/test$ du -l test1/*
1024	test1/test.dd
1024	test1/test.ddhl1

Pero ahora creemos sólo 2 hardlinks en el segundo directorio:

user@host:~/test$ ln test1/test.dd test2/test.ddhl2
user@host:~/test$ ln test1/test.dd test2/test.ddhl3
user@host:~/test$ du test2/
1028	test2/
user@host:~/test$ du -hs test1/*
1,0M	test1/test.dd
user@host:~/test$ du -hs test2/*
1,0M	test2/test.ddhl2

¿Qué sucedió en el último paso? Du contó el espacio ocupado por un hardlink a pesar de no haberle indicado que los tenga en cuenta para el recuento de espacio :(

Todo este rollo viene porque tengo un directorio lleno sólo de hardlinks (comprobado con "stat" archivo a archivo) que según "du" ocupa 5.8GB y la verdad es que no lo entiendo:

root@vg:/dir/bck# for i in `ls`; do echo -ne "File ${i}: "; stat ${i} | grep Links | awk '{ print $5" "$6 }'
File a1.dmp: Links: 4
File a1.log: Links: 4
File a2.dmp: Links: 4
File a2.log: Links: 4
(...)

root@vg:/dir/bck# cd ..
root@vg:/dir# du bck/
5997988	bck/
root@vg:/dir# du -h bck/
5.8G	bck/

Si a alguien se le ocurre algo, agradecido.

Salut,
jors


Reply to: