APFS: снапшоты, клоны, контейнеры и шифрование

Рейтинг: 45.3% · 9 голосов
Подробный курс по macOS для разработчиков и админов: архитектура и Apple Silicon, терминал и zsh, Homebrew и пакеты, launchd и автоматизация, APFS и Time Machine, безопасность (SIP, Gatekeeper, TCC, FileVault), сеть, логи и диагностика, MDM и DDM, контейнеры и виртуализация, восстановление. По официальной документации Apple, актуально на 2026 (macOS 26 Tahoe).
Ответить
Аватара пользователя
Artem_MacAdmin
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

APFS: снапшоты, клоны, контейнеры и шифрование

Сообщение Artem_MacAdmin »

Оглавление курса (47)
  1. Что такое macOS: Unix под капотом и место в 2026
  2. Архитектура macOS: XNU, тома и Signed System Volume
  3. Apple Silicon: ARM, Rosetta 2 и отличия от Intel
  4. Установка, обновление и восстановление macOS
  5. Finder, рабочий стол и продуктивность
  6. Системные настройки и их управление из CLI (defaults)
  7. Пользователи и группы: учётные записи и управление
  8. Терминал и zsh: командная строка macOS
  9. CLI на macOS: BSD-команды и отличия от Linux
  10. Настройка zsh: .zshrc, prompt, плагины
  11. Файловая система и права: POSIX, ACL, атрибуты, флаги
  12. Homebrew: пакетный менеджер для macOS
  13. Homebrew глубже: tap, Brewfile, services, обслуживание
  14. Другие пакеты: MacPorts, mas, Nix и App Store
  15. Установка приложений: .app, .dmg, .pkg и Gatekeeper
  16. Управление приложениями и их данные
  17. launchd и launchctl: система запуска macOS
  18. Свои службы и периодические задачи на launchd
  19. Автоматизация: Shortcuts, AppleScript и osascript
  20. Конфигурация как код: defaults, plist и профили
  21. APFS: снапшоты, клоны, контейнеры и шифрование (вы здесь)
  22. Управление дисками: diskutil, образы и форматирование
  23. Time Machine и резервное копирование
  24. Внешние диски, форматы и сетевые тома
  25. Модель безопасности macOS: SIP и целостность системы
  26. Gatekeeper, нотаризация и защита от вредоносов
  27. Приватность и TCC: разрешения на доступ
  28. FileVault: полнодисковое шифрование
  29. Связка ключей и управление секретами
  30. Сетевой экран и защита сети
  31. Сеть в macOS: настройка и инструменты
  32. Диагностика сети на Mac
  33. Общий доступ: SSH, экран, файлы, удалённое управление
  34. Процессы и ресурсы: мониторинг производительности
  35. Логи macOS: unified logging и диагностика
  36. Производительность и энергия: powermetrics, диагностика
  37. Энергия, сон и обслуживание системы
  38. Профили конфигурации и основы MDM
  39. Управление парком Mac: MDM, DDM и zero-touch (2026)
  40. Среда разработчика на Mac: Xcode CLT, git, версии
  41. Контейнеры на Mac: Docker Desktop, OrbStack, Apple container
  42. Виртуализация: Virtualization.framework, UTM, Linux и Windows
  43. Режимы загрузки и восстановление (Apple Silicon)
  44. Сброс, NVRAM, Safe Mode и сброс настроек
  45. Траблшутинг macOS: дерево решений по симптомам
  46. Место на диске и обслуживание системы
  47. Сквозной проект: настройка Mac как у профи + куда расти
Боль, с которой ты столкнёшься

Открываешь "Об этом Mac -> Хранилище", видишь 200 ГБ свободно. Запускаешь установку обновления на 14 ГБ - и получаешь "недостаточно места". Или копируешь 8-гиговый видеофайл, а место на диске не уменьшается ни на байт. Или удаляешь 50 ГБ хлама, а Finder упрямо показывает "очищаемое" место и реально его не отдаёт. Если ты до сих пор думаешь о диске Mac как о наборе фиксированных разделов с папками - ты будешь биться головой об стену.

Всё это - не баги. Это нормальное поведение APFS, файловой системы mac, которая работает по другим правилам, чем привычный HFS+ или ext4. APFS (Apple File System) появилась в High Sierra (2017) и с тех пор - стандарт для всех Mac, включая Apple Silicon на macOS 26 Tahoe. Чтобы перестать гадать "куда делось место" и начать осознанно управлять томами, снапшотами и шифрованием, нужно понять механику. Разберём её до винтика: контейнеры и тома (space sharing), снапшоты (copy-on-write), клоны файлов, нативное шифрование FileVault и инструмент diskutil apfs.

Изображение

Контейнеры и тома: место общее, а не нарезанное

Главный сдвиг в голове. В старом мире у тебя был раздел (partition) фиксированного размера: отрезал 100 ГБ под систему - значит 100 ГБ, ни байтом больше. В APFS появился промежуточный слой - контейнер (APFS Container). Физический диск делится на один или несколько контейнеров (в терминах GPT это по-прежнему разделы, тип Apple_APFS). А вот внутри контейнера живут тома (Volumes), и вот они-то размер не фиксируют - они делят общий пул свободного места контейнера. Это и называется space sharing.

Посмотрим вживую. Команда diskutil apfs list показывает иерархию контейнеров и томов:

Код: Выделить всё

$ diskutil apfs list
+-- Container disk3 ABCDEF01-2345-6789-ABCD-EF0123456789
    |   ====================================================
    |   APFS Container Reference:     disk3
    |   Size (Capacity Ceiling):      494384795648 B (494.4 GB)
    |   Capacity In Use By Volumes:   213045821440 B (213.0 GB) (43.1% used)
    |   Capacity Not Allocated:       281338974208 B (281.3 GB) (56.9% free)
    |
    +-> Volume disk3s1 11111111-...  (Macintosh HD, System, Sealed)
    +-> Volume disk3s2 22222222-...  (Preboot)
    +-> Volume disk3s3 33333333-...  (Recovery)
    +-> Volume disk3s5 44444444-...  (Macintosh HD - Data, Data)
    +-> Volume disk3s6 55555555-...  (VM)
Разбор. Контейнер disk3 имеет потолок 494 ГБ - это его физический предел (Capacity Ceiling). Тома внутри не имеют своего жёсткого размера: каждый занимает столько, сколько реально использует. Свободные 281 ГБ (Capacity Not Allocated) принадлежат всему контейнеру и достанутся любому тому, который начнёт расти. Поэтому если ты сделаешь diskutil info по тому Data, ты увидишь, что его "размер" равен почти всему контейнеру - потому что он может разрастись до его пределов.

Обрати внимание на пять системных томов - это группа томов (Volume Group), которую macOS создаёт для загрузочного диска начиная с Catalina. Каждый том несёт роль (role), хранящуюся прямо в суперблоке тома:
  • System - системный том, read-only, с macOS 11 он ещё и Sealed (запечатан): загрузка идёт не с самого тома, а с его подписанного снапшота (SSV, Signed System Volume). Подменить системный файл незаметно нельзя - криптографическое дерево хэшей не сойдётся.
  • Data - всё изменяемое: домашние папки, программы, документы. Связан с System в одну группу через firmlinks, поэтому ты видишь единый "Macintosh HD".
  • Preboot - незашифрованный, данные для старта каждого системного тома (в том числе для разблокировки FileVault).
  • Recovery - незашифрованный recoveryOS, доступен без разблокировки системы.
  • VM - незашифрованный, под файлы подкачки (swap).
Preboot, Recovery и VM - общие на контейнер, они не дублируются для каждой системы. Это и есть ответ на вопрос "почему томов так много, я же ставил одну систему".

Снапшоты: машина времени внутри файловой системы

Теперь к самому интересному. APFS - файловая система с copy-on-write (CoW): при изменении блока данных она не перезаписывает его на месте, а пишет новую копию и переставляет указатель. Старый блок остаётся, пока на него кто-то ссылается. Из этого свойства бесплатно вырастает снапшот (apfs снапшот) - моментальный, read-only слепок состояния тома на конкретный момент.

Ключевое: снапшот создаётся мгновенно и поначалу не занимает места вообще. Он просто фиксирует набор указателей на блоки "как было". Дальше живая система меняется, старые блоки она уже не освобождает (на них держит ссылку снапшот) - и вот эта разница между "как было" и "как стало" и есть то место, что отъедает снапшот. Чем больше ты изменил с момента снапшота, тем он "тяжелее".

На снапшотах построены две критичные вещи: обновления macOS (перед апдейтом система делает снапшот, чтобы можно было откатиться) и Time Machine. Локальные снапшоты Time Machine лежат прямо на твоём диске - это они часто и есть тот самый "загадочный поглотитель места".

Смотрим снапшоты на смонтированном томе:

Код: Выделить всё

$ diskutil apfs listSnapshots /System/Volumes/Data
Snapshot for disk3s5 (1 found)
+-- AA11BB22-CC33-DD44-EE55-FF6677889900
    Name: com.apple.TimeMachine.2026-06-15-091230.local
    XID:  0x4F2A1
    Purgeable: Yes
Поле Purgeable: Yes - флаг, что система может удалить этот снапшот сама, когда место понадобится. Список через tmutil даёт даты:

Код: Выделить всё

$ tmutil listlocalsnapshotdates /
Snapshot dates for volume group containing disk /:
2026-06-15-091230
2026-06-15-141502
Куда делось место: purgeable и "очищаемое"

Вот разгадка истории из вступления. Когда ты удаляешь 50 ГБ, но эти файлы попали в локальный снапшот - физически блоки не освобождаются, потому что снапшот на них ссылается. Finder честно помечает это как "очищаемое" (purgeable) место: оно занято, но будет отдано под давлением. Поэтому "свободного" по факту меньше, чем кажется по человеческому подсчёту "файлов на N гигабайт".

Управлять этим можно руками. Утончить (thin) локальные снапшоты, освободив примерно нужный объём в байтах, с приоритетом срочности 4:

Код: Выделить всё

$ sudo tmutil thinlocalsnapshots / 21474836480 4
Thinned local snapshots:
2026-06-15-091230
Здесь 21474836480 - это 20 ГБ в байтах, 4 - уровень настойчивости. Удалить конкретный снапшот по дате:

Код: Выделить всё

$ sudo tmutil deletelocalsnapshots 2026-06-15-091230
Deleted local snapshot '2026-06-15-091230'
Либо через diskutil по идентификатору (XID или UUID):

Код: Выделить всё

$ diskutil apfs deleteSnapshot /System/Volumes/Data -xid 0x4F2A1
Важно: не превращай удаление снапшотов в привычку для "освобождения места". Это твой ремень безопасности - именно из локального снапшота Time Machine ты можешь вернуть случайно удалённый файл за сегодня без внешнего диска. Удаляй осознанно, когда место реально критично.

Снапшот как инструмент отката - отдельная сила. Перед рискованной операцией (правка системных конфигов, эксперимент) можно снять снапшот командой tmutil snapshot, а если всё пошло не так - вернуться. Полноценный откат на снапшот тома выполняется через diskutil:

Код: Выделить всё

$ tmutil snapshot
Created local snapshot with date: 2026-06-15-153000

# ... что-то сломали ...

$ diskutil apfs revert /dev/disk3s5 -snapshotName com.apple.TimeMachine.2026-06-15-153000.local
Откат загрузочного тома Data выполняется не на работающей системе, а из recoveryOS - живой том так просто не перемотаешь. Учитывай это: revert на смонтированный в чтение-запись системный том даст отказ.

Клоны файлов: копия за ноль байт

Второй подарок copy-on-write - клоны. Когда ты копируешь файл в пределах одного тома APFS через Finder или команду cp -c, система не дублирует данные. Она создаёт новую запись каталога, которая ссылается на те же блоки. Место занимает только метаданные - сами данные общие, пока ты не начнёшь править копию. Тогда правится только изменённый блок (опять CoW), остальное остаётся общим.

Код: Выделить всё

$ mkfile 1g big.dat
$ df -h .
Filesystem   Size   Used  Avail ...
/dev/disk3s5  466Gi  213Gi 253Gi ...

$ cp -c big.dat big_clone.dat     # -c просит APFS-клон
$ df -h .
Filesystem   Size   Used  Avail ...
/dev/disk3s5  466Gi  213Gi 253Gi ...   # Used почти не вырос
Разбор: два файла по гигабайту, а "Used" не прибавилось - данные общие. Это объясняет вторую загадку из вступления, только наоборот: иногда копия "ничего не весит". Флаг -c у cp - явный запрос клона (без него поведение зависит от обстоятельств). Клоны - причина, по которой "размер папки" и "реально занятое место" в APFS могут расходиться в разы.

Нативное шифрование: FileVault поверх APFS

В HFS+ шифрование было надстройкой (CoreStorage). В APFS шифрование - встроенное свойство тома, нескольких уровней (без шифрования, одноключевое, многоключевое - где у файлов и метаданных свои ключи). На Apple Silicon оно опирается на Secure Enclave и аппаратный AES-движок, поэтому накладные расходы минимальны.

FileVault на современном Mac включает шифрование тома Data. Управлять им из терминала - fdesetup. Проверить статус:

Код: Выделить всё

$ fdesetup status
FileVault is On.
Включить (запросит пароль и выдаст ключ восстановления - сохрани его):

Код: Выделить всё

$ sudo fdesetup enable
Enter the user name: admin
Enter the password for user 'admin':
Recovery key = 'XXXX-XXXX-XXXX-XXXX-XXXX-XXXX'
Список пользователей, которым разрешено разблокировать диск на загрузке:

Код: Выделить всё

$ sudo fdesetup list
admin,11111111-2222-3333-4444-555555555555
Тонкость Apple Silicon: данные на внутреннем накопителе шифруются аппаратно всегда, даже при выключенном FileVault - просто без него ключ привязан к железу и доступен сразу после старта. Включённый FileVault добавляет к этому требование пароля пользователя для расшифровки, то есть реальную защиту "при выключенном/украденном Mac". Поэтому "у меня же Apple Silicon, и так зашифровано" - не аргумент: без FileVault злоумышленник, загрузивший твою систему, увидит данные.

Создаём и удаляем том: diskutil apfs на практике

Самое полезное в space sharing - можно завести отдельный том под задачу (например, под другую версию системы, под чистую песочницу, под общий кэш), и он не отъест место навсегда, а будет делить пул. Добавляем том в существующий контейнер:

Код: Выделить всё

$ diskutil apfs addVolume disk3 APFS "Sandbox"
Started APFS operation on disk3
Preparing to add APFS Volume to APFS Container disk3
Creating APFS Volume
Mounting APFS Volume
Finished APFS operation on disk3
Том Sandbox появился, смонтировался в /Volumes/Sandbox и не занял ни байта сверх метаданных - он делит свободное место контейнера. Можно ограничить его аппетит квотой (-quota) или гарантировать минимум (-reserve), если не хочешь, чтобы один том сожрал всё:

Код: Выделить всё

$ diskutil apfs addVolume disk3 APFS "Sandbox" -quota 50g -reserve 5g
Удаляем том целиком (данные пропадут, место вернётся в общий пул):

Код: Выделить всё

$ diskutil apfs deleteVolume disk3s7
Started APFS operation on disk3s7
Deleting APFS Volume from its APFS Container
Removing any cryptographic users on the APFS Volume
Deleting APFS Volume
Finished APFS operation on disk3s7
Тома группы Volume Group (System+Data) так удалять нельзя - это снос системы. Тренируйся на отдельно созданных томах вроде Sandbox.

Типичные грабли
  • "Свободного места меньше, чем сумма размеров файлов". Виноваты снапшоты и purgeable. Считай место через df и Disk Utility, а не сложением размеров папок.
  • du врёт на клонах и снапшотах. BSD-шный du (это macOS, не GNU) считает занятые блоки, и для клонов посчитает данные дважды, а для общих с другим томом блоков - покажет то, что введёт в заблуждение. Для реальной картины - df по тому и diskutil apfs list по контейнеру.
  • "Удалил снапшоты, а место не вернулось сразу". Утончение асинхронно, и если на блоки ссылается ещё один снапшот - они не освободятся, пока жив последний из них.
  • Откатываю снапшот на работающей системе - отказ. revert загрузочного Data делается из recoveryOS. На живом смонтированном томе - нет.
  • Контейнер "не отдаёт место" другому контейнеру. Space sharing работает внутри одного контейнера, между разными контейнерами места не текут - там нужен diskutil apfs resizeContainer.
  • cp без -c. Не каждое копирование - клон. Хочешь гарантированно клон в пределах тома - используй cp -c.
Мини-лаба: повтори руками

Нужен Mac на APFS (любой современный). Команды с sudo выполняй осознанно.
  • 1. Посмотри иерархию: diskutil apfs list. Найди свой загрузочный контейнер, отметь Capacity In Use и Capacity Not Allocated.
  • 2. Создай снапшот: tmutil snapshot. Затем tmutil listlocalsnapshotdates / - убедись, что он появился.
  • 3. Загляни в детали: diskutil apfs listSnapshots /System/Volumes/Data. Отметь поле Purgeable.
  • 4. Эксперимент с клоном: mkfile 1g ~/big.dat, запиши df -h ~ . Сделай cp -c ~/big.dat ~/big2.dat и снова df -h ~ - сравни Used. Удали оба файла.
  • 5. Добавь свой том: diskutil apfs addVolume diskN APFS "Lab" (N - номер твоего контейнера из шага 1). Проверь, что он смонтировался, и удали: diskutil apfs deleteVolume diskNsM.
  • 6. Проверь шифрование: fdesetup status. Если FileVault выключен, оцени, нужен ли он тебе (для ноутбука - почти всегда да).
  • 7. Прибери снапшот теста: tmutil deletelocalsnapshots <дата из шага 2>.
Контрольные вопросы
  • 1. Чем контейнер APFS отличается от тома и что такое space sharing? Почему "размер тома" в diskutil info обычно равен почти всему диску?
  • 2. Почему свободного места часто меньше, чем кажется, и что такое purgeable? Какие две команды помогут вернуть место от снапшотов?
  • 3. Как copy-on-write порождает одновременно и снапшоты, и клоны файлов? Почему клон не занимает места, пока ты не правишь копию?
  • 4. На Apple Silicon диск зашифрован аппаратно всегда. Что тогда даёт FileVault и почему его всё равно стоит включать?
Итог

APFS - это не "папки на разделе", а пул свободного места (контейнер) с тонкими томами поверх него, плюс copy-on-write, из которого почти бесплатно растут снапшоты и клоны. Снапшоты - основа обновлений и Time Machine и причина "очищаемого" места; клоны - причина, по которой копия может ничего не весить; шифрование встроено в том и управляется fdesetup. Твой главный инструмент - diskutil apfs (list, listSnapshots, addVolume, deleteVolume, revert) плюс tmutil для снапшотов. Перестань считать место сложением папок - смотри контейнер целиком, и загадки исчезнут.
👍3 ❤️3 🔥2 😄 🤔
Аватара пользователя
resensei
Сообщения: 1
Зарегистрирован: 11 май 2026, 11:26

Re: APFS: снапшоты, клоны, контейнеры и шифрование

Сообщение resensei »

Вот это разрыв шаблона - всю жизнь думал что cp всегда дублирует данные. Проверил cp -c на гиговом файле, Used реально не вырос. Спасибо, теперь понятно почему папка на 200 гигов занимает 30.
👍1 ❤️2 🔥 😄 🤔
Аватара пользователя
sakamo99
Сообщения: 1
Зарегистрирован: 14 май 2026, 18:24

Re: APFS: снапшоты, клоны, контейнеры и шифрование

Сообщение sakamo99 »

А можно ли как-то запретить системе самой плодить локальные снапшоты Time Machine? У меня SSD маленький и эти purgeable гигабайты бесят, постоянно ловлю недостаточно места при апдейтах.
👍1 ❤️1 🔥1 😄 🤔
Ответить
← Предыдущая глава
Конфигурация как код: defaults, plist и профили
Следующая глава →
Управление дисками: diskutil, образы и форматирование

Все главы курса «macOS для профи: администрирование, терминал и Homebrew»

Поделиться темой: ✈ Telegram VK
Похожие запросы: Контейнеры и виртуализация на MacСреда разработчика на MacApple Silicon: ARM, Rosetta 2Файловая система APFSУправление дисками на MacШифрование диска на Mac

Вернуться в «macOS для профи: администрирование, терминал и Homebrew»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость