66580 Letture

Spostare un programma su un altro disco senza reinstallarlo: giunzioni e collegamenti simbolici

Nelle ultime ore sul web si è diffusa la notizia del rilascio di SymMover, un'applicazione gratuita che consente di facilitare lo spostamento di un'applicazione da un'unità all'altra senza dover preventivamente procedere alla sua disinstallazione. Si immagini la situazione in cui sulla partizione di sistema si siano installate applicazioni software particolarmente corpose: tanto per fare qualche nome, citiamo il pacchetto Office di Microsoft, Visual Studio, i software di grafica di Adobe od un qualunque videogioco di recente fattura. Per impostazione predefinita, durante l'installazione di tali software viene proposta, in modo predefinito, la cartella di sistema C:\Programmi oppure C:\Program files quale destinazione. Tale indicazione ha un obiettivo ossia quello di mantenere tutti i programmi installati dall'utente in un'unica cartella sul disco fisso. Così facendo, però, può capitare che installando molti software di notevoli dimensioni, lo spazio su disco si esaurisca rapidamente. Non solo. Nelle situazioni in cui lo spazio sulla partizione all'interno della quale è installato Windows inizia a scarseggiare, è probabile che ci si trovi a fare i conti anche con una serie di problematiche relative ad una difficoltosa gestione della memoria virtuale (per default, il file di paging è conservato da Windows nella medesima partizione ove è stato installato il sistema operativo) e ad un'elevata frammentazione dei dati.

A proposito del file di paging, il consiglio migliore è quello di spostarlo su un altro disco fisso, preferibilmente più veloce, se sul sistema in uso sono installati più hard disk ma di lasciarlo sulla partizione di sistema se sul personal computer è installato un solo disco fisso. In altre parole, è assolutamente inutile e controproducente spostare il file di paging su una differente partizione all'interno del medesimo disco fisso.

SymMover è un'applicazione che aiuta l'utente nello spostare un'applicazione altrove, ad esempio su un altro hard disk collegato al sistema, facendo in modo che Windows ritenga che lo stesso programma sia sempre installato nelle locazioni originarie. In altre parole, viene generato un "collegamento simbolico" tra la directory ove il software era stato installato (ad esempio, C:\Programmi\nome_del_programma e la cartella di destinazione su un'altra partizione od unità disco). L'applicazione SymMover, comunque, non fa altro che fungere da interfaccia grafica per una funzionalità del sistema operativo che esiste addirittura sin dai tempi di Windows 2000.
Da parte nostra, preferiamo non proporre il download di SymMover perché allo stato attuale, sebbene – con buona probabilità – si tratti di "falsi positivi", l'applicazione viene indicata come sospetta da parte di almeno cinque motori di scansione antivirus (ved. l'analisi su VirusTotal). Il software è considerato come potenzialmente dannoso perché, evidentemente, interagisce in modo diretto con alcune funzionalità di base del sistema operativo eseguendo istruzioni che potrebbero essere eseguite autonomamente dall'utente dalla riga di comando. Per evitare equivoci, però, preferiamo illustrarvi la metodologia che permette di arrivare allo stesso risultato promesso da SymMover.


I collegamenti a file e cartelle in Windows

Tutti sanno che cosa sono i "collegamenti" in Windows. Inseriti nel menù Start, Programmi del sistema operativo all'atto dell'installazione di una nuova applicazione oppure aggiunti alle icone visualizzate sul desktop, i collegamenti assumono – su disco – la forma di un file con estensione .lnk. E' immediato verificarlo facendo clic con il tasto destro del mouse su un qualunque collegamento quindi scegliendo la voce Proprietà ed infine accedendo alla scheda Generale.

I collegamenti, riconoscibili per la presenza di una piccola freccia nella loro icona, sono una sorta di "puntatori" verso altri file o cartelle memorizzati sul disco fisso, su unità esterne o su percorsi di rete.
Il percorso ed il file cui ogni collegamento fa riferimento è verificabile controllando ciò che appare nella casella Destinazione (scheda Collegamento) mentre l'indicazione Percorso riportata in figura indica la directory ove è conservato il file .lnk.
Come noto, l'eliminazione di un collegamento ha come conseguenza esclusivamente la rimozione del corrispondente file .lnk ma non di quello indicato come destinazione.

I sistemi operativi Windows, sin dai tempi di Windows 2000, integrano la possibilità – peraltro poco conosciuta – di servirsi dei cosiddetti "collegamenti simbolici" o "link simbolici". Si tratta di una prerogativa prevista dal file system NTFS che consente di fare in modo che una determinata cartella punti ad un'altra directory posizionata altrove sulla stessa partizione, su una partizione diversa oppure, addirittura, su un disco fisso differente.
Il funzionamento dei "collegamenti simbolici" è sostanzialmente simile a quello dei tradizionali collegamenti .lnk di Windows: questi ultimi, tuttavia, sono oggetti che operano a livello dell'interfaccia del sistema operativo mentre i primi sfruttano una caratteristica del file system NTFS. Se si provasse ad allegare ad un messaggio di posta elettronica un collegamento classico di Windows, sarebbe preso in considerazione solo il file .lnk e non l'elemento a cui esso punta.

Collegamenti simbolici e giunzioni di cartelle in Windows Vista ed in Windows 7

Lo sapevate che Windows Vista e Windows 7 usano quotidianamente i collegamenti simbolici? Per rendersene conto basta aprire il prompt dei comandi del sistema operativo (digitando, ad esempio, cmd nella finestra di dialogo Start, Esegui... oppure nella casella Cerca programmi e file del pulsante Start) ed introdurre i seguenti due comandi:
cd\
dir /al



Si otterrà quanto riportato nella finstra che segue:

Come si vede, in corrispondenza delle due cartelle C:\Users e C:\Program files è riportata l'indicazione JUNCTION. La cartella "Programmi", quindi, in Windows Vista ed in Windows 7 non è una cartella reale ma trattasi di una directory virtuale che punta alla locazione C:\Program files. E' questo il motivo per cui, quando in Windows Vista od in Windows 7, si installa una nuova applicazione viene proposto il percorso C:\Program files in luogo dell'italianizzato C:\Programmi.

Il medesimo espediente è usato in diverse aree di Windows, soprattutto nei casi in cui sono coinvolte delle cartelle di sistema tradotte nelle varie lingue.

Dal punto di vista pratico la differenza tra "collegamento simbolico" e "giunzione" (junction) è praticamente inesistente: i primi, però, possono operare anche sui singoli file e non solo sulle cartelle. Inoltre, i collegamenti simbolici ammettono l'uso dei percorsi relativi mentre le giunzioni di directory possono operare esclusivamente su percorsi assoluti. In altre parole, per creare una giunzione è necessario indicare sempre il percorso completo di una cartella (esempio: C:\Program files\nome_del_programma) mentre nel caso del collegamento simbolico non è prevista questa "limitazione".

Come spostare un'applicazione su un'altra unità e far credere a Windows che essa sia sempre nella locazione originaria


Allorquando dovesse presentarsi la necessità di dover spostare su un'altra unità o in una differente partizione il contenuto della cartella d'installazione di un programma, è possibile sfruttare il concetto di giunzione tra directory.

Limitandosi a spostare la cartella contenente l'applicazione, soprattutto se si ha a che fare con software di grandi dimensioni (suite per l'ufficio, complessi gestionali, programmi di grafica e fotoritocco,...), in un altro volume quindi aggiornando i collegamenti, si avranno sicuramente dei problemi. All'atto del setup della maggior parte delle applicazioni Windows più complesse vengono infatti aggiunti, nel registro di sistema, riferimenti alla specifica cartella nella quale il programma è stato installato. Tali informazioni vengono frequentemente utilizzate dal programma durante il suo funzionamento e sono spesso abbinate ad altre indicazioni simili memorizzate in alcuni file di dati, spesso presenti nella cartella d'installazione.

L'utilizzo di giunzioni e collagamenti simbolici permette di superare brillantemente il problema senza la necessità di operare una disinstallazione ed una successiva nuova installazione, e senza perdite di dati (ad esempio, informazioni relative alla configurazione del programma).

Prima di procedere, suggeriamo di agire con la massima cautela effettuando un'immagine del contenuto dell'intero disco fisso (ved. i nostri articoli sull'argomento e questa pagina, sezione Disk imaging, per maggiori informazioni) in modo tale da avere la possibilità di ripristinare la configurazione di partenza nel caso in cui si dovessero incontrare difficoltà o malfunzionamenti.

A questo punto, si potrà selezionare la cartella contenente il software da collocare in un'altra unità e procedere all'operazione di spostamento. Quest'operazione è effettuabile avvalendosi, come sempre, dell'interfaccia di Windows. Per effettuare un'operazione di spostamento, lo ricordiamo, è necessario usare il tasto destro del mouse mantenendolo sempre premuto per trascinare la cartella selezionare dal percorso di origine a quello di destinazione. Per completare l'operazione, si dovrà poi cliccare sulla voce Sposta qui.


Il passo successivo consiste nel generare una "giunzione tra directory": in Windows Vista così come in Windows 7 l'operazione è semplicissima da porre in essere. Innanzi tutto, è indispensabile aprire la finestra del prompt dei comandi con i diritti amministrativi. Per procedere, basta cliccare sul pulsante Start in basso a sinistra, digitare cmd, cliccare con il tasto destro del mouse su cmd.exe e scegliere la voce Esegui come amministratore.

Dopo aver confermato la scelta mediante la pressione del pulsante , si dovrà ricorrere al comando mklink, in grado di creare sia i "collegamenti simbolici" che le "giunzioni tra directory". Le richieste dirette ai file presenti nella directory che conteneva originariamente i file dell'applicazione verranno automaticamente reindirizzate verso la cartella di destinazione specificata (la directory all'interno della quale sono realmente memorizzati tutti i file e tutte le eventuali sottocartelle).
Usando correttamente il comando mklink si può quindi far credere a Windows che i file necessari per il corretto funzionamento di un'applicazione siano tutti memorizzati nel percorso originario quando in realtà non lo sono, essendo stati spostati altrove.

La sintassi del comando mklink è molto semplice:
mklink /J "cartella specchio" "cartella contenente i file"
Immaginiamo un programma che era precedentemente installato nella cartella c:\programmi\miaapplicazione. Si supponga di aver già spostato tale software in g:\applicazioni\miaapplicazione.
Ricorrendo al comando mklink /J "c:\programmi\miaapplicazione" "g:\applicazioni\miaapplicazione", Windows genererà una "giunzione" tra la cartella specificata più a sinistra e quella indicata più a destra.


Una simile "giunzione" consentirà di fare in modo che tutti i riferimenti, già presenti sul sistema, alla cartella d'origine c:\programmi\miaapplicazione continuino a funzionare correttamente.

E' bene riporre massima attenzione quando si lavora con le "giunzioni di directory". Quando, come nel nostro caso, si genera un link simbolico su una cartella, le operazioni di spostamento, copia ed eliminazione, avranno effetto sulla directory indicata come destinazione (ossia sulla cartella contenente i file veri e propri).
Le "giunzioni di directory" possono fare riferimento solamente a percorsi locali: non è quindi permesso "puntare" cartelle condivise in rete.

I collegamenti simbolici, come già anticipato, sono una caratteristica offerta dal file system NTFS: sono quindi utilizzabili non solo su Windows Vista e Windows 7 ma anche su Windows XP e Windows 2000. Questi ultimi due sistemi operativi sono però sprovvisti del comando mklink che non può essere impiegato.

Il comando dir /al indica le giunzioni con l'etichetta JUNCTION mentre i collegamenti simbolici sono riportati come SYMLINKD.
Se le giunzioni fra directory possono essere generate col comando mklink /J, per produrre un nuovo link simbolico che, lo ricordiamo, accetta anche percorsi relativi, basta usare il comando mklink /D.

Che cosa sono e come si utilizzano gli "hard link"

Esiste poi un'ulteriore possibilità per referenziale i file memorizzati sulle unità formattate NTFS. Si tratta dei cosiddetti "hard link". Essi offrono la possibilità di assegnare più di un nome al medesimo file memorizzato sul disco. La sintassi con cui invocare mklink è semplice. E' sufficiente digitare mklink /H facendo seguire in primis il nuovo nome da assegnare ad un file già salvato su disco quindi, a seguire, il nome del file "reale", già presente (ove necessario, bisognerà introdurre i due percorsi completi).
Ciascun file può avere N "hard link" e ciascuno di essi potrà puntare allo stesso file.
Diversamente rispetto ai collegamenti che abbiamo sin qui illustrato, gli "hard link" possono fare riferimento esclusivamente ai file memorizzati sul medesimo volume. Inoltre, questi verranno trattati e visualizzati come se fossero file a se stanti e non riferimenti ad altri oggetti presenti nel file system.


  1. Avatar
    mugi
    17/01/2015 16:44:39
    e se si dovesse ripristinare il collegamento come si fa?
  2. Avatar
    Giallu
    20/11/2014 12:53:11
    Citazione: Certo che è possibile. Ma chi l'avesse già installati in C:?
    Grazie, Michele. Ho aperto una discussione per questo mi piccolo problema.
  3. Avatar
    Michele Nasi
    20/11/2014 11:50:51
    Certo che è possibile. Ma chi l'avesse già installati in C:?
  4. Avatar
    Giallu
    20/11/2014 10:53:28
    Michele, gentilmente. E' possibile installare in un altra partizione direttamente programmi così pesanti e passeggeri. Senza che dobbiamo installarlo su C:\ così evitiamo questa procedura macchinosa.
  5. Avatar
    Michele Nasi
    13/01/2014 12:54:38
    La procedura illustrata nell'articolo http://www.ilsoftware.it/articoli.asp?t ... ione_10219 dovrebbe essere in ogni caso applicabile, indipendentemente dal numero di account utente presenti. L'importante è effettuarla da supporto di avvio e di accertarsi di applicare le modifiche sull'unità corretta. Comunque ci aggiorniamo non appena, per scrupolo, avrò riverificato il tutto.
  6. Avatar
    Peacock
    13/01/2014 12:47:41
    ciao. Avevo provato ad usarla su Win7 ma senza successo (mi dava sempre Accesso Negato alle cartelle Users, anche usando Utente Administrator (riattivato x occasione) e con CMD tx dx Ammninistratore, però su pc con già diversi account attivati, sia users che admin. Visto che non mi ha funzionato e dovendo ripristinare il tutto, volevo adesso approfittare della occasione, installare Win8.1 e provare mentre ho 1 solo account come Admin. Dopo la junk installerò gli altri Users. Cosa ne pensi?
  7. Avatar
    Michele Nasi
    13/01/2014 11:43:03
    Ciao, ti garantisco che la procedura illustrata nell'articolo http://www.ilsoftware.it/articoli.asp?t ... ione_10219 funziona benissimo se si seguono tutti i vari passaggi. L'unica differenza è che tu stai provando ad applicarla su Windows 8.1 anziché su Windows 7. Secondo me non dovrebbe cambiare nulla ma a brevissimo cercherò di riprovare la procedura anche su Windows 8.1 e ti farò sapere! Buona giornata e a presto
  8. Avatar
    Peacock
    13/01/2014 11:38:47
    Grazie Michele, ma ho fatto proprio così. Ho provato la procedura ma senza successo: NON mi fa cancellare al vecchia dir User (sistema con 7, ma con già diversi utenti attivi : 2 + 1 amministratore) e neppure le singole Users\utenteNN : avendo un SDD 120GB volevo spostare la cartella sul HDD 2TB. Ho deciso di partire ex novo: installo 8.1 pro su C:\ (SDD) , 1 solo utente come Amministratore, prima sposto la cartella Users su E:\ (HDD) e dopo installo i nuovi utenti : questo perché i miei figli nelle loro cartelle ci scaricano e memorizzano di tutto! Così secondo voi dovrebbe funzionare? Mi suggerite anche di spostare alcune singole cartelle di Programmi (quelle + grosse o x i giochi) ?? oppure tutte la cartella Program ? Grazie x vs Aiuto
  9. Avatar
    Michele Nasi
    11/01/2014 08:57:48
    Non devi semplicemente usare un account dotato dei diritti amministrativi ma devi accertarti di aprire il prompt dei comandi come amministratore (tasto destro, "Esegui come amministratore").
  10. Avatar
    peacock
    11/01/2014 02:38:25
    Aiuto! ho seguito tutto, copiato c:\Users con robocopy (come AMMINISTRATORE), OK ma quando provo a rinominare la cartella prima di fare mklink (REN c:\Users Users.bak) mi da Errore di Accesso Negato
Spostare un programma su un altro disco senza reinstallarlo: giunzioni e collegamenti simbolici - IlSoftware.it