So you've gone through the process of mounting your drive in Linux:
> sudo fdisk -l
Device Boot = /dev/sdb1 (and a bunch of other technical information regarding drive size, id, and such)
> sudo mount -t ntfs-3g /dev/sdb1 /media/TOSHIBA
You run a bunch of stuff, get it all working, then find you need to take the drive to work the next day, so you try to unmount it.
> sudo umount /media/TOSHIBA
umount: /media/TOSHIBA: device is busy.
(In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))
Well, being a Windows guy at heart, and not really understanding why everything here needs to be so technical, this message never told me ANYTHING. I would try typing just plain "lsof" or "lsof(8)" or "fuser(1)" with no useful results.
Then I asked a friend.
"lsof | grep <stuff>
So I tried it:
> sudo lsof | grep /dev/sdb1
mount.ntf 2096 root 3u BLK 8,33 0x1d1ba997e00 2897182 /dev/sdb1
"Oh," he said. "Try the mount path. /dev/sdb1 is the device which is mounted somewhere else."
> sudo lsof | grep /media/TOSHIBA
"Nothing," I said. "Just a blank line."
"Looks like no program has any file open on it?"
"Let me try again."
bash 2068 daniel cwd DIR 8,33 8192 17459 /media/TOSHIBA
grep 2254 root cwd DIR 8,33 8192 17459 /media/TOSHIBA
lsof 2255 root cwd DIR 8,33 8192 17459 /media/TOSHIBA
"Ahh...It may have been because I was still cd'd into it."
So lessons learned:
- grep, no matter how weird and complicated it looks with all those pipes and stuff, is still VERY useful.
- lsof is the command of choice for figuring this out.
- Use the mount point rather than the drive itself when searcing the lsof output text.
- Even just navigating into a drive will lock it from being unmounted - it's not like in Windows where if you "Safely Remove Hardware" or yank the USB cable, the computer conveniently closes the explorer window for you.