This is a story of a disadventure I had that made me cold sweat for several days, but finally ended well…
Usually, I shut down my MacBook only when I need to install or update a software that specifically requires a reboot. Standby mode never gave me any problem, and allows me to start using my computer few seconds after I pull it out of my bag, so is common for me to have more than a month of uptime. Last week, one of those frequent Flash Player update required me a reboot, so I did it, right after checking as usual the uptime (28 days and some hours at that time).
Few minutes after the reboot, I placed my MacBook in standby and I drove back home. Once arrived, I opened it up and, to my surprise, the system was completely freezed. Black screen, mouse visible and able to move around, but no way at all to log into it. There is no perfect system, not even Mac OS X, so I did a hard reset, and after a cold reboot I opened again my usual programs and I started using them.
Suddenly, after some time, it appeared, the infamous “spinning beachball of death“!!
For those mot using Mac OS X, usually it means problems. Not responding applications, disk queues filling up, the Mac equivalent of the Windows hourgrass. Since usually the reason is a crashing application, I tried to open the “Force Quit” menu to kill it, but I was not even able to go there, nor to start any other program or to cycle among those already opened, not even finder or dock.
Another hard reset, and from here my calvary began, for almost three days. Long story short, I did many hardware checks for cpu, fans, checked task manager for broken applications or daemons, removed old apps I was not using anymore, and so on. I even feared my beloved SSD was reaching the point where too much cells were ruined, but a check with DriveDX showed me it was still running well.
While I was running all these tests, crashes were more and more frequent, forcing me to reboot the system every time. One of the lines of this report however acted like an alarm bell in my head: “buggy/unknown firmware config”. A problem in my SSD drive maybe? Mi disk was 19 months old, and a quick search in Google about “Crucial M4 firmware bug” brought me to this article, saying this:
This bug would cause systems that reached a total of 5184 hours on their m4 SSD to become unstable. Once restarted systems would be stable until another hour had passed. The 0309 firmware update released today fixes this problem and allows users to update directly to the latest version regardless if the current firmware revision is 0001, 0002, or 0009.
My firmware was indeed 009, so among the buggy ones, even if my uptime counter was not as described in the article. My disk had 5788 hours of uptime, far more than 5184 stated in the bug report. But thinking about it for a while, seemed like it was my case anyway: if the uptime value was going to be updated at every boot cycle, my previous value was lower of those 28 days of uptime. So I needed to subtract about 672 hours, giving me my previous uptime value of about 5116 hours…
Mistery solved: at the first reboot, the uptime was increased with other 672 hours, moving the uptime value above the 5184 threshold. A couple of tests using the shell and the “watch uptime” command gave me the confirmation, the system freezed every time exactly after 1 hour of uptime, as explained in the bug report. After upgrading the SSD firmware (with a complete Time Machine backup first!), I was able to go beyond the 1 hour limit:
During these days lived one hour at time, I learned so much about SSD, and how they are far from beeing simple disks, and how they are instead really similar to micro computers. The firmware can be upgraded, it has bugs, and inside an SSD many activities are executed just like OS daemons: Wear Leveling, Garbage Collection and many others. By reading the release notes of those firmware versions I see clearly the improvements described, in terms of services, performances, right as in a proper operating system. Nothing comparable to old spinning disks, whose firmware is only an interface to interact with their controllers.