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.

(Updated )

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/YourDriveName per espellere un disco dal Terminale. Se non funziona, usa sudo lsof /Volumes/YourDriveName per vedere cosa blocca l’espulsione, kill <PID> per fermare il processo responsabile, poi espelli di nuovo. Come ultima risorsa, diskutil unmountDisk force /dev/diskN forza 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: FD descrive come è stato aperto il file: r per lettura, w per scrittura, u per entrambe. Non indica l’attività attuale né dimostra l’assenza di scritture in sospeso sul volume.
  • 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

Chiudi le app supportate dalla barra dei menu. I processi di sistema sono gestiti separatamente e possono richiedere attesa o spegnimento. Salva il lavoro, completa copie e backup e chiudi normalmente le app prima di riprovare. Forzare l’uscita o l’espulsione può causare perdita di dati; Ejecta non certifica la sicurezza delle scritture.

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

L’uscita forzata è l’ultima risorsa. Può perdere lavoro non salvato o interrompere scritture. Salva prima e lascia terminare i trasferimenti. I nomi dei processi Spotlight non dimostrano un accesso in sola lettura. Non forzare l’uscita di mds o mds_stores per liberare un disco. Attendi, chiudi le app e riprova con l’espulsione normale. Ejecta identifica questi processi, ma non offre la normale chiusura dei processi di sistema. Se il disco resta bloccato, salva tutto e spegni completamente il Mac prima di scollegarlo.

Salva il lavoro, completa copie e backup e chiudi normalmente le app prima di riprovare.

Procedura completa di risoluzione

Salva il lavoro, completa copie e backup e chiudi normalmente le app prima di riprovare.

diskutil eject "/Volumes/YourDriveName"
sudo lsof "/Volumes/YourDriveName"

I nomi dei processi Spotlight non dimostrano un accesso in sola lettura. Non forzare l’uscita di mds o mds_stores per liberare un disco. Attendi, chiudi le app e riprova con l’espulsione normale. Ejecta identifica questi processi, ma non offre la normale chiusura dei processi di sistema. Se il disco resta bloccato, salva tutto e spegni completamente il Mac prima di scollegarlo.

Il nome di un processo o l’elenco dei file aperti non dimostra che non ci siano scritture in corso. Salva il lavoro, completa copie e backup e chiudi normalmente le app prima di riprovare. Forzare l’uscita o l’espulsione può causare perdita di dati; Ejecta non certifica la sicurezza delle scritture.

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: Ejecta offre la diagnosi gratuita dei dischi senza una prova a tempo. La licenza a pagamento sblocca uscita ed espulsione per le app supportate, Espelli tutto e i controlli Time Machine. I processi di sistema possono richiedere attesa, autorizzazione o spegnimento. Salva il lavoro e completa prima i trasferimenti.

Nessun limite di computer o attivazioni. Richieste di rimborso entro 30 giorni.

Ejecta offre la diagnosi gratuita dei dischi senza una prova a tempo. La licenza a pagamento sblocca uscita ed espulsione per le app supportate, Espelli tutto e i controlli Time Machine. I processi di sistema possono richiedere attesa, autorizzazione o spegnimento. Salva il lavoro e completa prima i trasferimenti.

Acquista ora - $29 $9.99