The disk “Vol” couldn’t be ejected because “Terminal” is using it
I have connected an External hard disk to Mac and just issued command df -h
in terminal. When I tried to eject drive it shows the error. After closing terminal, I could eject it. But is that really needed ? I didn't open any files in external disk. df -h
just shows disk usage of all drives. Then how come terminal uses the drive and prevent from ejecting?
The disk “Vol” couldn’t be ejected because “Terminal” is using it
If you cd- change directory to the mounted filesystem then you must cd out of the filesystem before you can eject it. As an example
cd; diskutil eject /Volumes/<volume name>
cd: changes the current working directory to your home folder
diskutil: ejects the filesystem
There is one case where the tab needs to be closed. Sometimes the initial working directory is on the volume. (This can happen if you open a new tab from an existing tab that is visiting the volume.) When this happens, two processes are initially using the volume: login
, and the shell it launches. cd
will change the working directory in the shell, but won't affect the login
process. The only way to make login
stop using the volume is to close the tab.
If you're not sure which tab(s) to close, you can use lsof
:
sudo lsof -a -c login /Volumes/<volume name>
This command will show the process IDs (and other info) for all login
processes that have open some subdirectory of the volume. With the process ID, you can either:
- (if Terminal is configured to show the TTY name in the title):
- get the controlling terminal with
ps
(ps -o tty -p <login pid(s),>
) - find the relevant tabs from the Window menu
- close them
- get the controlling terminal with
- more simply, shut down the relevant
login
by sending it/them a SIGHUP (kill -HUP <login pid(s)>
)