In more than two years of owning a Macbook, I never faced a single issue upgrading the OS. Until today when, after installing the
OS X 10.11.1, the Macbook would just hang after rebooting.
More precisely, the progress bar on the boot screen would stop at roughly two thirds of the way. So today, finally, I had to figure
out what kind of diagnosis and recovery options OS X actually provides.
The two most important tools were:
- ⌘+V during reboot: Boot in verbose mode, showing the boot messages instead of the Apple logo and progress bar. I noticed
that the boot process hung after a message saying pci pause: SDXC.
- ⌘+R during reboot: Boots into recovery mode,
which offers tools for disk and networking diagnosis, as well as
the option to open a terminal as a superuser.
Things I tried:
I was dangerously close to reinstalling the OS now, with only two aces left up my sleeves:
Single-user mode
and kernel extensions.
I had seen references to startup issues related to kernel extensions in some articles, but knew very little about them.
The first thing I tried was to temporarily disable kernel extension signing (
nvram boot-args=kext-dev-mode=1), with no
discernible effect. Fortunately, at this point I came across
Justin Silver's blog article
"OS X El Capitan 10.11.1 Hanging on Boot"
in which he describes a startup issue which looks a
lot like mine. His excellent summary contains
instructions on disabling kernel extensions using recovery mode - which helped me solve my problem!
I booted into recovery mode, opened a terminal window, and then:
$ mount -rw /
$ cd /Volumes/Macintosh\ HD
$ cd Library/Extensions
$ ls
ACS6x.kext HighPointIOP.kext
ATTOCelerityFC8.kext HighPointRR.kext
ATTOExpressSASHBA2.kext PromiseSTEX.kext
ATTOExpressSASRAID2.kext SoftRAID.kext
AX88179_178A.kext hp_io_enabler_compound.kext
ArcMSR.kext hp_io_printerclassdriver_enabler.kext
CalDigitHDProDrv.kext
Following Justin's advice, I moved all kernel extensions out of
/Library/Extensions
to disable them temporarily, and
then rebooted. Lo and behold, the login screen appeared! After a few such rounds of moving kernel extensions back to
/Library/Extensions
and rebooting, the root cause of my startup issues turned out to be those HP printer extensions.
Phew.
The HP kernel extensions had been on my system for quite some time, of course, and had never caused any problems like this before.
So there are still open questions about what exactly had happened here. To be solved on a rainy day.
Other related links:
Update January 2nd, 2016: Today it happened again - the MacBook hung at the same point during reboot. I remember
I installed an HP scanner driver roughly a week ago, and I probably did not reboot since then. The above recipe
worked for me this time again.
Update November 2016: Apparently, the printer driver reinstalls itself automatically:
See also
https://support.apple.com/en-us/HT201465. Which explains the many times I have had to re-apply the workaround described above.
I guess it is about time to look for and eliminate the root cause of all this.
I had seen that pesky message every now and then before, but today I finally got fed up with it, as I was pretty
sure that no application was running which had a legitimate business touching the external drive - at least
none of the applications I had started myself. So I set out on a quest to find the culprit.
The weapon of choice in such a case is
lsof:
sudo lsof | grep /Volumes/FOO
In my case, this produced a list of files opened by a process called
mds_store
which, apparently, is used
to produce the Spotlight search index:
mds_store 42059 root txt REG 1,6 3277 8832664
/Volumes/FOO/.Spotlight-V100/Store-V2/A75D8EF4-8412-4A13-8775-A52C20F05842/live.0.indexGroups
mds_store 42059 root txt REG 1,6 32768 8832663
/Volumes/FOO/.Spotlight-V100/Store-V2/A75D8EF4-8412-4A13-8775-A52C20F05842/live.0.indexIds
mds_store 42059 root txt REG 1,6 8192 8832666
/Volumes/FOO/.Spotlight-V100/Store-V2/A75D8EF4-8412-4A13-8775-A52C20F05842/live.0.indexTermIds
mds_store 42059 root txt REG 1,6 8192 8832668
/Volumes/FOO/.Spotlight-V100/Store-V2/A75D8EF4-8412-4A13-8775-A52C20F05842/live.0.indexPositionTable
mds_store 42059 root txt REG 1,6 8224 8832669
/Volumes/FOO/.Spotlight-V100/Store-V2/A75D8EF4-8412-4A13-8775-A52C20F05842/live.0.indexDirectory
mds_store 42059 root txt REG 1,6 1024 8832670
/Volumes/FOO/.Spotlight-V100/Store-V2/A75D8EF4-8412-4A13-8775-A52C20F05842/live.0.indexCompactDirectory
mds_store 42059 root txt REG 1,6 65536 8832671
/Volumes/FOO/.Spotlight-V100/Store-V2/A75D8EF4-8412-4A13-8775-A52C20F05842/live.0.indexArrays
mds_store 42059 root 5r DIR 1,6 2074 8832643
/Volumes/FOO/.Spotlight-V100/Store-V2/A75D8EF4-8412-4A13-8775-A52C20F05842
mds_store 42059 root 11r DIR 1,6 2074 8832643
/Volumes/FOO/.Spotlight-V100/Store-V2/A75D8EF4-8412-4A13-8775-A52C20F05842
mds_store 42059 root 47u REG 1,6 28 8832650
/Volumes/FOO/.Spotlight-V100/Store-V2/A75D8EF4-8412-4A13-8775-A52C20F05842/indexState
mds_store 42059 root 49u REG 1,6 118784 8832674
/Volumes/FOO/.Spotlight-V100/Store-V2/A75D8EF4-8412-4A13-8775-A52C20F05842/.store.db
backupd 42148 root 4w REG 1,6 1300 8832803
/Volumes/FOO/Backups.backupdb/Claus/2015-10-25-175619.inProgress/.Backup.467484979.422497.log
The fun part was that
I had explicitly configured Spotlight to ignore that particular external disk - and yet,
it was still trying to index it!
Turns out that I am not alone with this.
"Disable Spotlight on a FAT32 external drive"
provides the best summary I could find. Apparently, the type of file system on the external drive plays a role.
I was somewhat skeptical about this claim, but then, all my external drives had FAT32 file systems on them,
and so I followed the instructions in the article. I was still somewhat incredulous, as this seemed to be such a basic issue and the article is rather old.
But then, following the instructions indeed seemed to be successful, at least initially.
The magic ingredient in the sauce was to create a top-level file called
.metadata_never_index
on
the affected drive:
touch /Volumes/FOO/.metadata_never_index
I was too impatient to wait for existing instances of
mds_store
to finish their work,
and did not care about the consistency of the Spotlight index on the external drive anyway.
So I killed the
mds_store
process right away, then unplugged the drive and plugged it in again.
From there, indeed I had no issues anymore with ejecting the external disk. Hmmm...
Other related articles and discussions:
Previous month: Click
here.