SSDs are faster than hard drives. This is not news. I still had my Apple Photos library, 127,671 photos and videos and about 2.5 TB of it, sitting on a 5400rpm LaCie Rugged, because the drive was big and cheap and I stopped thinking about it the day I plugged it in.

Then a SQLite error forced a full library rebuild, and I got to watch what that choice cost.

66 Hours to Rebuild

The rebuild took 66 hours. While it ground away I watched what the machine was doing, and the answer was almost nothing. The drive sat pinned at 90 to 150 IOPS, moving 1.7 to 2.1 MB/s in 14 to 16 KB chunks. photolibraryd was at 0.0% CPU, cloudphotod at 0.4%, and the network moved about a megabyte a minute. Everything in the machine was idle except one read head, seeking back and forth.

That 90 to 150 range is the random-IOPS ceiling of a 5400rpm 2.5” drive. Photos wasn’t asking for throughput. It was asking for tiny reads scattered across a database and 166,701 original files, and a spinning drive answers each one with a physical seek.

It got worse after the rebuild finished. iCloud sync verification crawled at about 12,500 records a day, then decayed to 7,500. Three days in, 79,465 of 127,671 assets were still unverified, on track for another week. In those three days it downloaded zero new photos. A month of new pictures sat in iCloud while my library stayed frozen on July 27th.

The Same Photos on an SSD

I bought a SanDisk 8TB Extreme Portable, $839.99 before tax, and started a fresh library with a full iCloud download. Same Mac, same photos: 2,263 IOPS at 25 to 48 MB/s. It registered 43,268 assets in about 25 minutes, roughly 1,700 a minute.

The disk stopped being the problem entirely. photolibraryd went to 83% CPU, cloudphotod to 55%, load average 12 on 8 cores, and the network ran well under what my connection can do. I measured a 15x IOPS gap, and that is a floor rather than a ceiling, because the SSD never became the limiting factor at all.

Small Reads, Not Big Ones

Photo library work is small random I/O, not sequential streaming. The 14 to 16 KB average transfer size is what that looks like in practice, and it means the big sequential throughput number printed on the box has almost nothing to do with this workload. IOPS is the axis that matters.

If you’re not sure what your library is sitting on, ioreg -c IOBlockStorageDevice reports "Medium Type" = "Solid State" for SSDs and leaves the line out for spinning drives. That’s how I confirmed the LaCie was a hard drive.

One note on buying: 2026’s NAND shortage has made storage expensive, and it flipped the old advice about pairing a bare NVMe drive with an enclosure to save money. Eight terabytes cost me $840, about $105 a terabyte. Price the prebuilt portable first, because right now it usually wins.

– John