I skipped Catalina (because I wanted to be able to run 32-bit software) and went straight from Mojave to Big Sur. I experience the exact same thing: External drives, could be my Time Machine or my other big external drive, take forever to eject.
I experienced a distantly related issue back in the day (probably with High Sierra, I can't really remember) when I noticed that after my external Time Machine drive was unmounted, it kept spinning – unless I ejected it from the Disk Utilities (
as noted by me55 in #7). So – different issue, same solution: Eject the drive via Disk Utilities … or from the command line in a Terminal window with "diskutil eject disk2" (or whatever the respective number is).
Being a programmer, what I did back then was: I created a tiny Python script that resides on my desktop and ejects the (first) external drive (it finds). Caveat: You need to have the Python interpreter installed on your computer, which should be the case on pretty much any new Mac. Otherwise, Homebrew is your friend.
This is what the script looks like:
#!/usr/bin/python
import os,re
diskUtilList = os.popen('diskutil list').read()
diskUtilList = diskUtilList.replace("\n", " ")
externalPhysicalRegEx = r".*\/dev\/(disk(?:\d+)) \(external\, physical\).*"
match = re.match(externalPhysicalRegEx, diskUtilList)
if match:
print "Ejecting " + match.group(1) + " ..."
os.popen('diskutil eject '+match.group(1))
It first gets a list of all available drives with "diskutil list", puts them all together in one line, and then it finds the first external, physical drive that is available. … That regular expression is dark magic, as always. Here be dragons. If there's such a drive, it ejects it with "diskutil eject".
So put all that into TextEdit after setting it to plain text by hitting Shift/Cmd-T. Save the file somewhere in your home, perhaps under "Documents", and name it "EjectTimeMachine.py.command" (".command" to be able to double click it from Finder, ".py" to indicate that it's a Python script).
Please note: The last two lines need to start with four blank characters. This is how it should look like:
Now open a Terminal window and type "chmod a+x " without the quotation marks, but including the blank at the and –
but don't hit the Enter key just yet.
Now drag the "EjectTimeMachine.py.command" file icon from the Finder into your Terminal window. — Yes, you read that correctly: The file won't actually be moved, but the file name including its path will be added to the command line.
It should look similar to this:
chmod a+x /Users/yourname/Documents/EjectTimeMachine.py.command
… depending on what your user name is and where you stored that file. — Now hit Enter. This will make this file executable for "all" – hence the code "a+x" ("all plus eXecute").
Now drag the file icon from wherever you stored it to your desktop while holding the Alt/Command keys down. This will create a shortcut on your desktop, while the actual file remains wherever you stored it. … You may rename the shortcut to whatever comes to your mind, e.g. "Eject Time Machine". … Like so:
Please note that this will work only if you have just one external physical drive, or if the Time Machine drive is the first one that it finds. If that's not what you are looking for, find a programmer who can modify my Python script to suit your needs.