diskutil eject: come espellere i dischi dal Terminale del Mac
Espelli qualsiasi disco del Mac dal Terminale con diskutil, inclusi lo smontaggio forzato di un volume che non si espelle e l'uso di lsof per scoprire cosa lo trattiene.
Il Finder ti dice che il disco è in uso. Ma non ti dice cosa lo sta usando né cosa farci. Il Terminale fa entrambe le cose.
Risposta rapida: esegui
diskutil eject /Volumes/YourDriveNameper espellere un disco dal Terminale. Se non funziona, usasudo lsof /Volumes/YourDriveNameper vedere cosa blocca l’espulsione,kill <PID>per fermare il processo responsabile, poi espelli di nuovo. Come ultima risorsa,diskutil unmountDisk force /dev/diskNforza la disconnessione del disco, ma fallo solo quando nulla sta scrivendo attivamente.
Se hai dimestichezza con la riga di comando, il Terminale è il modo più potente per gestire le espulsioni ostinate su macOS. E se non ce l’hai ancora, questi comandi sono un buon punto di partenza.
Espulsione di base con diskutil eject
Il modo più diretto per espellere un disco esterno dal Terminale del Mac:
diskutil eject /Volumes/YourDriveName
Sostituisci YourDriveName con il nome reale del tuo disco, esattamente come appare nel Finder. Se il nome contiene spazi, mettilo tra virgolette:
diskutil eject "/Volumes/My Drive"
Fa la stessa cosa che fa il clic sul pulsante di espulsione nel Finder. Se funziona, il disco si smonta in modo pulito e hai finito. Se non funziona, ottieni un messaggio di errore più informativo di quanto il Finder offra mai.
Puoi anche smontare senza espellere (il disco resta visibile in Utility Disco ma non è montato):
diskutil unmount /Volumes/YourDriveName
La differenza conta per i dischi con più partizioni. unmount rimuove un solo volume. eject rimuove il dispositivo fisico e tutti i suoi volumi in un colpo solo.
Trovare l’identificatore del disco con diskutil list
Prima di usare i comandi più avanzati, ti serve l’identificatore del disco. Elenca tutti i dischi collegati:
diskutil list
L’output mostra ogni disco e le sue partizioni. Il tuo disco esterno sarà qualcosa come disk4 o disk5. I dischi interni sono di solito disk0 e disk1.
Per una panoramica più leggibile dei soli dischi esterni:
diskutil list external
Una volta che conosci l’identificatore del disco, puoi anche espellere usando il percorso /dev/ invece del nome del volume:
diskutil eject /dev/disk4
È utile quando il nome del volume contiene caratteri insoliti oppure quando il volume non è montato ma il disco è ancora collegato.
Come espellere tutti i dischi esterni in una volta
Se devi espellere ogni disco esterno con un solo comando, ci sono due approcci.
Usando diskutil per trovare ed espellere tutti i dischi esterni:
diskutil list external | grep -o 'disk[0-9]*$' | while read disk; do diskutil eject "/dev/$disk"; done
Oppure usando AppleScript dal Terminale, che replica ciò che fa il Finder:
osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)'
L’approccio con AppleScript espelle solo i dischi che il Finder considera espellibili: salta il disco di avvio e i volumi di rete, che di solito è proprio quello che vuoi.
Smontaggio forzato quando diskutil eject fallisce
Se una normale espulsione fallisce con un errore tipo «couldn’t unmount disk», forzala:
diskutil unmount force /Volumes/YourDriveName
Oppure smonta tutti i volumi di un disco specifico in una volta sola:
diskutil unmountDisk force /dev/disk4
Lo smontaggio forzato dice a macOS di rilasciare il volume a prescindere da cosa lo sta usando. È più controllato dello scollegare fisicamente il disco (il sistema svuota comunque le cache e avvisa i processi), ma non aspetta che i processi chiudano i file in modo pulito.
Usa lo smontaggio forzato quando sai che non si sta scrivendo nulla di importante. È l’equivalente da riga di comando dell’espulsione forzata da Utility Disco. Consulta la nostra guida su quando l’espulsione forzata è sicura e quando è rischiosa prima di usarlo su un disco che era in uso attivo.
Trovare cosa blocca l’espulsione con lsof
Questo è il comando che rende il Terminale prezioso per i problemi di espulsione:
lsof /Volumes/YourDriveName
lsof sta per «list open files». Mostra ogni processo che ha un file aperto su quel volume: il nome del processo, l’ID del processo (PID), l’utente che lo esegue e quale file è aperto. (Per una spiegazione mirata dei flag e degli schemi d’uso di lsof, consulta la nostra guida al comando lsof per utenti Mac.)
Per risultati completi (compresi i processi di sistema), eseguilo con sudo:
sudo lsof /Volumes/YourDriveName
Senza sudo vedi solo i processi di proprietà del tuo account utente. I processi di sistema come mds di Spotlight o backupd di Time Machine non compaiono. Con sudo vedi tutto ciò che sta davvero tenendo aperto il disco.
Leggere l’output di lsof
L’output ha più o meno questo aspetto:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mds 123 root 12r REG 1,8 4096 789 /Volumes/MyDrive/.Spotlight-V100/...
Finder 456 aaron 15r DIR 1,8 1024 2 /Volumes/MyDrive
Dropbox 789 aaron 8u REG 1,8 8192 345 /Volumes/MyDrive/Projects/.dropbox
Le colonne che contano di più:
- COMMAND: il nome del processo, cioè ciò che ti dice cosa blocca l’espulsione.
- PID: l’ID del processo, che userai per terminarlo se necessario.
- FD: descrittore di file e modalità di accesso.
rsignifica lettura,wsignifica scrittura,usignifica lettura/scrittura. Se vediwou, qualcosa sta scrivendo attivamente sul disco, e forzare l’espulsione è rischioso. - NAME: il file specifico a cui si sta accedendo, che spesso rivela esattamente perché quel processo è lì.
Sospettati frequenti: mds (indicizzazione di Spotlight), backupd (Time Machine), Dropbox, Google Drive, il Finder stesso. Vedi i nostri approfondimenti su Spotlight che blocca l’espulsione e su iCloud/Dropbox che impediscono l’espulsione per soluzioni mirate.
Terminare i processi che bloccano
Una volta che conosci il PID di un processo bloccante, terminalo in modo ordinato:
kill 789
Questo invia un segnale di terminazione ordinata. Il processo ha la possibilità di chiudere i file e fare pulizia. Dagli qualche secondo per uscire, poi riprova a espellere.
Se non risponde a un kill ordinato:
kill -9 789
Questo forza la terminazione immediata. Il processo non ha modo di fare pulizia. Usalo come ultima risorsa, soprattutto con i processi di sistema.
Per terminare tutti i processi che usano un volume specifico con un solo comando:
sudo lsof -t /Volumes/YourDriveName | xargs kill
Il flag -t fa sì che lsof restituisca solo i PID, e xargs li passa a kill. Attenzione: questo termina ogni processo che usa il disco, compresi quelli che potrebbero essere nel mezzo di un lavoro importante.
Procedura completa di risoluzione
Ecco la sequenza completa per un disco che non si espelle:
# Passo 1: prova l'espulsione normale
diskutil eject /Volumes/YourDriveName
# Passo 2: se fallisce, vedi cosa blocca
sudo lsof /Volumes/YourDriveName
# Passo 3: termina il processo responsabile (sostituisci PID con il numero reale)
kill 12345
# Passo 4: riprova a espellere
diskutil eject /Volumes/YourDriveName
# Passo 5: se è ancora bloccato, forza lo smontaggio
diskutil unmountDisk force /dev/disk4
La maggior parte dei problemi si risolve al Passo 3. Individua il responsabile, terminalo, espelli in modo pulito.
Varianti diagnostiche utili
Controlla se è proprio Spotlight a trattenere il disco:
lsof /Volumes/YourDriveName | grep mds
Elenca solo i nomi univoci dei processi che bloccano l’espulsione (senza righe duplicate):
lsof /Volumes/YourDriveName | awk '{print $1}' | sort -u
Osserva l’I/O del disco in tempo reale per vedere se qualcosa sta scrivendo attivamente:
sudo fs_usage -f diskio | grep YourDriveName
Questo gira in continuazione e mostra ogni operazione sul disco man mano che avviene. Premi Control-C per fermarlo. Usalo quando lsof mostra un processo ma non sei sicuro se stia scrivendo attivamente o se stia solo tenendo un handle obsoleto.
Quando il Terminale è più fatica di quanto valga
Questi comandi sono potenti e, dopo averli usati qualche volta, diventano una seconda natura. Ma c’è un costo reale nel passare dal tuo lavoro a una finestra del Terminale: eseguire comandi diagnostici, interpretare output tecnici, decidere quale PID è sicuro terminare.
Ejecta fa tutto quanto sopra in automatico. Monitora i tuoi dischi, individua ogni processo bloccante e ti offre un pulsante per chiudere ciascuno di essi con un clic. Le stesse informazioni che otterresti da sudo lsof, presentate visivamente proprio nella tua barra dei menu: nessun comando da ricordare, nessun output da interpretare.
Per 9,99 $ ottieni uno strumento che sostituisce l’intera procedura del Terminale, fatta di tanti passaggi, con un solo clic. Se combatti con questo problema più di una volta al mese, si ripaga da solo in frustrazione risparmiata già nella prima settimana. Prova Ejecta gratis per 7 giorni, senza bisogno del Terminale.
Se preferisci non usare il Terminale ogni volta, Ejecta ti mostra esattamente quale processo sta bloccando il disco — e ti permette di chiuderlo con un clic, direttamente dalla barra dei menu.
Acquista ora — $9.99