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