Qual è la differenza tra hard link NTFS e giunzioni di directory?


79

Il titolo dice tutto ... qual è la differenza? Quando ne uso uno e quando uso l'altro?

Aggiunto: si noti che i punti di giunzione , i collegamenti reali e i collegamenti simbolici (soft) sono tre elementi separati su NTFS.


2
Secondo la documentazione Microsoft, esistono tre categorie distinte: Collegamento reale : msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx ; Junction (soft-link): msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx ; Link simbolico: msdn.microsoft.com/en-us/library/aa363878%28VS.85%29.aspx .
Josip Medved,

Risposte:


33

I file di dati NTFS vengono archiviati con tutti i loro attributi come "inode" con un ID e i nomi dei file puntano all'inode. Tutti i file hanno un + hardlink. alcuni strumenti possono creare nomi extra (hardlink) che puntano allo stesso inode, che ha un contatore del numero di nomi che lo puntano. Se il numero va a zero, il sistema operativo elimina il file, l'inode.

Strumenti speciali, come LN, possono creare nomi di file aggiuntivi che puntano a inode esistenti, usando un nome file che punta a loro. Si noti che tutti gli attributi del file, comprese le date e le ore, sono memorizzati con l'inode, non con il nome file.

I collegamenti extra (extra) sono utili quando si desidera che nomi diversi puntino agli stessi dati, leggano o scrivano. Risparmiano spazio e spese generali. Tuttavia, bloccano i programmi che assumono nomi diversi puntano a dati diversi. ad esempio, se sostituisci i riferimenti a file duplicati con collegamenti fissi a un singolo file, hai rimosso tutti i backup che hai! Il sistema operativo Windows è un programma che assume nomi diversi che puntano a diversi insiemi di bit.

Gli hardlink devono trovarsi sullo stesso volume fisico e logico.

Sono utili per:

  • riducendo la lunghezza del percorso poiché Windows supporta solo 256 caratteri circa.

  • riducendo lo spazio di archiviazione di file di dati duplicati, ad esempio, è possibile disporre di più backup di una partizione con più alberi di directory completi, ma con collegamenti fissi per file che non sono stati modificati rispetto al backup precedente.

I punti di giunzione sono più disordinati e usano i punti di analisi (che non capisco). Possono puntare a volumi fisici o logici diversi ma devono trovarsi sullo stesso computer. Apparentemente possono essere usati come collegamenti simbolici per le directory, consentendo un secondo nome per la stessa destinazione, ma limitato a un singolo computer, piuttosto che a un solo volume.

Utile per ridurre la lunghezza dei percorsi o semplificare il lavoro con diversi programmi con nomi di directory hardcoded.

Anche gli stessi avvertimenti! Molti programmi assumono nomi diversi = file diversi.

E poi ci sono collegamenti simbolici (che possono passare attraverso le reti), collegamenti e PIF e .....

Anche alcune informazioni dalla stessa Microsoft :

Fondamentalmente, stanno dicendo di usare i collegamenti reali solo per i file all'interno dello stesso volume (lettera dell'unità disco) e i punti di giunzione solo per le directory sullo stesso computer (possono estendersi su diversi volumi locali).


1
Il collegamento simbolico funziona a livello di disco rigido (NTFS) o è a livello di sistema operativo Windows?
IsmailS

48

Definizioni rapide:

Collegamento simbolico: un collegamento a un file o una directory sullo stesso o diverso volume (lettera di unità) o persino a un file o una directory remoti (utilizzando UNC nel suo percorso).

Hard Link: solo un collegamento a un file sullo stesso volume (lettera di unità). Ogni file (dati del file) ha almeno 1 hard link (nome del file). L'eliminazione di tutti i collegamenti fisici elimina efficacemente il file.

Giunzione: un collegamento a una directory sullo stesso o diverso volume (lettera di unità) ma non a una directory remota.


Dettagli:

Supponendo che si stia lavorando con volumi NTFS in Windows Vista / 7, è possibile utilizzare lo strumento da riga di comando MKLINK per creare tutti e tre i tipi di collegamenti:

MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      Creates a directory symbolic link.  Default is 
                a file symbolic link.

        /H      Creates a hard link instead of a symbolic link.

        /J      Creates a Directory Junction.

        Link    specifies the new symbolic link name.

        Target  specifies the path (relative or absolute) that 
                the new link refers to.

Collegamenti simbolici : un collegamento simbolico è un oggetto del file system che punta a un altro oggetto del file system (ad esempio: file / directory).

  • MKLINKpuò essere utilizzato per creare collegamenti simbolici. L'uso del /Dparametro crea un collegamento simbolico alla directory. MKLINK non controlla se la destinazione è un file o una directory o anche se esiste la destinazione! Ciò significa che è possibile creare potenzialmente collegamenti non validi come un collegamento simbolico di directory a un file o un collegamento simbolico a un file / directory non esistente.

  • I collegamenti simbolici possono essere collegamenti assoluti o relativi. I collegamenti assoluti sono collegamenti che specificano ogni parte del nome del percorso mentre i collegamenti relativi sono determinati in relazione alla posizione in cui gli specificatori del collegamento relativo si trovano in un percorso specificato.

  • I collegamenti simbolici assoluti possono puntare a file / directory sullo stesso o diverso volume, nonché a un file o una directory remoti utilizzando il percorso UNC. Tuttavia, i collegamenti simbolici relativi sono limitati a un singolo volume.

  • Per creare un collegamento simbolico sono richiesti privilegi elevati, ma una volta creati non sono necessari privilegi elevati per eliminare il collegamento.

Hard link : un hard link è la rappresentazione del file system di un file con cui più di un percorso fa riferimento a un singolo file.

  • MKLINKconsente di creare collegamenti reali (utilizzando il /Hparametro) solo di file (non directory). È possibile creare un collegamento reale di un file nello stesso volume.

  • Un file con più collegamenti fissi viene effettivamente eliminato solo quando vengono eliminati tutti i collegamenti fissi, ovvero il conteggio dei collegamenti raggiunge lo zero. Quindi, in realtà, ogni file che crei ha almeno un collegamento reale, sia che tu lo usi MKLINKo meno.

  • Qualsiasi modifica a quel file è immediatamente visibile alle applicazioni che accedono ad esso attraverso i collegamenti reali che lo fanno riferimento. Tuttavia, le dimensioni della voce della directory e le informazioni sugli attributi vengono aggiornate solo per il collegamento attraverso il quale è stata apportata la modifica.

  • Si noti che gli attributi sul file si riflettono in ogni collegamento reale a quel file e le modifiche agli attributi di quel file si propagano a tutti i collegamenti reali. Ad esempio, se si annulla l'impostazione dell'attributo di sola lettura su un collegamento reale per eliminare quel particolare collegamento reale e sono presenti più collegamenti fissi al file effettivo, sarà necessario reimpostare l'attributo di sola lettura sul file da uno dei rimanenti hard link per riportare il file e tutti i rimanenti hard link allo stato di sola lettura.

Giunzioni : una giunzione (anche chiamata soft link) differisce da una hard link in quanto gli oggetti di archiviazione a cui fa riferimento sono directory separate e una giunzione può collegare directory situate su diversi volumi locali sullo stesso computer. Altrimenti, le giunzioni funzionano in modo identico ai collegamenti reali. Le giunzioni sono implementate attraverso punti di analisi.

  • MKLINKconsente di creare una giunzione (usando il /Jparametro) di una directory (e persino di file sebbene questo dovrebbe probabilmente essere considerato come un link non valido).

  • Una giunzione potrebbe essere considerata l'equivalente del collegamento reale per un collegamento simbolico a una directory. Un collegamento di giunzione non può essere creato in una directory remota ma può essere creato in una directory sullo stesso / diverso volume.


Riferimenti:

[1] Collegamenti diretti e incroci: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365006%28v=vs.85%29.aspx

[2] Creazione di collegamenti simbolici: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363878%28v=vs.85%29.aspx

[3] "directory junction" vs "directory simbolic link"?


9

Hard link è solo un altro nome per un file. Se hai un file chiamato A.txt e hai il link L.txt, una volta eliminato A.txt, avrai comunque accesso ai suoi dati tramite L.txt. Solo quando entrambi vengono eliminati il ​​file scompare.

D'altra parte, hai un cosiddetto soft-link (giunzione se è cartella o collegamento simbolico se è file). In tal caso, quando si elimina A.txt, il file è davvero sparito. L'eliminazione di L.txt non ha alcun effetto sul file.

I collegamenti reali possono essere utilizzati solo sulla stessa partizione del file di origine e i collegamenti diretti possono essere utilizzati tra le partizioni.

PS File e cartelle sono per lo più intercambiabili per quanto riguarda NTFS.


3
Spiacenti, giunzioni e collegamenti non sono la stessa cosa per NTFS. :(
Vilx-

2
msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx Citazione: "Un incrocio (chiamato anche soft link)"
Josip Medved

3
Tuttavia, esiste un'ulteriore distinzione tra giunzione (aka soft-link) e collegamento simbolico, ma non ho approfondito qui i dettagli. Per chi fosse interessato, i dettagli sono disponibili nella documentazione di Windows all'indirizzo msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx e msdn.microsoft.com/en-us/library/aa363878%28VS. 85% 29.aspx .
Josip Medved,

1
Dal momento che Windows Vista, ci sono sia giunzioni NTFS (che possono essere indirizzate solo alle directory) sia collegamenti simbolici in stile Unix (possono indicare letteralmente qualsiasi cosa).
Grawity

0

Hard link: funziona solo per lo stesso volume.
Giunzione: qualsiasi volume locale
Simbolico: volume locale o percorso UNC

| Link Type     | Same Volume | Different Volume | UNC Path |
|---------------|-------------|------------------|----------|
| Hard link     | Yes         | No               | No       |
| Junction      | Yes         | Yes              | No       |
| Symbolic link | Yes         | Yes              | Yes      |

Bonus Chatter

Windows crea giunzioni e collegamenti simbolici per scopi di AppCompat; per quelle applicazioni scritte male che pensano:

  • C: \ Utenti \ Tutti gli utenti
  • C: \ Utenti \ Utente predefinito

sono validi

C:\Users>dir /as

 Directory of C:\Users

04/11/2018  07:45 PM    <SYMLINKD>     All Users [C:\ProgramData]
04/11/2018  07:45 PM    <JUNCTION>     Default User [C:\Users\Default]

Lo stesso vale nella cartella del profilo dell'utente, per le applicazioni che prevedono che le cartelle dell'era di Windows XP esistano ancora oggi:

| Folder           | Type       | Target                                                           |
|------------------|------------|------------------------------------------------------------------|    | Application Data | <JUNCTION> | C:\Users\Ian\AppData\Roaming                                     |
| Cookies          | <JUNCTION> | C:\Users\Ian\AppData\Local\Microsoft\Windows\INetCookies         |
| Local Settings   | <JUNCTION> | C:\Users\Ian\AppData\Local                                       |
| My Documents     | <JUNCTION> | C:\Users\Ian\Documents                                           |
| NetHood          | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Network Shortcuts |
| PrintHood        | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Printer Shortcuts |
| Recent           | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Recent            |
| SendTo           | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\SendTo            |
| Start Menu       | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Start Menu        |
| Templates        | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Templates         |

2
e diventa ancora più folle con installazioni di finestre non inglesi man mano che si ottengono ANCORA PIÙ collegamenti / giunzioni, poiché alcuni potrebbero non sapere che Windows fino a XP aveva effettivamente nomi locali, che possono facilmente confondere script o tutorial fatti per altre lingue. Vista lo ha ucciso e invece utilizza nomi DISPLAY localizzati, quindi i percorsi effettivi sono gli stessi in tutte le lingue, ma a causa di allora le finestre localizzate hanno ancora più collegamenti in esse rispetto a quelli inglesi
My1

-1

Per rispondere a livello di programmazione:

Collegamento reale: shared_ptr <>. Ne esiste sempre uno.

Collegamento software: weak_ptr <>. Valido solo quando esiste un altro collegamento reale.


È quello facile. :) La domanda riguardava Hard Links vs Junction. ;)
Vilx
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.