Back to Blog

Why Duplicate Finders Free Less Space Than They Promise

A duplicate finder offers 40 GB and your Mac frees 2. Learn how APFS clones and hard links inflate the estimate and how to measure real savings.

Published August 18, 2026 Author Vladimir Chemeris Read time 6 min read
DuplicatesAPFSMac Cleanup

A duplicate finder scans your Mac and offers a number: 40 GB of duplicates, ready to remove. You delete them, open About This Mac, and free space has moved by 2 GB.

Nothing failed. The files were duplicates. The estimate was still wrong, because on APFS two files can hold the same bytes without holding the same amount of storage.

The short version: a duplicate scanner measures file sizes. Free space depends on blocks. On APFS those two numbers stop matching as soon as clones or hard links are involved.

Quick answer

  • A clone is a separate file that shares its blocks with the original, so deleting one side frees only what has diverged.
  • A hard link is a second name for one inode, so deleting one name frees nothing at all.
  • ls and Finder report the full size for every name, which is exactly what a size-based scanner adds up.
  • ls -li exposes hard links through the link count; clones are invisible to standard tools.
  • The honest measurement is free space before and after the delete, taken with df -h /System/Volumes/Data.
  • Time Machine local snapshots can hold the blocks of files you already deleted, so the space returns later rather than immediately.
Diagram comparing a true copy, an APFS clone, and a hard link, showing that deleting the second file frees 4 GB, almost nothing, and nothing
The same pair of files in three arrangements. Only the first one gives the space back when you delete the second file.

What a duplicate scanner actually measures

Every duplicate finder works in two stages. It groups files that could match, usually by size, then it confirms the match by reading content or comparing hashes. Both stages care about the bytes inside the file.

Storage works one level down. A file name points at an inode, an inode points at blocks, and the free space counter tracks blocks. The moment two names share the same blocks, the sum of file sizes stops describing the disk.

Three arrangements that look identical to a scanner

A true copy. Two files, two inodes, two sets of blocks. Delete either one and the disk gives back the full size. This is what everyone assumes they are looking at.

A clone. APFS creates clones when you press Duplicate in Finder, when you run cp -c, and when an app calls clonefile. The clone is a real file with its own inode, but its data pointers reference the original blocks. Writes on either side are copy-on-write: changed blocks get written separately, untouched blocks stay shared. A clone that has never been edited costs almost nothing, and deleting it returns almost nothing.

A hard link. One inode with two directory entries. There is no second file at all, only a second name. Removing one name decrements the link count and leaves the data in place. The disk gives back space when the last name goes.

A content-based scanner sees the same bytes in all three cases. Unless it checks the file system layer, it reports the same saving for all three.

Why the estimate leans high

The reporting layer is the problem, and it is older than APFS. Finder shows the full size for a clone and for each hard link, and so does ls -l. Neither of them tells you that the storage is shared. A scanner that adds up file sizes inherits that error directly, and the more your workflow leans on Finder duplicates and clone-aware copies, the larger the gap gets.

du behaves better in one specific way. Within a single run it counts an inode once, so a folder full of hard links reports a realistic total. Clones still get counted twice, because clones are separate inodes.

The result is an estimate that can be wrong by an order of magnitude on a Mac that holds video projects, exported renders, or virtual machine images, which are exactly the files people clone instead of copying.

Check it before you trust it

Find hard links. The second column of ls -li is the link count.

ls -li ~/Movies/big.mov
# 12345678 -rw-r--r--  2 chama  staff  4294967296 Aug 18 09:12 big.mov
#                      ^ link count 2: another name points at the same data

Anything above 1 means deleting this name frees nothing until the other names go too.

Measure the real saving. Take free space before and after, on the data volume.

df -h /System/Volumes/Data      # before
# delete the duplicates
df -h /System/Volumes/Data      # after

The difference is the only number that describes your disk. Everything printed before the delete is a prediction.

Expect clones to stay invisible. There is no supported command that answers “is this file a clone” on a stock macOS system. That is precisely why a savings estimate deserves a confidence level instead of a confident total.

Deleted, and the space still has not returned

Two mechanisms delay the result even when the duplicates were real.

Time Machine keeps local snapshots on the startup disk, and a snapshot holds the blocks of files that existed when it was taken. Delete a 20 GB duplicate and those blocks stay allocated to the snapshot until it ages out. macOS reports that as purgeable space and reclaims it automatically when the disk gets tight. List what exists with:

tmutil listlocalsnapshots /

The Trash is the simpler case, and it catches people more often. Files in the Trash still occupy blocks. Empty it, then measure.

What an honest duplicate report looks like

StorageRadar treats the estimate as a claim that has to survive review, so the workflow is built around three rules.

Confirm the match byte for byte. Candidates are grouped by size, screened with a partial SHA-256 over three chunks, and only then compared with a full SHA-256. Inode, device, and size get re-validated before any action, so a file that changed during the scan cannot be removed on stale evidence.

Attach uncertainty to the number. The estimated physical saving is nullable, carries a confidence value, and lists the reasons it could be lower, including APFS clones and hard links. A duplicate group that shares blocks is reported as a group that will free less than it looks.

StorageRadar duplicate evidence view showing 318 groups, 38.1 GB logical reclaimable, 38.1 GB estimated physical, and a note that physical savings stay labeled as estimates
Two numbers instead of one: what the files add up to, and what the disk is expected to return. The screenshot uses StorageRadar's showcase dataset, not a real disk.

Never leave a group without a keeper. The apply step blocks if your selection would remove every copy, and removals run through dry-run and preflight before anything moves, with Trash and a short undo window as the default.

Cloud-only files stay untouched too. A dataless file is not downloaded to be hashed unless you allow it, because materializing 200 GB of iCloud archives to compare them is not a cleanup.

Where real duplicates come from

Clone-aware tools quietly reduce the amount of genuine waste on a modern Mac, so it helps to look where duplicates still appear as full copies:

  • Downloads that arrived twice under file.zip and file (1).zip.
  • Exports and renders written next to the project, then copied to a delivery folder.
  • Camera and phone imports that ran twice into different libraries.
  • Project folders copied to a backup directory on the same disk, which is a copy, not a backup.
  • Archives unpacked twice into different destinations.

Those are ordinary copies with their own blocks, and removing the extra one returns the full size.

The order that works

  1. Scan and let the tool confirm duplicates by content, not by name or size.
  2. Read the savings estimate as a range, and check whether the tool admits shared storage.
  3. Record free space with df -h /System/Volumes/Data.
  4. Delete through Trash, keep one copy per group, and empty the Trash.
  5. Measure again, and treat the difference as the truth.

If the second measurement disappoints you, the files were shared storage, not waste. Nothing was lost, and the disk was already smaller than the report suggested.

About the author

Vladimir Chemeris

Founder, StorageRadar

Vladimir Chemeris builds StorageRadar, a privacy-first macOS storage analysis app focused on review-first cleanup, developer storage, and before-and-after visibility.

Frequently asked questions

Why did deleting duplicates free almost no space on my Mac?

The copies were probably clones or hard links. On APFS two files can share the same storage blocks, so removing one of them releases only the blocks that differ. The scanner counted the full size of both files because that is what the file system reports for each name.

What is an APFS clone file?

A clone is a separate file with its own inode that points at the same data as the original. Writes to either side are copy-on-write, so the pair costs one copy of storage until the contents diverge. Finder's Duplicate command and cp -c create clones.

How is a hard link different from a clone?

A hard link is another name for the same inode, so there is one file object with two directory entries. Deleting one name never frees storage while another name still points at it. ls -li shows the link count, and anything above 1 means other names exist.

Does APFS deduplicate my files automatically?

No. APFS shares blocks only when a clone is created explicitly, by Finder, by cp -c, or by an app that calls clonefile. Two files that happen to hold identical bytes still occupy two copies of storage.

How do I measure how much space a cleanup actually freed?

Record free space before and after the delete with df -h /System/Volumes/Data and compare. The estimate printed by any duplicate finder is a prediction, and on APFS the prediction can be wrong in both directions.

Why did free space not return even after deleting real duplicates?

Time Machine local snapshots keep the blocks of deleted files until they are thinned, so the space shows up as purgeable rather than free. List them with tmutil listlocalsnapshots / and wait for automatic thinning or free space explicitly.

Sources & references

See the savings estimate with its uncertainty attached.

StorageRadar compares duplicate candidates byte for byte and marks the cases where APFS clones or hard links make the freed space smaller than the file size.