Живешь себе живешь, репу не чешешь, в ус не дуешь. И тут внезапно тебе нужно переезжать с обветшавшего iPhone 6 на новенький iPhone X. А поскольку вся твоя жизнь за минувшие семь лет хранится в фоточках и видосиках старого смартфона, терять это добро тебе очень не хочется. И вот ты бэкапишь свое хозяйство через iTunes на Mac, пытаешься переехать на новую «балалайку» и вдруг оказывается, что места для бэкапа нового телефона на жестком диске твоего компьютера уже нет. Ты начинаешь судорожно расчищать авгиевы конюшни дисковое пространство, но результата «нема». Причем удаление «левых файлов» и очистка корзины ни к чему не приводит. Вот такой триллер разыгрался недавно с вице-президентом Parallels Николаем Добровольским. Под катом детективная история про обнаружение им «черной дыры» в macOS High Sierra, поиски истины и счастливый конец, которому могли бы позавидовать главные герои кинофильма «Титаник».
Дальше в красках и картинках со слов главного героя последует повествование про навалившуюся хворь и методы чудесного исцеления.
В поисках «черной дыры»
Решив забэкапить содержимое своего нового iPhone X через iTunes мне одномоментно понадобилось на компьютере 70ГБ свободного дискового пространства. Недолго думая, я удалил большинство ненужных файлов. Фильмы, картинки и прочие шедевры современного искусства. Удалял я это долго и мучительно. В итоге вместо требуемых 70 гигов расчистилось больше 100ГБ. Почистил корзину. И какого же было мое удивление, когда при последующих попытках забэкапиться, система показала мне фигуру из трех пальцев. «Нет места, мальчик, дуй в сад, кури бамбук». Все последующие попытки освободить дополнительное дисковое пространство и забэкапиться ни к чему не привели. С одной стороны места более чем достаточно, а с другой стороны, его нет. Чудеса. «Видишь суслика? Нет? А он есть!». Классика.
Обошел всех фанатов Apple, облазил российские и заморские форумы. На первом этапе никто ясности не добавил. Каких-только версий не было. От экзотических: «Это неправильные пчелы, они делают неправильный мед» до «Подожди само отпадет». Время шло. Болячка не исчезала. На исходе недели на одном из американских форумов удалось прочесть, что всему виной APFS (Apple Files System), материализовавшаяся недавно на macOS High Sierra и реализация снапшотов Time Machine на ней. Сегодня это добро установлено на всех новых ноутбуках по умолчанию. Также при обновлениях тебе могут ее накатить.
Так вот эта самая «умная загогулина» при взаимодействии с Time Machine работает мягко говоря немного по-другому. Что было раньше? Раньше была очень простая схема. Есть на маке какие-то лишние файлы, ты их удаляешь, они попадают в корзину. Ты чистишь корзину, файлы полностью удаляются, держи свободное место.
Теперь же с включенной Time Machine и бэкапом на внешний диск или на Time Capsule в macOS High Sierra и APFS она начинает «чудить». Помимо того, что Time Machine начинает бэкапить данные и оставляет их на внешнем диске, она также делает на жестком диске некие локальные бэкапы (Local Snapshots), в которых хранится история изменений за последнее время. Чтобы ты теоретически мог в будущем порыскать в дебрях Time Machine, даже если у тебя этого внешнего диска с бэкапами нет. Т.е. она не только сохраняет информацию на внешний диск, но и где-то у себя резервирует место и пытается тебе показать, что же у тебя там было в недавнем прошлом. Поэтому получается ситуация, при которой на жестком диске вашего компьютера образуется «черная дыра». Таким образом, где-то в глубинах вашего компьютера резервируется дополнительное дисковое пространство. Причем его объемы и местонахождение в здравом уме и трезвой памяти определить невозможно. Удалить и почистить это хозяйство по-простому у вас тоже вряд ли получится.
Возможно моя ситуация покажется вам нетипичной. У меня Time Machine бэкапится на внешний диск. Также у меня macOS High Sierra и APFS. Но, как говорится, из песни слов не выкинешь.
Так вот методом «научного втыка» выяснилось, что существуют определенные команды, позволяющие управлять этими самыми почти мистическими Local Snapshots в macOS High Sierra. Кстати, несмотря на то, что везде пишут о том, что, если у тебя остается десять процентов свободного пространства, APFS самостоятельно их удаляет, по факту, пока вы ручками их не почистите, ничего не произойдет. Они теоретически когда-то удаляются, но прогнозов и системности в этом богоугодном процессе не обнаружено.
Возникает резонный вопрос, а чего бы тебе дорогой друг найденные Local Snapshots сразу не удалить? И огород не городить? Все просто. К ним невозможно добраться, поскольку, они живут в некой зарезервированной области, куда никто не имеет прямого доступа. «Черная дыра», не иначе. Через Finder ты туда попасть не можешь. Эта некая скрытая область, которую даже DaisyDisk показывает, как системную область. Она не знает, как туда попасть, но она знает, что она существует.
«Ловкость рук и никакого мошенства» (с).
Предлагаю перейти к сеансу магии с последующим ее разоблачением. Как говорится лучше один раз увидеть, чем сто раз услышать.
Итак, у вас есть компьютер с жестким диском на 128ГБ. Под капотом macOS High Sierra c APFS.
Для того чтобы воссоздать ситуацию нехватки дискового пространства возьмем Disk Image и создадим три крупных файла по 30 Гб каждый.
Как мы видим наши файлы заняли больше 103ГБ. Полная коробочка. Дальше мы запускаем Time Machine.
На этом этапе мы понимаем, что для последующего бэкапа нам необходимо освободить место на диске. Мы удаляем ненужные файлы. В данном случае удалим один из трех образов диска на 30ГБ.
Смело удаляем ненужное, ведь нам же нужно свободное место. Затем без сожалений чистим корзину.
И вот у вас теоретически освободилось 30ГБ свободного места. Давайте же его заполним новым образом диска соответствующего объема.
И, о чудо! Места нет.
Причем в «Документах» и «Корзине» никаких упоминаний о «файле-призраке» нет.
Запускаем DaisyDisk и видим, что на нашем жестком диске образовалось «Скрытое пространство» («Черная дыра»). Размер у этой красоты схож по объемам с файлами, которые мы удаляли ранее. Повторюсь, понять, что там и как-то это удалить без танцев с бубнами проблематично.
И вот здесь к вам на помощь приходит русская смекалка, несколько мантр к компьютерной матери и вот такой вот приятный скрипт:
tmutil listlocalsnapshotdates / | while read line;
do
tmutil deletelocalsnapshots $line
done
Он показывает список Local Snapshots и удаляет их, что можно также сделать напрямую руками в Terminal:
Для чистоты эксперимента создаем новый образ диска на 30ГБ. Понимаем, что все колосится!
The End!
З.Ы. Пишите, если у вас возникали аналогичные проблемы или еще более странные загогулины. Интересно будет их обсудить в комментариях.
Автор: Дмитрий Смиркин