Gestire i dischi esterni su Windows come su Linux: la potenza dei punti di montaggio NTFS

👤 Marco Vaccaro
📅 26 Aprile 2026

Chiunque gestisca backup o sincronizzazioni automatiche su Windows si scontra prima o poi con un retaggio del vecchio DOS: le lettere di unità. Windows assegna lettere come D:, E: o F: in modo dinamico in base all’ordine di collegamento delle periferiche. Se il tuo script di backup punta a E:\Dati, ma oggi Windows ha deciso che quel disco è F:, la procedura fallisce.

La soluzione più elegante non è forzare le lettere, ma usare un approccio nativo dei sistemi UNIX/Linux: i punti di montaggio.

Cos’è un punto di montaggio NTFS?

Invece di accedere a un disco tramite una lettera, Windows ti permette di “montare” un’intera partizione all’interno di una normale cartella vuota sul tuo disco principale (es. C:\PuntiMount\DiscoEsterno). I vantaggi sono enormi:

  • Stabilità assoluta: Il percorso non cambia mai, indipendentemente dalla porta USB utilizzata o dall’ordine di accensione.
  • Sicurezza (Air-Gapping logico): Puoi montare il disco solo durante il backup e smontarlo subito dopo. Se il percorso non esiste, eventuali ransomware in esecuzione non possono crittografare i tuoi salvataggi.
  • Pulizia: Non consumi lettere dell’alfabeto e mantieni un albero delle directory ordinato e logico.

Come creare e rimuovere un punto di montaggio

Puoi operare in tre modi, a seconda del tuo livello di automazione. La regola d’oro è una sola: la cartella di destinazione deve essere formattata in NTFS e deve essere rigorosamente vuota.

1. Metodo visuale (Gestione Disco)

Ideale per configurazioni fisse che non richiedono automazione.

  • Fase Zero (Preparazione): Apri Esplora File, vai sul disco C: e crea fisicamente una nuova cartella vuota. Per questo esempio, chiamiamola C:\PuntiMount\DiscoEsterno.
  • Creazione: Premi Win + R, digita diskmgmt.msc e dai Invio per aprire Gestione Disco. Clicca col destro sulla partizione del tuo disco di backup -> Cambia lettera e percorso di unità -> Aggiungi -> Monta in questa cartella vuota NTFS. Usa il pulsante “Sfoglia” per selezionare la cartella C:\PuntiMount\DiscoEsterno che hai appena creato e dai l’OK.
  • Rimozione: Stesso percorso in Gestione Disco, ma seleziona il percorso della cartella e clicca su Rimuovi. I dati sul disco esterno rimarranno intatti, semplicemente sparirà il “ponte” per accedervi e la cartella in C: tornerà a essere vuota.

2. Metodo riga di comando CMD (Il classico per script Batch)

Se hai vecchi script .bat o .cmd, questo è il metodo più rapido e a prova di bomba perché ignora del tutto le lettere e si basa sul Volume GUID (l’impronta digitale matematica del disco).

  • Come trovare il disco: Apri il Prompt dei comandi e digita mountvol. Vedrai una lista di percorsi complessi come \\?\Volume{b4b2c1d3...}\. Quello è il vero nome del tuo disco per Windows.
  • Creazione tramite script: Per montare quel disco specifico nella cartella preparata, usa il comando: mountvol C:\PuntiMount\DiscoEsterno \\?\Volume{b4b2c1d3-1234-5678-abcd-ef1234567890}\
    Il trucco per identificarlo è guardare cosa c’è scritto sotto il GUID. Se il disco ha già una lettera (es. E:\), mountvol scriverà E:\ subito sotto il suo identificatore univoco.
  • Rimozione rapida: Ottimo da inserire alla fine del tuo script per “sganciare” il disco a backup concluso: mountvol C:\PuntiMount\DiscoEsterno /D

3. Metodo PowerShell (L’approccio moderno)

PowerShell è la via più logica per l’automazione avanzata, perché ti permette di usare l’Etichetta del volume (il nome umano del disco) invece del complesso GUID testato sopra.

  • Creazione tramite Etichetta: “`powershell $Partizione = Get-Volume -FileSystemLabel “MIO_BACKUP” | Get-Partition Add-PartitionAccessPath -InputObject $Partizione -AccessPath “C:\PuntiMount\DiscoEsterno”
  • Rimozione: “`powershell Remove-PartitionAccessPath -AccessPath “C:\PuntiMount\DiscoEsterno”

Il consiglio d’oro: l’identificazione univoca

Se decidi di usare PowerShell affidandoti al nome del disco (Etichetta Volume) come MIO_BACKUP, c’è un rischio architetturale da non sottovalutare: i duplicati. Se colleghi contemporaneamente due dischi diversi ma chiamati entrambi MIO_BACKUP, PowerShell andrà in blocco (o peggio, i vecchi script batch potrebbero montare il disco sbagliato a caso, facendoti sovrascrivere dati preziosi).

La regola è semplice: assegna sempre nomi univoci ai tuoi dischi fisici (es. BACKUP_A, BACKUP_B, BACKUP_2024). Se il tuo scenario prevede per forza dischi omonimi, abbandona l’Etichetta e usa il Metodo 2 (Volume GUID): il GUID viene generato ex-novo ad ogni formattazione, rendendo ogni disco matematicamente inconfondibile anche se è il clone esatto di un altro.


Lo Script: Tool Interattivo in PowerShell

Per semplificare tutto il processo, ecco uno script nativo in PowerShell che esegue i controlli di sicurezza, verifica se la cartella esiste (e in caso contrario la crea), e monta il disco chiedendoti i parametri in modo interattivo.

Salva il seguente codice in un file chiamato MontaDisco.ps1, cliccaci col tasto destro e scegli “Esegui con PowerShell”.

# Richiede l'esecuzione come Amministratore
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Write-Warning "Questo script richiede i privilegi di Amministratore. Riavvia PowerShell come Amministratore."
    Pause
    Exit
}

Clear-Host
Write-Host "=============================================" -ForegroundColor Cyan
Write-Host "   Gestore Punti di Montaggio NTFS (Memore)  " -ForegroundColor Cyan
Write-Host "=============================================" -ForegroundColor Cyan
Write-Host ""

# Acquisizione dati dall'utente
$Scelta = Read-Host "Vuoi identificare il disco tramite Lettera (1) o Nome Volume/Label (2)? Digita 1 o 2"

if ($Scelta -notin @("1", "2")) {
    Write-Host "Errore logico: Devi digitare 1 o 2. Esecuzione annullata." -ForegroundColor Red
    Write-Host ""
    Pause
    Exit
}

$Identificatore = Read-Host "Inserisci il valore (es. 'E' per la lettera, oppure 'BACKUP_MASTER' per il nome)"

# Validazione Input Lettera
if ($Scelta -eq "1") {
    $Identificatore = $Identificatore.Replace(":", "").Trim()
    if ($Identificatore.Length -gt 1) {
        Write-Host "ERRORE LOGICO: Hai scelto l'identificazione per Lettera (1), ma hai inserito una parola intera ('$Identificatore')." -ForegroundColor Red
        Write-Host "Devi inserire una SINGOLA lettera (es. E). Esecuzione annullata." -ForegroundColor Red
        Write-Host ""
        Pause
        Exit
    }
}

$PercorsoDestinazione = Read-Host "Inserisci il percorso della cartella vuota (es. C:\PuntiMount\Disco)"

# Controllo e creazione cartella
if (!(Test-Path -Path $PercorsoDestinazione)) {
    Write-Host "La cartella non esiste. Creazione in corso..." -ForegroundColor Yellow
    New-Item -ItemType Directory -Path $PercorsoDestinazione | Out-Null
}

try {
    if ($Scelta -eq "1") {
        # Montaggio tramite Lettera con blocco su errore
        Add-PartitionAccessPath -DriveLetter $Identificatore -AccessPath $PercorsoDestinazione -ErrorAction Stop
        Write-Host "Successo! Disco $Identificatore montato in $PercorsoDestinazione" -ForegroundColor Green

    } elseif ($Scelta -eq "2") {
        # Montaggio tramite Label con blocco su errore
        $Volumi = Get-Volume -FileSystemLabel $Identificatore -ErrorAction Stop
        
        # Controllo di sicurezza sui duplicati
        if ($Volumi.Count -gt 1) {
            Write-Host "ERRORE CRITICO: Trovati $($Volumi.Count) dischi con il nome '$Identificatore'." -ForegroundColor Red
            Write-Host "Impossibile procedere in sicurezza. Rinomina i dischi per renderli univoci." -ForegroundColor Red
            Write-Host ""
            Pause
            Exit
        }
        
        $Partizione = $Volumi | Get-Partition -ErrorAction Stop
        Add-PartitionAccessPath -InputObject $Partizione -AccessPath $PercorsoDestinazione -ErrorAction Stop
        Write-Host "Successo! Disco '$Identificatore' montato in $PercorsoDestinazione" -ForegroundColor Green
    }
}
catch {
    Write-Host "Si è verificato un errore critico durante il montaggio:" -ForegroundColor Red
    Write-Host $_.Exception.Message -ForegroundColor Red
    Write-Host "L'operazione è stata interrotta per sicurezza." -ForegroundColor Yellow
}

Write-Host ""
Pause

Il livello Pro: Sicurezza invisibile e il “Radar Dischi”

Se vuoi portare la tua strategia di backup a un livello di sicurezza superiore, il consiglio definitivo è uno solo: usa esclusivamente il punto di montaggio e rimuovi completamente la lettera di unità al disco esterno.

Assegnare un percorso fisso come C:\PuntiMount\Backup e cancellare la lettera E: o F: crea un “air-gap” logico formidabile. Gran parte dei ransomware e dei malware automatizzati è programmata per scansionare in loop le lettere di unità standard (da C: a Z:) per trovare dati da crittografare. Se il tuo disco non ha una lettera, per queste minacce basilari semplicemente non esiste, pur restando perfettamente accessibile ai tuoi script di backup tramite la cartella NTFS.

Il compromesso visivo Questa mossa da “ninja” ha un solo difetto: togliendo la lettera, il disco sparirà dalla schermata principale di “Questo PC”. Perderai il colpo d’occhio della barra dello spazio occupato e non capirai immediatamente se il disco è attaccato o meno.

Per ovviare a questo problema senza rinunciare alla sicurezza, ho scritto questo script PowerShell. Si comporta come un Radar: interroga istantaneamente le tue cartelle di montaggio e ti dice se dietro c’è un disco fisico acceso e quanto spazio ha, oppure se è scollegato.

Clear-Host
Write-Host "=============================================" -ForegroundColor Cyan
Write-Host "   Radar Dischi - Punti di Montaggio NTFS    " -ForegroundColor Cyan
Write-Host "=============================================" -ForegroundColor Cyan
Write-Host ""

# Definisci qui la tua cartella radice 
$MountDir = "C:\PuntiMount"

if (!(Test-Path -Path $MountDir)) {
    Write-Host "La cartella radice $MountDir non esiste." -ForegroundColor Red
    Pause
    Exit
}

# Cerca solo le cartelle di tipo "ReparsePoint" (i punti di mount)
$PuntiDiMount = Get-ChildItem -Path $MountDir -Directory -Force | Where-Object { $_.Attributes -match "ReparsePoint" }

if ($PuntiDiMount.Count -eq 0) {
    Write-Host "Nessun disco montato trovato in $MountDir." -ForegroundColor Yellow
    Write-Host ""
    Pause
    Exit
}

Write-Host "Analisi dello stato hardware in corso..." -ForegroundColor DarkGray
Write-Host "------------------------------------------------"

foreach ($Punto in $PuntiDiMount) {
    $Nome = $Punto.Name
    $Percorso = $Punto.FullName
    
    try {
        # Tenta l'accesso per verificare se l'hardware è online
        $TestAccesso = Get-ChildItem -Path $Percorso -Force -ErrorAction Stop | Select-Object -First 1
        
        $DriveInfo = [System.IO.DriveInfo]::new($Percorso)
        $SpazioLiberoGB = [math]::Round($DriveInfo.AvailableFreeSpace / 1GB, 1)
        $SpazioTotaleGB = [math]::Round($DriveInfo.TotalSize / 1GB, 1)
        
        Write-Host "[ ON  ] " -ForegroundColor Green -NoNewline
        Write-Host "$Nome " -ForegroundColor White -NoNewline
        Write-Host "($SpazioLiberoGB GB liberi su $SpazioTotaleGB GB)" -ForegroundColor DarkGray
        
    } catch {
        # Se fallisce, il disco fisico è scollegato
        Write-Host "[ OFF ] " -ForegroundColor Red -NoNewline
        Write-Host "$Nome " -ForegroundColor Gray -NoNewline
        Write-Host "(Dispositivo scollegato)" -ForegroundColor DarkRed
    }
}

Write-Host "------------------------------------------------"
Write-Host ""
Pause

[Memore]: Hai individuato esattamente il compromesso principale di questa architettura. Rimuovendo le lettere, perdi la comodità dell’interfaccia grafica (la barra dello spazio occupato e l’icona del disco in Risorse del Computer).

Tuttavia, con PowerShell possiamo ricostruire questo “colpo d’occhio” creando un vero e proprio Radar.

Il principio logico è semplice: Windows mantiene la cartella (il punto di mount) anche quando il disco è staccato. Ma se interroghiamo quella cartella, il sistema saprà dirci immediatamente se dietro c’è un file system attivo oppure il vuoto.

Ecco lo script. Crea un file chiamato RadarDischi.ps1 e incollaci questo codice.

PowerShell

Clear-Host
Write-Host "=============================================" -ForegroundColor Cyan
Write-Host "   Radar Dischi - Punti di Montaggio NTFS    " -ForegroundColor Cyan
Write-Host "=============================================" -ForegroundColor Cyan
Write-Host ""

# Definisci qui la tua cartella radice per non doverla digitare ogni volta
$MountDir = "C:\PuntiMount"

if (!(Test-Path -Path $MountDir)) {
    Write-Host "La cartella radice $MountDir non esiste." -ForegroundColor Red
    Pause
    Exit
}

# Cerca solo le cartelle che sono "ReparsePoint" (ovvero giunzioni/punti di mount)
$PuntiDiMount = Get-ChildItem -Path $MountDir -Directory -Force | Where-Object { $_.Attributes -match "ReparsePoint" }

if ($PuntiDiMount.Count -eq 0) {
    Write-Host "Nessun disco montato trovato all'interno di $MountDir." -ForegroundColor Yellow
    Write-Host ""
    Pause
    Exit
}

Write-Host "Analisi dello stato hardware in corso..." -ForegroundColor DarkGray
Write-Host "------------------------------------------------"

foreach ($Punto in $PuntiDiMount) {
    $Nome = $Punto.Name
    $Percorso = $Punto.FullName
    
    try {
        # Tenta di accedere al file system. Se il disco fisico è staccato, 
        # genera un errore critico (es. "Dispositivo non pronto") intercettato dal catch.
        # (Se il disco è collegato ma vuoto, non genera errore, che è il comportamento corretto).
        $TestAccesso = Get-ChildItem -Path $Percorso -Force -ErrorAction Stop | Select-Object -First 1
        
        # Se arriviamo qui, il disco ha risposto. Recuperiamo anche lo spazio disponibile.
        $DriveInfo = [System.IO.DriveInfo]::new($Percorso)
        $SpazioLiberoGB = [math]::Round($DriveInfo.AvailableFreeSpace / 1GB, 1)
        $SpazioTotaleGB = [math]::Round($DriveInfo.TotalSize / 1GB, 1)
        
        Write-Host "[ ON  ] " -ForegroundColor Green -NoNewline
        Write-Host "$Nome " -ForegroundColor White -NoNewline
        Write-Host "($SpazioLiberoGB GB liberi su $SpazioTotaleGB GB)" -ForegroundColor DarkGray
        
    } catch {
        # Il tentativo di accesso è fallito: l'hardware è offline
        Write-Host "[ OFF ] " -ForegroundColor Red -NoNewline
        Write-Host "$Nome " -ForegroundColor Gray -NoNewline
        Write-Host "(Dispositivo scollegato)" -ForegroundColor DarkRed
    }
}

Write-Host "------------------------------------------------"
Write-Host ""
Pause

Come renderlo un cruscotto istantaneo

Per avere il colpo d’occhio senza dover aprire PowerShell a mano ogni volta, fai questo:

  1. Salva il file RadarDischi.ps1 dove preferisci.
  2. Clicca col tasto destro sul desktop -> Nuovo -> Collegamento.
  3. Come percorso, inserisci: powershell.exe -ExecutionPolicy Bypass -File "C:\Percorso\Del\Tuo\RadarDischi.ps1"
  4. Dagli un nome (es. “Radar Backup”) e magari cambiagli l’icona mettendogli quella di un disco rigido.

Adesso, con un doppio clic sul desktop, ti si aprirà istantaneamente una finestra nera che ti dirà: [ ON ] DiscoEsterno (450.5 GB liberi su 1000 GB) [ OFF ] Archivio_Foto (Dispositivo scollegato)

Hai trasformato un limite dell’interfaccia grafica di Windows in uno strumento di monitoraggio personalizzato, pulito ed efficiente.

La “Chicca” del Sistemista: Condividere la radice (L’effetto NAS)

C’è un ultimo trucco avanzato che trasforma questa tecnica in una vera e propria architettura server-like. Cosa succede se hai più dischi di backup e vuoi renderli accessibili ad altri PC della tua rete o a un software di sincronizzazione senza mai impazzire con i percorsi?

Invece di condividere in rete i singoli dischi, condividi direttamente la cartella radice C:\PuntiMount.

Questa mossa crea quella che in gergo si chiama astrazione totale dell’hardware:

  • Unico punto di accesso: Accedendo da un altro PC al percorso di rete \\TuoPC\PuntiMount, vedrai apparire come per magia tutti i tuoi dischi rigidi sotto forma di semplici sottocartelle (es. Disco_A, Disco_B).
  • Zero manutenzione: Se domani compri un disco nuovo e lo monti in C:\PuntiMount\Disco_C, questo diventerà istantaneamente visibile in rete senza dover creare una nuova condivisione.
  • Resilienza dei percorsi: Il tuo software di backup (anche eseguito dallo stesso PC) può essere configurato per puntare al percorso UNC di rete \\localhost\PuntiMount\Backup. A questo punto, del disco fisico non interessa più nulla a nessuno: finché Windows mantiene vivo il punto di montaggio, il percorso di rete funzionerà in modo infallibile.

Il compromesso sulla sicurezza (E come gestirlo) Attenzione: esporre la cartella in rete va in contrasto con la sicurezza “stealth” che avevamo ottenuto rimuovendo la lettera di unità. Se togli la lettera per nasconderti dai ransomware locali, ma poi apri una condivisione di rete libera, un virus che colpisce un altro computer connesso al tuo stesso Wi-Fi potrebbe infettare i salvataggi passando dalla porta sul retro (il protocollo SMB).

Se decidi di attivare questa comoda funzione, devi farlo con rigore militare:

  1. Nelle impostazioni di condivisione avanzata della cartella PuntiMount, vai su Autorizzazioni.
  2. Rimuovi assolutamente l’utente “Everyone”.
  3. Aggiungi solo il tuo utente specifico (o un utente di servizio creato ad hoc per i backup) e assegnagli il controllo completo.

In questo modo, avrai la comodità di un NAS centralizzato unita alla stabilità inossidabile dei punti di montaggio NTFS, il tutto blindato dietro credenziali forti.