Средство поиска дубликатов сканирует ваш Mac и предлагает следующее количество: 40 ГБ дубликатов, готовых к удалению. Удаляешь их, открываешь «Об этом Mac», и свободное место переместилось на 2 ГБ.
Сбоя не было. Файлы действительно были дубликатами. Оценка по-прежнему была неверной, поскольку в APFS два файла могут содержать одни и те же байты, не занимая одинакового объема памяти.
Краткая версия: сканер дубликатов измеряет размеры файлов. Свободное пространство зависит от блоков. В APFS эти два числа перестают совпадать, как только задействуются клоны или жесткие ссылки.
Быстрый ответ
- Клон — это отдельный файл, блоки которого совпадают с оригиналом, поэтому удаление одной стороны освобождает только то, что разошлось.
- Жесткая ссылка — это второе имя для одного индексного дескриптора, поэтому удаление одного имени вообще ничего не освобождает.
lsи Finder сообщает полный размер каждого имени, и это именно то, что суммирует сканер на основе размера.ls -liвыявляет жесткие ссылки посредством подсчета ссылок; клоны невидимы для стандартных инструментов.- Честное измерение — это свободное пространство до и после удаления, полученное с помощью
df -h /System/Volumes/Data. - Локальные снимки Time Machine могут содержать блоки файлов, которые вы уже удалили, поэтому пространство возвращается позже, а не сразу.
Что на самом деле измеряет сканер дубликатов
Каждый поисковик дубликатов работает в два этапа. Он группирует файлы, которые могут совпадать, обычно по размеру, а затем подтверждает совпадение, считывая содержимое или сравнивая хеши. Оба этапа заботятся о байтах внутри файла.
Хранилище работает на уровень ниже. Имя файла указывает на индексный дескриптор, индексный дескриптор указывает на блоки, а счетчик свободного места отслеживает блоки. В тот момент, когда два имени используют одни и те же блоки, сумма размеров файлов перестает описывать диск.
Три устройства, идентичные сканеру
Настоящая копия. Два файла, два индексных дескриптора, два набора блоков. Удалите любой из них, и диск вернет полный размер. Это то, на что все предполагают, что смотрят.
Клон. APFS создает клоны, когда вы нажимаете «Дублировать» в Finder, когда вы запускаетеcp -cи когда приложение вызываетclonefile. Клон представляет собой реальный файл с собственным индексным дескриптором, но его указатели на данные ссылаются на исходные блоки. Запись с обеих сторон осуществляется по принципу копирования при записи: измененные блоки записываются отдельно, нетронутые блоки остаются общими. Клон, который никогда не редактировался, почти ничего не стоит, и его удаление почти ничего не возвращает.
Жесткая ссылка. Один индексный дескриптор с двумя записями каталога. Второго файла вообще нет, только второе имя. Удаление одного имени уменьшает количество ссылок и оставляет данные на месте. Диск освобождает место, когда уходит фамилия.
Сканер на основе контента видит одни и те же байты во всех трех случаях. Если он не проверит уровень файловой системы, он сообщит об одинаковом сохранении для всех трех.
Почему оценка завышена
Проблема заключается в уровне отчетов, и он старше, чем APFS. Finder показывает полный размер клона и каждой жесткой ссылки, а такжеls -l. Ни один из них не сообщает вам, что хранилище является общим. Сканер, который суммирует размеры файлов, напрямую наследует эту ошибку, и чем больше ваш рабочий процесс опирается на дубликаты Finder и копии, поддерживающие клонирование, тем больше становится разрыв.
duведет себя лучше в одном конкретном направлении. За один запуск он подсчитывает индексный дескриптор один раз, поэтому папка, полная жестких ссылок, сообщает реалистичную сумму. Клоны по-прежнему учитываются дважды, поскольку клоны представляют собой отдельные индексные дескрипторы.
В результате получается оценка, которая может быть на порядок неверной на Mac, где хранятся видеопроекты, экспортированные рендеры или изображения виртуальных машин, которые являются именно теми файлами, которые люди клонируют, а не копируют.
Проверьте это, прежде чем доверять этому
Найти жесткие ссылки. Второй столбецls -li это количество ссылок.
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
Все, что выше1 означает, что удаление этого имени ничего не освобождает, пока не исчезнут и другие имена.
Оцените реальную экономию. Возьмите свободное место до и после тома данных.
df -h /System/Volumes/Data # before
# delete the duplicates
df -h /System/Volumes/Data # after
Разница заключается в единственном числе, описывающем ваш диск. Все, что напечатано до удаления, является прогнозом.
Ожидайте, что клоны останутся невидимыми. В стандартной системе macOS не поддерживается команда, которая отвечает на вопрос «является ли этот файл клоном». Именно поэтому оценка экономии заслуживает уровня достоверности, а не достоверного итога.
Удалил, а место до сих пор не вернулось
Два механизма задерживают результат, даже если дубликаты были реальными.
Time Machine хранит локальные снимки на загрузочном диске, а снимок содержит блоки файлов, которые существовали на момент его создания. Удалите дубликат размером 20 ГБ, и эти блоки останутся выделенными для снимка, пока он не устареет. macOS сообщает об этом как о очищаемом пространстве и автоматически освобождает его, когда на диске становится мало места. Перечислите, что существует с:
tmutil listlocalsnapshots /
Trash — более простой случай, и он чаще ловит людей. Файлы в Корзине по-прежнему занимают блоки. Опорожните его, затем измерьте.
Как выглядит честный дубликат отчета
StorageRadar рассматривает оценку как заявку, которая должна пройти проверку, поэтому рабочий процесс строится на основе трех правил.
Подтвердите соответствие байта за байтом. Кандидаты группируются по размеру, проверяются с помощью частичного SHA-256 по трем фрагментам и только затем сравниваются с полным SHA-256. Индексный дескриптор, устройство и размер проверяются повторно перед любым действием, поэтому файл, измененный во время сканирования, не может быть удален из-за устаревших данных.
Добавьте неопределенность к числу. Предполагаемая физическая экономия обнуляется, имеет доверительное значение и перечисляет причины, по которым она может быть ниже, включая клоны APFS и жесткие ссылки. Дублирующаяся группа с общими блоками считается группой, которая освободит меньше, чем кажется.
Никогда не оставляйте группу без хранителя. Шаг «Применить» блокирует, если по вашему выбору будут удалены все копии, а удаление выполняется через пробный прогон и предварительную проверку, прежде чем что-либо будет перемещено, с «Корзиной» и коротким окном отмены по умолчанию.
Файлы, хранящиеся только в облаке, также остаются нетронутыми. Файл без данных не загружается для хеширования, если вы не разрешите это, поскольку материализация 200 ГБ архивов iCloud для их сравнения не является очисткой.
Откуда берутся настоящие дубликаты
Инструменты, поддерживающие клонирование, незаметно сокращают количество подлинных отходов на современном Mac, поэтому полезно посмотреть, где дубликаты все ещё появляются в виде полных копий:
- Загрузки, пришедшие дважды под
file.zipиfile (1).zip. - Экспорт и рендеринг записываются рядом с проектом, а затем копируются в папку доставки. — Импорт камер и телефонов дважды выполнялся в разные библиотеки.
- Папки проекта копируются в резервный каталог на том же диске, который является копией, а не резервной копией.
- Архивы распакованы дважды в разные места.
Это обычные копии со своими блоками, и удаление лишнего возвращает полный размер.
Порядок, который работает
- Отсканируйте и позвольте инструменту подтвердить дубликаты по содержимому, а не по имени или размеру.
- Прочтите оценку экономии в виде диапазона и проверьте, поддерживает ли инструмент общее хранилище.
- Запишите свободное место с помощью
df -h /System/Volumes/Data. - Удалите через корзину, оставьте по одной копии на группу и очистите корзину.
- Измерьте ещё раз и примите разницу за истину.
Если второе измерение вас разочаровало, файлы были общим хранилищем, а не мусором. Ничего не потерялось, а диск уже был меньше, чем предполагалось в отчете.
FAQ
Почему удаление дубликатов почти не освободило места на моем Mac?
Копии, вероятно, были клонами или жесткими ссылками. В APFS два файла могут использовать одни и те же блоки хранилища, поэтому при удалении одного из них освобождаются только отличающиеся блоки. Сканер подсчитал полный размер обоих файлов, потому что именно это сообщает файловая система для каждого имени.
Что такое файл клона APFS?
Клон — это отдельный файл с собственным индексным дескриптором, указывающим на те же данные, что и оригинал. Запись в обе стороны осуществляется по принципу копирования при записи, поэтому пара стоит одну копию хранилища, пока содержимое не разойдется. Команда Finder Duulate и cp -c создают клоны.
Чем жесткая ссылка отличается от клона?
Жесткая ссылка — это другое имя одного и того же индексного дескриптора, поэтому существует один файловый объект с двумя записями каталога. Удаление одного имени никогда не освобождает память, пока на него все ещё указывает другое имя. ls -li показывает количество ссылок, а значение выше 1 означает, что существуют другие имена.
Выполняет ли APFS автоматическую дедупликацию моих файлов?
Нет. APFS совместно использует блоки только в том случае, если клон создается явно с помощью Finder, cp -c или приложения, вызывающего clonefile. Два файла, которые содержат одинаковые байты, по-прежнему занимают две копии памяти.
Как измерить, сколько места фактически освободилось в результате очистки?
Запишите свободное пространство до и после удаления с помощью df -h /System/Volumes/Data и сравните. Оценка, выдаваемая любым средством поиска дубликатов, является прогнозом, а в APFS прогноз может быть неверным в обоих направлениях.
Почему свободное место не вернулось даже после удаления реальных дубликатов?
Локальные снимки Time Machine сохраняют блоки удаленных файлов до тех пор, пока они не будут уменьшены, поэтому пространство отображается как доступное для очистки, а не как свободное. Перечислите их с помощью tmutil listlocalsnapshots / и дождитесь автоматического прореживания или явного освобождения места.