Tous les articles

Éjecter un disque « utilisé » sur Mac : trouver ce qui le bloque

· 6 min de lecture

Quand vous éjectez un disque externe et que macOS répond que le disque n'a pas été éjecté, car un ou plusieurs programmes l'utilisent peut-être, c'est qu'un fichier est encore ouvert sur ce disque. macOS refuse de le démonter pour que rien ne soit perdu au milieu d'une écriture. La solution est toujours la même : trouver ce qui retient le disque, le fermer, éjecter de nouveau, et ne forcer l'éjection qu'en dernier recours.

Voici comment trouver le coupable avec les outils de macOS, et comment Folia Files peut vous le nommer.

Pourquoi macOS dit que le disque est utilisé

Un disque ne peut pas être démonté tant qu'un processus y garde un fichier, un dossier ou un dossier de travail ouvert. Les suspects habituels :

  • Une app qui a un document ouvert depuis le disque : une vidéo dans un lecteur, un projet dans un éditeur, une photothèque.
  • Spotlight, qui indexe un disque qu'il vient de découvrir (processus mds_stores ou mdworker). Un disque qu'on vient de brancher est souvent occupé quelques minutes.
  • Time Machine, qui sauvegarde sur ce disque ou le vérifie.
  • Coup d'œil, qui fabrique les vignettes des fichiers que vous venez de parcourir.
  • Une fenêtre du Terminal dont le dossier courant est sur le disque. Rien ne semble ouvert, mais le shell lui-même retient le disque.
  • Une copie encore en cours, parfois dans une autre app.

Le Finder nomme parfois l'app dans son alerte, mais souvent vous n'avez que le message générique, sans indice sur le responsable.

D'abord, fermer l'évident et réessayer

  1. Enregistrez et fermez tous les documents qui se trouvent sur le disque. Si vous ne savez pas quelle app l'utilise, quittez celles dans lesquelles vous avez ouvert des fichiers.
  2. Fermez les fenêtres du Finder qui montrent le disque. Dans le Terminal, tapez cd ~ dans chaque fenêtre qui travaillait dessus.
  3. Si le disque vient d'être branché, ou si une sauvegarde Time Machine est en cours, attendez une minute.
  4. Éjectez de nouveau : sélectionnez le disque dans la barre latérale du Finder et appuyez sur ⌘E, ou cliquez sur le bouton d'éjection à côté de son nom.

Cela suffit dans la plupart des cas. Si le disque refuse encore, cherchez qui le retient exactement.

Trouver ce qui utilise le disque avec le Terminal

lsof (« list open files », la liste des fichiers ouverts) est fourni avec macOS. Ouvrez le Terminal et tapez la commande suivante, en remplaçant MonDisque par le nom du disque tel qu'il apparaît dans le Finder :

lsof /Volumes/MonDisque

À partir du point de montage d'un disque, lsof liste tous les fichiers ouverts sur ce disque. Si le nom contient des espaces, mettez-le entre guillemets : lsof "/Volumes/Mon Disque".

Lire le résultat

Chaque ligne est un fichier ouvert. Les colonnes utiles :

  • COMMAND : le processus, par exemple QuickTime, zsh ou mds_stores.
  • PID : son numéro, celui qu'affiche aussi le Moniteur d'activité.
  • FD : cwd veut dire que le dossier courant du processus est sur le disque (typiquement une fenêtre du Terminal).
  • NAME : le fichier lui-même.

Si rien n'apparaît alors que le disque refuse toujours, lancez la même commande avec sudo lsof /Volumes/MonDisque et tapez votre mot de passe : les services du système comme Spotlight et Time Machine tournent sous un autre utilisateur, et seul un administrateur voit leurs fichiers.

Quittez ensuite l'app normalement (après avoir enregistré votre travail) et éjectez de nouveau. Évitez de tuer un processus qui écrit sur le disque : c'est justement la perte de données dont le refus vous protège.

Le Moniteur d'activité, si vous préférez ne rien taper

Dans le Moniteur d'activité, double-cliquez sur un processus et ouvrez l'onglet qui liste ses fichiers et ports ouverts : si des chemins sous /Volumes/MonDisque y figurent, c'est lui. Cela marche, mais il faut deviner quel processus inspecter, un par un. lsof répond à la question d'un seul coup.

Quand c'est Spotlight ou Time Machine

Si lsof montre mds, mds_stores ou mdworker, Spotlight indexe le disque. Attendez qu'il ait fini ou, pour un disque dans lequel vous ne cherchez jamais, arrêtez l'indexation avec sudo mdutil -i off /Volumes/MonDisque (ou ajoutez le disque à la liste de confidentialité de Spotlight dans Réglages Système).

S'il montre backupd, Time Machine travaille sur ce disque. Laissez la sauvegarde se terminer, ou arrêtez-la depuis Time Machine avant d'éjecter : débrancher un disque de sauvegarde en pleine sauvegarde peut abîmer celle-ci.

Forcer l'éjection : quand, et ce que l'on risque

Quand plus rien ne marche, le Finder peut proposer de forcer l'éjection, et le Terminal sait le faire aussi :

diskutil unmount force /Volumes/MonDisque

Une éjection forcée ferme les fichiers sous le nez des apps : ce qu'elles n'ont pas encore enregistré sur le disque est perdu, et une copie en cours s'interrompt. Réservez-la à un disque sur lequel vous savez que personne n'écrit, par exemple une image disque bloquée, jamais à un disque au milieu d'une copie ou d'une sauvegarde.

Laisser Folia Files vous dire qui retient le disque

Folia Files est un gestionnaire de fichiers pour macOS, et il traite une éjection refusée comme une question à laquelle répondre plutôt qu'une impasse. Quand un disque ne s'éjecte pas, un bandeau affiche Impossible d'éjecter « MonDisque » et liste ce qui l'utilise, sous des noms que l'on reconnaît : l'app elle-même, Spotlight (indexation du disque), Time Machine ou Coup d'œil. Sous ce message :

  • Quitter « App » quitte l'app qui retient le disque (deux apps au plus sont proposées), puis éjecte de nouveau tout seul.
  • Réessayer recommence simplement, par exemple une fois que Spotlight a fini.
  • Forcer l'éjection… demande d'abord confirmation et dit ce que l'on risque.

Folia Files : le disque Travel SSD refuse de s'éjecter, le bandeau indique qu'il est utilisé par Atlas, avec Réessayer et Forcer l'éjection…

Pour tout éjecter d'un coup, faites un clic droit sur un disque dans la barre latérale gauche et choisissez Éjecter les 3 disques (le nombre suit ce qui est branché), ou prenez la même commande dans le menu de Folia Files de la barre des menus. Elle éjecte les disques externes et les images disque, jamais les partages réseau.

Éjecter avant la veille (version du site)

Débrancher les disques d'un portable pendant qu'il dort est ce qui déclenche d'ordinaire l'avertissement de macOS sur un disque mal éjecté. Dans Réglages › Fichiers et réseau › Disques externes, Éjecter les disques externes avant la veille et les remonter au réveil les démonte avant que le Mac ne s'endorme (ils restent branchés) et les remonte au réveil. Un disque utilisé à ce moment-là reste monté, et Folia Files vous le signale au réveil.

Réglages › Fichiers et réseau › Disques externes : éjecter les disques externes avant la veille et les remonter au réveil

Nommer ce qui retient un disque, Forcer l'éjection… et l'éjection avant la veille sont dans la version du site de Folia Files. La sandbox de la version App Store ne voit pas les fichiers ouverts par les autres apps : le bandeau y affiche le message de macOS avec Réessayer, et lsof dans le Terminal reste le moyen de trouver le coupable.

Le pense-bête

  1. Enregistrez et fermez les documents du disque ; cd ~ dans le Terminal.
  2. Attendez une minute si Spotlight ou Time Machine travaillent peut-être.
  3. lsof /Volumes/MonDisque, puis sudo lsof /Volumes/MonDisque, pour voir qui le retient.
  4. Quittez cette app et éjectez de nouveau avec ⌘E.
  5. Ne forcez l'éjection que pour un disque sur lequel personne n'écrit.

Si vous préférez avoir la réponse sans ouvrir le Terminal, téléchargez Folia Files : le prochain disque qui refusera de s'éjecter vous dira pourquoi.