Hardlink, symlink e reflink

Chi è pratico di Unix o Linux sicuramente sa già cosa sono i link e che ne esistono di due tipi: hard e simbolici.

Nel mondo Unix e Linux, entrambi i tipi di link sono gestibili con il comando ln (abbreviazione appunto di link).

Ma in realtà questi concetti, con nomi diversi, esistono anche nel mondo Windows nei filesystem NTFS e ReFS.

Symlink

Un collegamento simbolico (o symbolick link) è un file contenente un percorso relativo od assoluto al file o directory a cui fa riferimento; questo permette di creare collegamenti non solo all’interno della stessa partizione, ma anche da un file system ad un altro, offrendo quindi più flessibilità rispetto ad un collegamento fisico.

SymLink.svg
Di ColdShine – Fatta da me., Pubblico dominio, Collegamento

Per creare un link simbolico in Unix/Linux si possono usare i comandi:

ln -s originalname  symbolicname  
cp --symbolic-link  originalname  symbolicname   

Nei sistemi Unix di derivazione BSD è possibile assegnare permessi direttamente anche ai collegamenti simbolici stessi. Negli altri sistemi Unix e Unix-like i permessi di un collegamento simbolico sono pressoché irrilevanti, dal momento che saranno utilizzati quelli del file di destinazione; in questi sistemi un collegamento simbolico viene quindi solitamente rappresentato come avente i permessi 0777 nella notazione ottale o “lrwxrwxrwx” nella notazione simbolica (lettura, scrittura ed esecuzione per tutti, e nessun permesso speciale come sticky, set user ID o set group ID).

In Windows esistono i “Collegamenti a” che possono sembrare dei link simbolici, in realtà sono ulteriore astrazione e rispetto ai symlink hanno diverse limitazioni (ad esempio non sono trasparenti a tutti i programmi).

Mentre invece i NTFS junction point possono essere considerati dei veri e propri link simbolici, anche se limitati alle sole directory.

Per creare un junction point in NTFS:

mklink /J <Link> <Target> 

Hardlink

Un collegamento fisico (o hard link) fa riferimento ai dati ovvero il contenuto di un file, e in ciò si differenzia dai collegamenti simbolici e altri tipi di collegamenti che fanno invece riferimento a nomi di file. Un’altra differenza è che il collegamento fisico deve trovarsi sullo stesso file system che contiene i dati a cui fa riferimento, e che un collegamento fisico non può restare orfano.

HardLink.svg
Di ColdShine – Fatta da me., Pubblico dominio, Collegamento

Nei sistemi basati su Linux, a partire dalla versione 2.4.0 del kernel è possibile usare il comando mount con le opzioni –bind o –rbind per far apparire una directory o un file in più punti della gerarchia di directory del sistema, di fatto creando l’equivalente di un collegamento fisico che però può essere tra file system diversi e che può essere anche riferito ad una directory, ma che non è persistente (ovvero va ricreato ad ogni nuovo avvio del sistema).

Per creare un hard link in Unix/Linux:

ln -s originalname   linkname  
cp --link  originalname  linkname 

Per creare un hard-link in Windows si fa uso del comando seguente

fsutil hardlink create NomeNuovoFile NomeFileEsistente

Reflink

Esiste anche un altro tipo di link, chiamato reflink che è una copia trasparente di tipo Cow ( copy-on-write snapshot). Di fatto una specie di deduplicata del contenuto del file.

Per creare un reflink (su un filesystem supportato) in Unix/Linux:

cp --reflink name1 name4

In Unix, i reflink sono supportati in BTRFS e OCFS2, in Linux in XFS.

In ReFS 3.1 è presente una funzione di block cloning concettualmente simile: la clonazione dei blocchi indica al file system di copiare un intervallo di byte di file per conto di un’applicazione in cui il file di destinazione può essere lo stesso oppure può essere diverso dal file di origine. Le operazioni di copia sono costose in quanto attivano letture e scritture impegnative sui dati fisici sottostanti.

Questo post è stato visto 2806 volte!

Posted on Agosto 22, 2019 at 7:54 am by amauro · Permalink
In: Generale