Een duplicatenzoeker scant je Mac en biedt een aantal: 40 GB aan duplicaten, klaar om te verwijderen. Je verwijdert ze, opent Over deze Mac en de vrije ruimte is met 2 GB toegenomen.
Niets mislukte. De bestanden waren duplicaten. De schatting klopte nog steeds niet, omdat op APFS twee bestanden dezelfde bytes kunnen bevatten zonder dezelfde hoeveelheid opslagruimte.
De korte versie: een duplicaatscanner meet de bestandsgroottes. Vrije ruimte is afhankelijk van blokken. Op APFS komen deze twee cijfers niet meer overeen zodra er sprake is van klonen of harde links.
Snel antwoord
- Een kloon is een afzonderlijk bestand dat de blokken deelt met het origineel, dus als u één kant verwijdert, wordt alleen datgene vrijgemaakt wat is afgeweken.
- Een harde link is een tweede naam voor één inode, dus het verwijderen van één naam maakt helemaal niets vrij.
lsen Finder rapporteert de volledige grootte voor elke naam, wat precies is wat een op grootte gebaseerde scanner optelt.ls -lionthult harde links via het aantal links; klonen zijn onzichtbaar voor standaardtools.- De eerlijke meting is de vrije ruimte voor en na het verwijderen, meegenomen
df -h /System/Volumes/Data. - Lokale snapshots van Time Machine kunnen de blokken bestanden bevatten die u al hebt verwijderd, zodat de ruimte later terugkeert in plaats van onmiddellijk.
Wat een dubbele scanner eigenlijk meet
Elke duplicaatzoeker werkt in twee fasen. Het groepeert bestanden die kunnen matchen, meestal op grootte, en bevestigt vervolgens de match door inhoud te lezen of hashes te vergelijken. Beide fasen geven om de bytes in het bestand.
Opslag werkt een niveau lager. Een bestandsnaam wijst naar een inode, een inode wijst naar blokken, en de vrije ruimteteller volgt blokken. Op het moment dat twee namen dezelfde blokken delen, stopt de som van de bestandsgroottes met het beschrijven van de schijf.
Drie arrangementen die er identiek uitzien als een scanner
Een echte kopie. Twee bestanden, twee inodes, twee sets blokken. Verwijder een van beide en de schijf geeft de volledige grootte terug. Dit is waar iedereen van uitgaat dat ze ernaar kijken.
Een kloon. APFS maakt klonen wanneer u tijdens het rennen op Dupliceren drukt in Findercp -cen wanneer een app beltclonefile. De kloon is een echt bestand met een eigen inode, maar de dataaanwijzers verwijzen naar de originele blokken. Schrijven aan beide kanten is copy-on-write: gewijzigde blokken worden afzonderlijk geschreven, onaangeroerde blokken blijven gedeeld. Een kloon die nooit is bewerkt, kost bijna niets, en het verwijderen ervan levert bijna niets op.
Een harde link. Eén inode met twee directory-items. Er is helemaal geen tweede bestand, alleen een tweede naam. Als u één naam verwijdert, wordt het aantal links verlaagd en blijven de gegevens behouden. De schijf geeft ruimte terug als de achternaam verdwijnt.
Een op inhoud gebaseerde scanner ziet in alle drie de gevallen dezelfde bytes. Tenzij het de bestandssysteemlaag controleert, rapporteert het dezelfde besparing voor alle drie.
Waarom de schatting hoog is
De rapportagelaag is het probleem, en deze is ouder dan APFS. Finder toont de volledige grootte voor een kloon en voor elke harde link, en dat gebeurt ookls -l. Geen van beiden vertelt u dat de opslag wordt gedeeld. Een scanner die de bestandsgroottes bij elkaar optelt, neemt die fout direct over, en hoe meer uw workflow steunt op Finder-duplicaten en kloonbewuste kopieën, hoe groter de kloof wordt.
dugedraagt zich op een specifieke manier beter. Binnen een enkele run telt het een inode één keer, dus een map vol harde links rapporteert een realistisch totaal. Klonen worden nog steeds twee keer geteld, omdat klonen afzonderlijke inodes zijn.
Het resultaat is een schatting die behoorlijk fout kan zijn op een Mac die videoprojecten, geëxporteerde renders of afbeeldingen van virtuele machines bevat, wat precies de bestanden zijn die mensen klonen in plaats van kopiëren.
Controleer het voordat je het vertrouwt
Vind harde links. De tweede kolom vanls -li is het aantal links.
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
Alles hierboven1 betekent dat het verwijderen van deze naam niets vrijmaakt totdat de andere namen ook verdwijnen.
Meet de werkelijke besparing. Neem voor en na vrije ruimte op het datavolume.
df -h /System/Volumes/Data # before
# delete the duplicates
df -h /System/Volumes/Data # after
Het verschil is het enige getal dat uw schijf beschrijft. Alles dat vóór de verwijdering is afgedrukt, is een voorspelling.
Verwacht dat klonen onzichtbaar blijven. Er is geen ondersteunde opdracht die antwoordt “is dit bestand een kloon” op een standaard macOS-systeem. Dat is precies de reden waarom een schatting van de besparingen een betrouwbaarheidsniveau verdient in plaats van een betrouwbaar totaal.
Verwijderd en de spatie is nog steeds niet teruggekeerd
Twee mechanismen vertragen het resultaat, zelfs als de duplicaten echt waren.
Time Machine bewaart lokale momentopnamen op de opstartschijf, en een momentopname bevat de blokken met bestanden die bestonden toen deze werd gemaakt. Verwijder een duplicaat van 20 GB en deze blokken blijven toegewezen aan de momentopname totdat deze verouderd is. macOS rapporteert dit als verwijderbare ruimte en claimt deze automatisch wanneer de schijf krap wordt. Maak een lijst van wat er bestaat met:
tmutil listlocalsnapshots /
De Prullenbak is het eenvoudiger geval en betrapt mensen vaker. Bestanden in de prullenbak bezetten nog steeds blokken. Maak hem leeg en meet dan.
Hoe een eerlijk duplicaatrapport eruit ziet
StorageRadar beschouwt de schatting als een claim die de beoordeling moet overleven, dus de workflow is opgebouwd rond drie regels.
Bevestig de match byte voor byte. Kandidaten worden gegroepeerd op grootte, gescreend met een gedeeltelijke SHA-256 over drie delen, en pas daarna vergeleken met een volledige SHA-256. Inode, apparaat en grootte worden vóór elke actie opnieuw gevalideerd, zodat een bestand dat tijdens de scan is gewijzigd, niet kan worden verwijderd op basis van oud bewijsmateriaal.
Hecht onzekerheid aan het getal. De geschatte fysieke besparing is nulbaar, heeft een betrouwbaarheidswaarde en vermeldt de redenen waarom deze lager zou kunnen zijn, inclusief APFS-klonen en harde links. Een dubbele groep die blokken deelt, wordt gerapporteerd als een groep die minder vrijgeeft dan het lijkt.
Verlaat nooit een groep zonder een keeper. Pas stapblokken toe als uw selectie elke kopie zou verwijderen, en verwijderingen worden uitgevoerd via dry-run en preflight voordat er iets wordt verplaatst, met Prullenbak en een kort venster voor ongedaan maken als standaard.
Bestanden die alleen in de cloud staan, blijven ook onaangeroerd. Een dataloos bestand wordt niet gedownload om te worden gehasht tenzij u dit toestaat, omdat het materialiseren van 200 GB aan iCloud-archieven om ze te vergelijken geen opschoning is.
Waar echte duplicaten vandaan komen
Kloonbewuste tools verminderen stilletjes de hoeveelheid echte verspilling op een moderne Mac, dus het helpt om te kijken waar duplicaten nog steeds als volledige kopieën verschijnen:
- Downloads die tweemaal onder zijn aangekomen
file.zipenfile (1).zip. - Exporteert en rendert geschreven naast het project en vervolgens gekopieerd naar een bezorgmap.
- Camera- en telefoonimporten die tweemaal in verschillende bibliotheken terechtkwamen.
- Projectmappen gekopieerd naar een back-upmap op dezelfde schijf, wat een kopie is en geen back-up.
- Archieven tweemaal uitgepakt op verschillende bestemmingen.
Dat zijn gewone kopieën met hun eigen blokken, en als je de extra verwijdert, krijg je de volledige grootte terug.
De volgorde die werkt
- Scan en laat de tool duplicaten bevestigen op inhoud, niet op naam of grootte.
- Lees de besparingsschatting als een bereik en controleer of de tool gedeelde opslag toestaat.
- Neem vrije ruimte op met
df -h /System/Volumes/Data. - Verwijder via de prullenbak, bewaar één exemplaar per groep en maak de prullenbak leeg.
- Meet opnieuw en behandel het verschil als de waarheid.
Als de tweede meting je teleurstelt: de bestanden waren gedeelde opslag en geen verspilling. Er ging niets verloren en de schijf was al kleiner dan het rapport suggereerde.
Veelgestelde vragen
Waarom maakte het verwijderen van duplicaten bijna geen ruimte vrij op mijn Mac?
De kopieën waren waarschijnlijk klonen of harde links. Op APFS kunnen twee bestanden dezelfde opslagblokken delen, dus als u één ervan verwijdert, worden alleen de blokken vrijgegeven die verschillen. De scanner telde de volledige grootte van beide bestanden, omdat het bestandssysteem dat voor elke naam rapporteert.
Wat is een APFS-kloonbestand?
Een kloon is een afzonderlijk bestand met een eigen inode die naar dezelfde gegevens verwijst als het origineel. Schrijfbewerkingen naar beide kanten zijn copy-on-write, dus het paar kost één kopie opslagruimte totdat de inhoud uiteenloopt. Finder's opdracht Dupliceren en cp -c maken klonen.
Waarin verschilt een harde link van een kloon?
Een harde link is een andere naam voor dezelfde inode, dus er is één bestandsobject met twee directory-items. Als u één naam verwijdert, komt er nooit opslagruimte vrij terwijl een andere naam er nog steeds naar verwijst. ls -li toont het aantal links, en alles boven de 1 betekent dat er andere namen bestaan.
Ontdubbelt APFS mijn bestanden automatisch?
Nee. APFS deelt blokken alleen als er expliciet een kloon is gemaakt, door Finder, door cp -c, of door een app die clonefile aanroept. Twee bestanden die identieke bytes bevatten, nemen nog steeds twee kopieën van de opslagruimte in beslag.
Hoe meet ik hoeveel ruimte een opruimactie daadwerkelijk heeft vrijgemaakt?
Registreer de vrije ruimte voor en na het verwijderen met df -h /System/Volumes/Data en vergelijk. De schatting die door elke duplicaatzoeker wordt afgedrukt, is een voorspelling, en op APFS kan de voorspelling in beide richtingen verkeerd zijn.
Waarom keerde de vrije ruimte niet terug, zelfs niet nadat echte duplicaten waren verwijderd?
Lokale snapshots van Time Machine behouden de blokken van verwijderde bestanden totdat ze worden uitgedund, zodat de ruimte wordt weergegeven als opschoonbaar in plaats van vrij. Geef ze een lijst met tmutil listlocalsnapshots / en wacht expliciet op automatisch uitdunnen of vrije ruimte.