2026-08-08 The Dead Mounts Were Never Mounted

What I set out to do

Clear two stale entries from ~/Library/CloudStorage: a timestamped GoogleDrive-amanschhina@gmail.com (2025-01-18 3:24 PM) sitting next to the live Google Drive root, and a suspected-stale iCloudDrive-iCloudDrive (2024-12-19 5:04 PM). The working theory was dead mount points: they listed in the directory but returned ENOENT on stat, and they had survived at least one reboot. The goal was to remove them without disturbing active Drive sync.

What I actually did

The theory was wrong twice over, and both corrections came from looking at the live system rather than reasoning about the symptom.

They were never mounts. mount listed no cloud filesystems at all, and all three entries reported dev=16777233 — the same device as /System/Volumes/Data. Google Drive and iCloud Drive both use macOS File Provider, a userspace extension backed by ordinary directories. There was nothing to unmount, which is exactly why rebooting never helped: a reboot clears mount tables, not directories.

The ENOENT was a single byte. Hexdumping the entry names showed e2 80 af before PM — U+202F NARROW NO-BREAK SPACE, which is how macOS formats times. scandir on the parent returns the true bytes so the entry lists fine, but any path retyped or copy-pasted with a normal U+0020 addresses a name that doesn’t exist. That one byte manufactured the entire dead-mount appearance.

fileproviderctl dump settled orphanhood properly. com.google.drivefs.fpext had exactly one registered domain (the active root), and iCloud Drive is rooted at ~/Library/Mobile Documents, not CloudStorage. Neither timestamped directory had a domain. When a File Provider domain is torn down, macOS renames its root with a timestamp to preserve unreclaimed data, and nothing ever garbage-collects the result. Google’s own .drive_fs_ignore_preserved_domain marker inside the stale Drive folder was DriveFS explicitly disowning it.

Contents diverged sharply. The stale Drive folder was 16K with zero real files — two .DS_Store, the marker, and an empty directory chain. The stale iCloud folder was 141MB across 1742 files, nearly all duplicated in the live root, except 9 Notability notes (~4.2MB) that existed nowhere else on this Mac (Notability isn’t even installed here). Flagged them; chose to delete anyway since Trash keeps them recoverable.

Removal: selected both targets by glob so the timestamp was never retyped, asserted the active root was not in the target list, then moved both to Trash via Finder osascript. Quitting Google Drive turned out to be unnecessary — neither target belonged to a live domain, so quitting would have been churn without reducing risk. Verified after: My Drive still 24 top-level items, read OK, write-and-cleanup OK, DriveFS pids alive, domain still registered.

What was striking

Mid-investigation I ran a find ... 2>/dev/null using a hand-typed path and got back 0 files for every container. I nearly reported 141MB of real data as empty. The suppressed stderr swallowed the ENOENT and handed me a confident, wrong zero — the same trap that produced the user’s original symptom, reproduced by me one layer down. A null result needed a control, and the control was simply resolving the path by glob instead of by typing. Compare 2026-07-13 The Intel Audit That Could Not See Shims and 2026-07-14 Cache Audit - mtime Is Not Usage: the recurring failure is trusting a measurement whose negative case is indistinguishable from a broken query.

Smaller sharp edge: ls -1d *.nbn silently returned nothing because a note was named -AWS Certified Cloud Practitioner Course - 4.nbn and the leading hyphen parsed as flags. find -maxdepth 1 was the fix.

Also worth noting the diagnosis inverted the original framing entirely — “quit Drive first” was the user’s stated precaution, and the correct answer was that quitting was unnecessary. Knowing why a safety step is unneeded is more useful than performing it defensively.

Follow-up: the two-folder Finder root is not a symptom

Asked afterwards whether the cleanup would fix Finder showing My Drive and Other computers when opening the Drive mount. It does not, and there is nothing to fix — that is the normal Google Drive File Provider root layout. The post-cleanup verification listing exactly those two entries was the healthy result, not residue.

Worth recording what the Other computers node actually is here. This Mac is atlas (Mac16,5); the node’s single child is My MacBook Pro, an older machine. It is empty locally (one .DS_Store) and empty in the cloud — the Drive API shows two backup folders, My MacBook Pro (2019) and My MacBook Pro (1) (2020), both with zero children. Drive’s root_preference_sqlite.db roots table is empty, so atlas backs up no folders to Drive at all and contributes nothing to it. Purely vestigial.

Applied the null-result discipline again, deliberately this time: the empty child listings only meant something after running parentId = 'root' as a control and confirming the query returns real files. Same lesson as the find zero earlier in the session, caught before it could mislead rather than after.

Removing it means deleting the two empty backup entries from drive.google.com → Computers, which is a cloud-side deletion I can’t perform (the available Drive tools are read-only). The lower-risk alternative is just a Finder sidebar favorite pointing at My Drive.

Deleting the cloud nodes did not clear the local one, and I mis-read why

Both backup folders were deleted from the Computers section. The local Other computers/My MacBook Pro survived a full Drive quit-and-relaunch plus two minutes of settling.

I chased the wrong cause first. The .DS_Store inside it carried no com.google.drivefs.item-id while the folder did, so I reasoned it was a local-only file pinning a directory Drive couldn’t reclaim. Removing it emptied the directory and changed nothing. rmdir returned EPERM since the File Provider owns the node. Hypothesis falsified; stopped rather than tuning variations of it.

The actual cause came from Drive’s own local metadata, found by grepping the deleted folder ID out of metadata_sqlite_db (6 hits) and querying the items row: trashed = 1, is_tombstone = 0. The folder is in Google Drive Trash, and a trashed-but-not-tombstoned entry still gets materialized by the File Provider.

The sharper lesson is that I had already concluded the opposite from get_file_metadata returning “Requested entity was not found”, and stated it to the user as evidence the item wasn’t in Trash. That call just excludes trashed items. I took a null result as a positive finding in the same session where I had twice flagged that a null needs a control — once on the find zero, once deliberately on the Drive parentId query. Knowing the rule and applying it are apparently different skills, and the failure mode is that a null feels like information when it arrives as a clean, confident-looking API response rather than as suspicious silence.

Fix is therefore lighter than the cache reset I was about to recommend: permanently delete those entries from Drive Trash, or wait out the 30-day auto-purge. Cosmetic either way.

Emptying Drive Trash confirmed the diagnosis: the My MacBook Pro folder vanished from the mount and its items row purged. Only the empty Other computers container was left, which Drive synthesizes for the domain root and re-evaluates only on enumeration. A quit-and-relaunch cleared it instantly (GONE after 0s), exactly as predicted once the trashed row no longer existed. The same restart had failed earlier for a legible reason: the row was still there to hang on to. Drive root is now My Drive alone, with read, write, domain registration, and the 24-item baseline all re-verified.

One more measurement trap surfaced at the end. All the sqlite reads had used file:...?immutable=1 to avoid the live lock, but immutable=1 ignores the -wal file, so every one of them was a potentially stale snapshot. Re-reading properly meant copying db, db-wal, and db-shm together to scratch and querying that. The purge only showed up in the WAL-inclusive read. Re-verified the earlier roots-is-empty claim the same way, and it held, but it had been asserted on a read that could not have shown a recent write. Third variant of the same lesson in one session: the query has to be able to see the thing before its silence means anything.