Hello Jack,
I just had the same issue after rebooting Catalina, the bar at approximately 90% for a long time, never reaching the login screen.
Rebooting was working perfectly since installed, but after about 6 hours using the system I rebooted it again and my system behavior was exactly like yours.
I dedicated about 2 hours investigating it and I found the cause and how to solve it.
The problem was caused by time machine "local snapshots".
Local snapshots are backups created on the local disk, even if you have an external disk connected and dedicated to time machine.
I have an external disk that always worked well, and it was working very well today on Catalina.
But Catalina creates various local snapshots also on the root disk (and there is no way to disable localsnapshots like on previous MacOS versions which was possible to disable just the localsnaps)
What technically happens when the progressbar stucks on 90% forever is that the system is somehow verifying those local snapshots, and it take hours, so we thing the system is frozen there just before the login screen appears. But it is not frozen, it is analysing data on disk.
This is bad, I agree, and is a Bug. But bugs are expected.. this is a developer version. Bugs are welcome somehow 🙂
How to solve it:
- Boot into safe mode [by holding Shift just after the boot bell sound],
- login to your user,
- open a Terminal window
Once on the terminal window prompt, lets check if this is the cause:
type the command below to list all local snapshots
tmutil listlocalsnapshotdates
You should get a result like this:
Snapshot dates for all disks:
2019-06-04-082639
2019-06-04-113651
2019-06-04-135729
2019-06-04-145723
2019-06-04-155709
2019-06-04-181243
2019-06-05-030947
In my case I had 7 local snapshots as seen above, and we must delete them to fix Catalina (I decided to delete them all, because I have my backups already on my always connected external disk used by Time Machine)
The syntax to delete is:
tmutil deletelocalsnapshots <snapshot>
One by one:
tmutil deletelocalsnapshots 2019-06-04-082639
tmutil deletelocalsnapshots 2019-06-04-113651
tmutil deletelocalsnapshots 2019-06-04-135729
and so on....
After deleting them, run again the first command [to list the snaps] , just to be sure there will be no results.
Reboot the system.
Catalina will boot fast and you will be able to login and use it normally.
If you have any questions, feel free to ask.