Сборка пишет тысячи мелких файлов, которые через день никому не нужны: DerivedData, target, build, кэши пакетов. На RAM-диске вся эта работа идёт в памяти: сборки и обращения к кэшу ускоряются, а SSD не изнашивается. Разберём, какие папки стоит переносить, какой настройкой это делается в каждом инструменте и как всё не потерять после перезагрузки.
- Переносить: DerivedData Xcode, кэши npm, pip, Cargo и Gradle, папки сборки, TEMP.
- Не держать только в памяти: исходники, репозитории, архивы, всё несохранённое и незакоммиченное.
- Сохранять между перезагрузками: кэши пакетов да, DerivedData и папки сборки по желанию.
- Размер: 2 ГБ на один кэш пакетов, 8 ГБ на несколько кэшей или DerivedData.
Что переносить, а что не трогать
RAM-диск теряет файлы, когда его извлекают или выключают компьютер, если их нигде не сохранять. Поэтому на нём место тем папкам, которые инструмент сам соберёт или скачает заново.
- DerivedData Xcode: результаты сборки и индексы
- кэши npm, Yarn, pip, Cargo, Gradle, Maven
- папки сборки:
target,build,obj - TEMP на Windows, TMPDIR на Mac
- исходный код и Git-репозитории
- архивы Xcode (Archives) выпущенных сборок
- настройки и учётные данные:
~/.npmrc,gradle.properties - всё, что существует в одном экземпляре
Вручную: настройка каждого инструмента
Сначала создайте RAM-диск (на Mac, на Windows), потом направьте каждый инструмент в папку на нём. Все настройки ниже взяты из документации самих инструментов.
| Инструмент | Папка по умолчанию | Как перенести |
|---|---|---|
| DerivedData Xcode | ~/Library/Developer/Xcode/DerivedData | Xcode > Settings > Locations > Derived Data: Custom. В скриптах: xcodebuild -derivedDataPath <путь> |
| кэш npm | ~/.npm, Windows: %LocalAppData%\npm-cache | npm config set cache <путь> |
| кэш pip | ~/.cache/pip, Mac: ~/Library/Caches/pip, Windows: %LocalAppData%\pip\Cache | PIP_CACHE_DIR=<путь> или --cache-dir |
| сборка Cargo | target в каждом проекте | CARGO_TARGET_DIR=<путь> или build.target-dir в .cargo/config.toml |
| Gradle | ~/.gradle | GRADLE_USER_HOME=<путь> |
На macOS или Linux это выглядит так (диск здесь смонтирован в /Volumes/RAMDisk):
npm config set cache /Volumes/RAMDisk/npm
export PIP_CACHE_DIR=/Volumes/RAMDisk/pip
export CARGO_TARGET_DIR=/Volumes/RAMDisk/cargo-target
Xcode, только на macOS (потом перезапустите Xcode):
defaults write com.apple.dt.Xcode IDECustomDerivedDataLocation /Volumes/RAMDisk/DerivedData
GRADLE_USER_HOME переносит и gradle.properties, и init-скрипты, и дистрибутивы Wrapper, а в CARGO_HOME лежат установленные утилиты и учётные данные. Здесь лучше перенести только папки кэша (~/.gradle/caches, ~/.cargo/registry) символической ссылкой (ln -s, на Windows mklink /J). И помните: после перезагрузки RAM-диска нет, и все настройки и ссылки ведут в пустоту, пока вы не создадите его снова. С Exlade RamDisk: шаблоны
Exlade RamDisk - бесплатный RAM-диск для Windows, macOS и Linux. Его шаблоны делают всё это за вас и отменяют, когда диск извлекают.
Developer (8 ГБ, Windows и Linux) переносит кэши npm, Yarn, pip, Cargo, Gradle, Maven, Go и NuGet. npm (2 ГБ) есть на всех трёх системах, Xcode (8 ГБ, macOS) забирает DerivedData. Папки неустановленных инструментов шаблон пропускает.

В разделе «Папки на этом диске» нажмите «Добавить папку…» и выберите target, build или obj проекта. Включите «Создавать при запуске Windows», а для кэшей пакетов и «Сохранять файлы».

На Windows и Linux на месте папки остаётся ссылка на диск (на Windows - junction, права администратора не нужны), и инструменты видят привычные пути. На Mac шаблон Xcode меняет место DerivedData в настройках Xcode (перезапустите Xcode), а шаблон npm прописывает cache в ~/.npmrc. Когда диск извлекают, всё возвращается.
Сохранять ли файлы после перезагрузки
| Папка | Сохранять? | Почему |
|---|---|---|
| кэши npm, pip, Cargo, Gradle | да | иначе пакеты скачиваются заново после каждой перезагрузки |
| DerivedData Xcode | по желанию | заполняется заново при первой сборке |
| папки сборки | по желанию | первая сборка после перезагрузки будет полной |
| TEMP, TMPDIR | нет | это временные файлы |
Поэтому шаблон Developer на Windows сохраняет файлы, а Xcode нет. Диск при запуске с «Сохранять файлы» сохраняет их по расписанию и перед выключением; при внезапном отключении питания теряется только то, что изменилось после последнего сохранения.
Сколько памяти отдать
Начните с размера шаблона. На Windows, Linux и macOS 26 диск занимает память по мере записи файлов, а не весь размер сразу. На macOS 15 весь размер резервируется, как только диск создан, поэтому шаблон Xcode на 8 ГБ сразу держит 8 ГБ памяти: там выбирайте размер, который ваш Mac может отдать. Размер диска можно поменять и позже: на Mac и Linux файлы остаются, а на Windows на месте меняется только диск NTFS (поэтому шаблоны Developer и npm создают NTFS), диск exFAT или FAT32 придётся создать заново. Через день работы «История использования» покажет, сколько на самом деле нужно каждому диску. На компьютере с 8 ГБ памяти RAM-диск быстро начнёт отнимать её у IDE и компиляторов. Подробнее: стоит ли заводить RAM-диск и Память и история.
Сборочные серверы и CI
У утилиты eramdisk одни и те же команды на Windows, macOS и Linux и вывод в JSON для скриптов. На Linux-сервер можно поставить только службу и утилиту, без графического интерфейса.
eramdisk create -t Developer # кэши пакетов (Windows, Linux)
eramdisk create -s 4G -n Build --startup # диск, создаваемый при каждом запуске
eramdisk redirect add Build ~/src/app/target # перенести на него папку сборки
eramdisk list --json # диски и сколько они занимают
Частые вопросы
Заметит ли Xcode, что DerivedData переехала?
Да, после перезапуска Xcode: шаблон Xcode меняет то же место Derived Data, что задаётся в Xcode > Settings > Locations. Когда диск извлекают, прежняя настройка возвращается.
Можно ли держать исходники на RAM-диске?
Лучше не надо. Если диск пропадёт до сохранения файлов, незакоммиченная работа потеряется. Держите код на SSD, а на RAM-диск кладите только то, что можно собрать или скачать заново.
Windows 10 и 11, macOS 15 и новее, Ubuntu, Debian и Fedora. Без регистрации и пробного периода.
Скачать бесплатно Возможности