Qual è la differenza tra punti di giunzione NTFS e collegamenti simbolici?


140

Ad alto livello, l'unica differenza evidente tra i punti di giunzione NTFS e i collegamenti simbolici è che le giunzioni possono essere solo directory, mentre a SymLink è consentito anche il targeting dei file.

Quali altre differenze esistono tra i due?

(Nota, ho già visto questa domanda e quello che sto cercando è un po 'diverso: quella domanda è un elenco di pro e contro, sto cercando un insieme di differenze tecniche)

Risposte:


88

I collegamenti simbolici hanno più funzionalità, mentre le giunzioni sembrano quasi essere una funzionalità legacy a causa delle loro limitazioni, ma le implicazioni di sicurezza di queste limitazioni sono in particolare il motivo per cui una giunzione potrebbe essere preferita su un collegamento simbolico. Il targeting remoto rende i collegamenti simbolici più funzionali, ma aumenta anche il loro profilo di sicurezza, mentre gli incroci sono più sicuri perché vincolati ai percorsi locali . Quindi, se vuoi un collegamento locale e puoi vivere con un percorso assoluto, probabilmente stai meglio con un incrocio; altrimenti, considera un collegamento simbolico per le sue abilità aggiunte.

inserisci qui la descrizione dell'immagine

** L'affermazione della differenza di velocità / complessità deriva da un'affermazione non verificata nella voce Wikipedia sui punti di analisi NTFS (una buona lettura). *


Altri confronti di collegamenti NTFS

Ecco alcuni altri confronti sull'argomento, ma questi possono essere fuorvianti quando si considerano le giunzioni perché non elencano i vantaggi che ho elencato sopra.

Tratto da qui (una buona lettura introduttiva)

inserisci qui la descrizione dell'immagine

Dalla pagina SS64 su MKLink

inserisci qui la descrizione dell'immagine


Commenti sulla terminologia

Le giunzioni sono punti di analisi (possono essere descritti come collegamenti simbolici)

Giunzioni NTFS e collegamenti simbolici NTFS stanno davvero facendo la stessa cosa allo stesso modo (punti di analisi), a parte le differenze di cui sopra nel modo in cui vengono elaborate. In effetti, tecnicamente, una giunzione è un "collegamento simbolico" nel senso più generale della parola, e talvolta la documentazione potrebbe chiamare una giunzione un collegamento simbolico, come nel caso qui . In tali casi, "collegamento simbolico" non significa collegamento simbolico NTFS che è diverso da una giunzione (vedere di seguito).

NTFS

Anche se l'OP lo specifica, vale la pena sottolineare che "collegamento simbolico" è un termine molto generale che non è specifico di NTFS. Quindi, per essere precisi, questo confronto riguarda giunzioni NTFS e collegamenti simbolici NTFS.


I punti di giunzione e i collegamenti simbolici sono entrambi punti di analisi, ma i punti di giunzione sicuramente non sono collegamenti simbolici! Oh, e la tabella è sbagliata anche per un motivo. Il bersaglio di un punto di giunzione deve esistere al momento della creazione, ma può effettivamente essere rimosso in seguito.
0xC0000022L

3
@ 0xC0000022L Sì, hai ragione se quello che stai dicendo è che una giunzione NTFS non è un collegamento simbolico NTFS. Vedo come la mia formulazione potrebbe essere fraintesa per dirlo. Modificherò per chiarire, ma il punto è che, in questo contesto, "collegamento simbolico" si riferisce a collegamenti simbolici NTFS che sono implementazioni specifiche dell'idea più generale di "collegamento simbolico" a cui appartengono anche le giunzioni. Hai seguito il link che ho pubblicato? Non sta dicendo che una giunzione NTFS sia un collegamento simbolico NTFS, ma il termine "collegamento simbolico" può essere usato per descrivere una giunzione.
dal

abbastanza equo, quando si fa riferimento al concetto può essere un modo di pensarci. Ma penso davvero che il termine reparse point porti a casa il concetto, perché spiega molto di più cosa sta succedendo nel gestore degli oggetti NT e che questo concetto va ben oltre i collegamenti simbolici che si trovavano su Unix, ad esempio (dove sono file ordinari con una bandiera speciale). E sì, ho sentito i punti di giunzione spiegati come "collegamenti simbolici per le directory".
0xC0000022L

@ 0xC0000022L Inoltre, non vedo il problema che hai citato riguardo alla tabella sbagliata. Ti riferisci alla caratteristica "Può puntare a un bersaglio inesistente"? E stai dicendo che questo è sbagliato almeno quando si crea per la prima volta un incrocio? Se sei sicuro che sia il caso in un ambiente specifico (forse per Windows XP o a causa delle impostazioni di sicurezza), ne prenderò nota, ma nella mia esperienza e dalla documentazione (e ho appena confermato su Windows 10) un nodo può indirizzare sempre un percorso inesistente, anche al momento della creazione ... potrebbero esserci delle impostazioni di sicurezza che lo limitano.
dal

Le giunzioni non sono eredità. Implementano punti di montaggio (bind / volume), non collegamenti simbolici. Quando un percorso viene analizzato in un punto aperto, il sistema ricorda le giunzioni attraversate per valutare i relativi collegamenti simbolici che attraversano i punti di montaggio. Questi attraversamenti devono gestire una giunzione come se fosse una directory normale, mentre un collegamento simbolico viene analizzato come percorso target. Ad esempio, dire "C: \ junction" e "C: \ symlink" entrambi target "E: \ spam" e il relativo link "E: \ spam \ eggs.txt" target ".. \ eggs.txt". Quindi "C: \ junction \ eggs.txt" si risolve in "C: \ eggs.txt" e "C: \ symlink \ eggs.txt" si risolve in "E: \ eggs.txt".
Eryk Sun il

35

I luoghi che trovo più utili per le differenze:

http://blogs.msdn.com/b/junfeng/archive/2006/04/15/576568.aspx

http://www.hanselman.com/blog/MoreOnVistaReparsePoints.aspx

Postulato: Symlink è Junction in Windows come Symlink è Hardlink in Unix.

http://en.wikipedia.org/wiki/Symbolic_link#Windows_7_.26_Vista_symbolic_link

Windows 7 e Windows Vista supportano collegamenti simbolici per file e directory con l'utilità della riga di comando mklink. A differenza dei punti di giunzione, un collegamento simbolico può anche puntare a un file oa un percorso di rete Server Message Block (SMB) remoto. Inoltre, l'implementazione del collegamento simbolico NTFS fornisce pieno supporto per i collegamenti tra file system. Tuttavia, la funzionalità che abilita i collegamenti simbolici tra host richiede che anche il sistema remoto li supporti, il che limita efficacemente il loro supporto a Windows Vista e ai sistemi operativi Windows successivi.

http://www.tuxera.com/community/ntfs-3g-advanced/junction-points-and-symbolic-links/

Un collegamento simbolico, come creato da Windows, è molto simile a un nodo di directory, ma a differenza di un nodo di directory può puntare a un file o a un file o directory di rete remota. Il target può essere definito come un percorso relativo alla posizione simbolica del collegamento o un percorso assoluto nel volume corrente o in un altro. Si noti inoltre che i collegamenti simbolici ai file sono diversi dai collegamenti simbolici alle directory e che la destinazione deve corrispondere alla definizione.


1
Per informazioni specifiche su Windows 7: msdn.microsoft.com/en-us/library/windows/desktop/…
Joshua Drake

14
La risposta accettata ha già tre anni, ma vorrei sottolineare che i punti di giunzione NFTS non sono paragonabili ai collegamenti reali in Unix, come implicito nel postulato citato. Questo dovrebbe essere ovvio, dal momento che un punto di giunzione non può fare riferimento a un file, ma può esserlo un hardlink. NTFS supporta anche gli hardlink (che sono diversi dalle giunzioni) e quelli che sono più o meno sono paragonabili ai hardlink Unix.

@elgonzo Totalmente d'accordo. AFAIK un collegamento reale Unix può solo fare riferimento a un file, quindi non assomiglia affatto alla giunzione della directory NTFS.
Franklin Yu

20

Funzionalmente, in Windows, una volta creato, non c'è vera differenza. Tuttavia, ci sono differenze significative tra loro in ciò che possono fare. Le giunzioni possono essere utilizzate solo per la creazione di collegamenti a cartelle, sulla stessa unità o su unità diverse, ma solo se tali unità si trovano sul sistema locale (non è possibile creare un collegamento di giunzione a una cartella su una rete.) Collegamenti simbolici tuttavia, non hanno le stesse restrizioni. I collegamenti simbolici possono essere utilizzati per collegarsi a file o cartelle e tali file o cartelle possono trovarsi sullo stesso sistema (stessa unità o unità diverse) o su una condivisione di rete e possono utilizzare i simboli relativi alla posizione ("\\ system2 \ foldera \ file.txt "," d: \ foldera \ file.txt "," \\ system2 \ foldera "," d: \ foldera "o" d: \ foldera \ folderb .. "

Per riassumere: i punti di giunzione sono limitati alle cartelle solo sul sistema locale, mentre i collegamenti simbolici possono creare collegamenti a cartelle o file accessibili tramite un percorso UNC o sul sistema locale con una maggiore versatilità nel modo in cui tali posizioni sono designate. Symbolic Links è sostanzialmente un sostituto più versatile sia per i punti di giunzione che per i collegamenti duri. Inoltre, i collegamenti simbolici sono compatibili con Unix e Linux durante la creazione di un collegamento percorso UNC multipiattaforma.

Speriamo che questo risponda alla tua domanda in modo soddisfacente. Modificato per correggere errori tipografici.


10

Estensione Shell di collegamento, http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html , è un ottimo strumento per creare e visualizzare molti tipi di collegamenti. Ha anche un'ottima documentazione.

[Su un'installazione completa, aggiunge una nuova scheda delle proprietà se stai cercando un link avanzato. Inoltre aggiunge le frecce di sovrapposizione delle icone per i vari tipi di collegamento: scorrere fino alla sezione FAQ se non vengono visualizzate; Windows supporta solo tredici overlay; mostra una soluzione alternativa al registro. Un esempio della sua utilità informativa: tentare senza successo di ottenere i privilegi di quella che pensavi fosse una cartella, ma in realtà era un Junction Link fornito dal sistema, spesso usato per scopi di compatibilità con le versioni precedenti di Windows.]

Giunzioni e collegamenti simbolici agiscono essenzialmente in modo identico quando vengono creati per una directory su un sistema locale.

Però:

Agiscono diversamente su una rete. Questo collegamento descrive questo comportamento: /superuser/343074/directory-junction-vs-directory-symbolic-link

Se pensi a Junction Links come a "scorciatoie che ingannano il sistema operativo in base alla posizione" avrai una buona similitudine pratica del loro uso e di ciò che li rompe. La differenza principale è che se copi collegamenti simbolici o giunzioni, copia la destinazione, piuttosto (come le scorciatoie) semplicemente il file che contiene il puntatore. Come per le scorciatoie, è possibile eliminare i collegamenti simbolici o di giunzione senza rimuovere i file / le cartelle di destinazione. [Hard Links, il file viene eliminato solo con la rimozione dell'ultimo link, incluso dal cestino. Guarda il tag delle proprietà in LSE per uno di questi link per vedere la destinazione o il conteggio dei riferimenti per Hard Link.]

Hard Link o Scorciatoie sono gli unici tipi di link che possono essere spostati senza effetti collaterali come rompere o copiare l'intero target. Lo spostamento della destinazione interrompe sempre i collegamenti, sebbene possano essere facilmente aggiornati nella scheda delle proprietà (mostrata con LSE) o ricreati, se complicati, con LSE.

La creazione di collegamenti simbolici richiede privilegi di amministratore, mentre le giunzioni no. Questo, oltre all'ampio uso interno del sistema operativo di Junctions, suggerisce che Windows li gestisce in modo intuitivo e previsto. [Diffida degli effetti collaterali imprevisti dalle cartelle di sistema (dall'esperienza con Win 10).]

[Alcune delle funzionalità specifiche di backup di Link Shell Extension sono estremamente utili: in breve, può creare diversi tipi di strutture di link simbolici aggiornabili in cartelle standard per scopi di backup in sospeso.]


E Link Shell Extension sembra un ottimo strumento. C'è anche un'utilità leggera correlata chiamata ln.exe ... anche se non la usi, imparerai molto solo leggendo la guida per l'utente del sito web.
u8it

Penso che la tua modifica del 2 aprile 2016 abbia reso le cose meno chiare, Clay. Penso che tu abbia inteso qualcosa del genere: "La differenza principale tra questi e i file" scorciatoia "è che se tu ... copia la destinazione, piuttosto che semplicemente il file che contiene il puntatore (che è ciò che accade se copi una scorciatoia file) "
Jon Coombs,

4

I collegamenti simbolici sono stati introdotti di recente in Windows: come da Vista.

I collegamenti simbolici non devono essere considerati un'alternativa all'attuale tecnologia NTFS "Reparse Point".

Microsoft spiega che l'unico scopo dei collegamenti simbolici è quello di essere più compatibile con Unix.

MSDN: " I collegamenti simbolici sono stati progettati per facilitare la migrazione e la compatibilità delle applicazioni con UNIX. Microsoft ha implementato i suoi collegamenti simbolici per funzionare esattamente come i collegamenti UNIX. "

Vista è anche il primo sistema operativo ad utilizzare i collegamenti per il proprio funzionamento. Per essere compatibile con i nomi di cartelle legacy, C:\Documents and Settingsora è presente un collegamento a C:\Users.

È interessante notare che, sebbene Vista introduca collegamenti simbolici, questo " Documents and Settings" trucco è in realtà un semplice vecchio nodo.


2
Questa risposta non dice nulla sulle differenze tra collegamenti simbolici e giunzioni. (In quanto tale, non penso che si applichi davvero a questa domanda)
Billy ONeal

Da Windows Vista in poi il collegamento simbolico sostituisce le giunzioni (anche, come sappiamo, entrambi sono punti di analisi)
Aravind

2

Oltre all'ottima risposta di u8it:

Se qualcuno è interessato alla differenza di comportamento in Esplora file di Windows di Windows in Windows 10:

trascina e rilascia nella directory di destinazione:

  • symbolic link: sposta il symbolic linknella directory di destinazione
  • junction: sposta il original directorynella directory di destinazione

tasto destro del mouse + proprietà:

  • symbolic link: mostra le proprietà del collegamento
  • junction: mostra le original directoryproprietà della cartella

click moue sinistro nel riquadro sinistro (albero delle directory):

  • symbolic link: seleziona il original directory
  • junction: seleziona il junction

La creazione di collegamenti simbolici richiede privilegi di amministratore, mentre le giunzioni no.
Jinjinov,

Windows 10 versione 10.0.17134.1130: lo spostamento della giunzione in explorer sposta solo il contenuto della directory originale. Fare clic con il pulsante sinistro del mouse sul collegamento simbolico nella struttura non seleziona la directory originale.
SalgoMato
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.