Vediamo tramite alcuni esempi la realizzazione di un hard link. Un hard link è praticamente la copia di un file, ossia è lo stesso file con nomi diversi ma il file originale e tutti gli hard link associati a quel file sono indistinguibili. L’unico modo di distinguere i file è attraverso il suo inode.

Ad esempio per spiegare i concetti che stanno dietro a un hard link andiamo a creare un file di test da 1Gb con il comdando dd.

[rdmbe@drurhs01 tmp]$ df -h /tmp/
Filesystem            Size  Used Avail Use% Mounted on
/dev/vg00-tmplv       4.0G  521M  3.3G  14% /tmp

[rdmbe@drurhs01 tmp]$ dd if=/dev/zero of=/tmp/zero.img bs=1M count=1000
1000+0 records in
1000+0 records out

[rdmbe@drurhs01 tmp]$ df -h /tmp/
Filesystem            Size  Used Avail Use% Mounted on
/dev/vg00-tmplv       4.0G  1.4G  2.4G  38% /tmp

[rdmbe@drurhs01 tmp]$ ls -lrt zero.img
-rw-rw-r--  1 rdmbe rdmbe 1048576000 Mar 18 16:22 zero.img

Ora andiamo a creare i nostri hard link (in particolare 3 file con nome diverso ma di fatto copie dello stesso file originale):

[rdmbe@drurhs01 tmp]$ mkdir temp
[rdmbe@drurhs01 tmp]$ sleep 1 && ln zero.img temp/zero.img.$(date +%Y%m%d-%H.%M.%S).copy
[rdmbe@drurhs01 tmp]$ sleep 1 && ln zero.img temp/zero.img.$(date +%Y%m%d-%H.%M.%S).copy
[rdmbe@drurhs01 tmp]$ sleep 1 && ln zero.img temp/zero.img.$(date +%Y%m%d-%H.%M.%S).copy

[rdmbe@drurhs01 tmp]$ ls -lrth temp/
total 3.0G
-rw-rw-r--  4 rdmbe rdmbe 1000M Mar 18 16:22 zero.img.20110318-16.25.20.copy
-rw-rw-r--  4 rdmbe rdmbe 1000M Mar 18 16:22 zero.img.20110318-16.24.58.copy
-rw-rw-r--  4 rdmbe rdmbe 1000M Mar 18 16:22 zero.img.20110318-16.24.40.copy

Il numero di link di un file è espresso dal numero presente subito dopo i diritti del file (nel nostro caso 4). Da notare che l’occupazione del file system è rimasta invariata:

[rdmbe@drurhs01 tmp]$ df -h .
Filesystem            Size  Used Avail Use% Mounted on
/dev/vg00-tmplv       4.0G  1.4G  2.4G  38% /tmp

Ora se vogliano individuare tutte le copie di un file è necessario usare il suo inode.

[rdmbe@drurhs01 tmp]$ ls -lrti zero.img
22 -rw-rw-r--  4 rdmbe rdmbe 1048576000 Mar 18 16:22 zero.img

[rdmbe@drurhs01 tmp]$ find /tmp/ -inum '22' 2>/dev/null
/tmp/zero.img
/tmp/temp/zero.img.20110318-16.25.20.copy
/tmp/temp/zero.img.20110318-16.24.40.copy
/tmp/temp/zero.img.20110318-16.24.58.copy

Se ad esempio andiamo a cancellare il file originale, rimangono ancora gli hard link e l’occupazione del file system rimane invariata (da notare che il numero di link del file è passato da 4 a 3).

[rdmbe@drurhs01 tmp]$ rm zero.img
[rdmbe@drurhs01 tmp]$ cd temp
[rdmbe@drurhs01 temp]$ ls -lrt
total 3075012
-rw-rw-r--  3 rdmbe rdmbe 1048576000 Mar 18 16:22 zero.img.20110318-16.25.20.copy
-rw-rw-r--  3 rdmbe rdmbe 1048576000 Mar 18 16:22 zero.img.20110318-16.24.58.copy
-rw-rw-r--  3 rdmbe rdmbe 1048576000 Mar 18 16:22 zero.img.20110318-16.24.40.copy
[rdmbe@drurhs01 temp]$ df -h .

Filesystem            Size  Used Avail Use% Mounted on
/dev/vg00-tmplv       4.0G  1.4G  2.4G  38% /tmp

Si può usare il comando stat per vedere le statistiche sul file (Inode e Links):

[rdmbe@drurhs01 tmp]$ stat zero.img | grep -vi Access | grep -vi Modify | grep -vi change
File: `zero.img'
Size: 1048576000      Blocks: 2050008    IO Block: 4096   regular file
Device: fd03h/64771d    Inode: 22          Links: 4

Alcuni link interessanti:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.